Windows 11手把手教程:MySQL 8.0与LangChain的本地开发环境搭建

云信安装大师
90
AI 质量分
11 5 月, 2025
5 分钟阅读
0 阅读

Windows 11手把手教程:MySQL 8.0与LangChain的本地开发环境搭建

引言

在AI应用开发中,数据库和LangChain框架的结合使用越来越普遍。本文将指导你在Windows 11系统上搭建MySQL 8.0数据库,并配置Python的LangChain开发环境。无论你是想开发AI聊天机器人还是构建知识库系统,这个环境都是理想的基础。

准备工作

在开始之前,请确保你的系统满足以下要求:

  • Windows 11操作系统(版本21H2或更高)
  • 管理员权限
  • 至少4GB可用内存
  • Python 3.8或更高版本(推荐3.10)
  • 稳定的网络连接

第一部分:安装MySQL 8.0

步骤1:下载MySQL安装包

  1. 访问MySQL官方下载页面:https://dev.mysql.com/downloads/installer/
  2. 选择”MySQL Installer for Windows”
  3. 下载大小约450MB的安装程序(mysql-installer-web-community-8.0.*.msi)

步骤2:运行安装向导

代码片段
# 以管理员身份运行PowerShell,然后执行:
Start-Process -FilePath "mysql-installer-web-community-8.0.*.msi" -Verb RunAs

安装向导界面操作:

  1. 选择”Developer Default”安装类型
  2. 点击”Execute”按钮下载所需组件(这可能需要一些时间)
  3. 安装过程中会提示安装Visual Studio Redistributable和Python组件,全部接受

步骤3:配置MySQL服务器

在配置向导中:

  1. Authentication Method:选择”Use Strong Password Encryption for Authentication (RECOMMENDED)”
  2. 设置root密码:创建一个强密码并牢记(示例:My$ecureP@ss123!)
  3. Windows Service:保持默认服务名”MySQL80″,并设置为自动启动
  4. Advanced Options
    • 启用”Show Advanced Options”
    • TCP/IP端口保持3306
    • 字符集选择”utf8mb4″

步骤4:验证安装

代码片段
# 打开新的PowerShell窗口测试连接
mysql -u root -p

输入你设置的root密码后,你应该能看到MySQL命令行提示符:

代码片段
mysql>

输入以下命令测试:

代码片段
SHOW DATABASES;
exit;

MySQL常见问题解决

问题1:无法连接到MySQL服务器
解决:检查服务是否运行 Get-Service MySQL80

问题2:忘记root密码
解决
1. net stop MySQL80
2. mysqld --console --skip-grant-tables --shared-memory
3. 新终端执行 mysql -u root
4. ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

第二部分:配置Python和LangChain环境

步骤1:创建虚拟环境

代码片段
# Python虚拟环境可以隔离不同项目的依赖
python -m venv langchain_env
.\langchain_env\Scripts\activate

激活后提示符会显示 (langchain_env)

步骤2:安装必需包

代码片段
pip install langchain openai mysql-connector-python python-dotenv pymysql tiktoken

各包作用说明:
langchain: AI应用开发框架核心
openai: OpenAI API接口(可选)
mysql-connector-python: MySQL官方Python驱动
python-dotenv: .env文件支持
pymysql: MySQL纯Python替代连接器
tiktoken: OpenAI分词工具

LangChain版本兼容性说明

目前稳定版本是0.0.x系列,但API变化较快。建议固定版本:

代码片段
pip install langchain==0.0.* openai==0.*.* 

第三部分:创建示例项目

MySQL数据库准备

首先创建一个测试数据库和表:

代码片段
CREATE DATABASE langchain_demo;
USE langchain_demo;

CREATE TABLE documents (
    id INT AUTO_INCREMENT PRIMARY KEY,
    content TEXT NOT NULL,
    metadata JSON,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

插入一些测试数据:

代码片段
INSERT INTO documents (content, metadata) VALUES 
('LangChain是一个用于开发语言模型应用的框架', '{"source": "官网", "type": "介绍"}'),
('MySQL是最流行的开源关系型数据库之一', '{"source": "维基百科", "type": "定义"}');

Python连接示例

创建demo.py文件:

代码片段
import os
from dotenv import load_dotenv
from langchain.document_loaders import SQLDatabaseLoader
from langchain.indexes import VectorstoreIndexCreator

# 加载环境变量(推荐将敏感信息放在.env文件中)
load_dotenv()

# MySQL连接配置(实际项目中应使用环境变量) 
db_config = {
    "host": "localhost",
    "user": "root",
    "password": os.getenv("MYSQL_PASSWORD"), # .env文件中设置MYSQL_PASSWORD=你的密码 
    "database": "langchain_demo",
    "port": 3306,
}

def basic_query_example():
    """基础SQL查询示例"""
    from mysql.connector import connect

    conn = connect(**db_config)
    cursor = conn.cursor(dictionary=True)

    cursor.execute("SELECT * FROM documents LIMIT 2")
    results = cursor.fetchall()

    print("=== SQL查询结果 ===")
    for row in results:
        print(f"ID: {row['id']}")
        print(f"内容: {row['content'][:50]}...")
        print("-" * 30)

    cursor.close()
    conn.close()

def langchain_integration():
    """LangChain集成示例"""
    from langchain.sql_database import SQLDatabase

    # SQLDatabase是LangChain的数据库抽象层 
    db = SQLDatabase.from_uri(
        f"mysql+mysqlconnector://{db_config['user']}:{db_config['password']}@{db_config['host']}:{db_config['port']}/{db_config['database']}"
    )

    # SQLDatabaseLoader可以加载数据库内容作为文档源 
    loader = SQLDatabaseLoader(db, table_name="documents")

    # VectorstoreIndexCreator会自动处理文档索引创建 
    index = VectorstoreIndexCreator().from_loaders([loader])

    # Now you can query the index like a vector database 
    query = "什么是LangChain?"
    print(f"\n=== LangChain查询: '{query}' ===")

    result = index.query(query)
    print("回答:", result)

if __name__ == "__main__":
    basic_query_example()

    if input("\n运行LangChain集成示例? (y/n): ").lower() == 'y':
        langchain_integration()

运行结果应该类似:

代码片段
=== SQL查询结果 ===  
ID: 1  
内容: LangChain是一个用于开发语言模型应用的框架...  
------------------------------  
ID: 2  
内容: MySQL是最流行的开源关系型数据库之一...  

运行LangChain集成示例? (y/n): y  

=== LangChain查询: '什么是LangChain?' ===  
回答: LangChain是一个用于开发语言模型应用的框架。

Windows特有注意事项

  1. 服务管理

    代码片段
    # MySQL服务管理命令  
    Start-Service MySQL80      #启动  
    Stop-Service MySQL80       #停止  
    Restart-Service MySQL80     #重启  
    
  2. 防火墙配置

    代码片段
    New-NetFirewallRule -DisplayName "MySQL Server" -Direction Inbound -Protocol TCP -LocalPort @(3306) -Action Allow   
    
  3. 性能优化

    代码片段
    # my.cnf中的关键Windows优化参数   
    [mysqld]   
    innodb_buffer_pool_size=512M     #根据内存调整   
    innodb_flush_log_at_trx_commit=2 #平衡性能与安全性   
    

VS Code开发建议

  1. 推荐扩展

    • Python (Microsoft)
    • MySQL (cweijan)
    • Pylance
  2. 调试配置

    代码片段
    // launch.json   
    {     
        "version": "0.2",     
        "configurations": [       
            {         
                "name": "Python: Current File",         
                "type": "python",         
                "request": "launch",         
                "program": "${file}",         
                //对于需要.env的项目         
                //添加:"envFile": "${workspaceFolder}/../..//..//..//..//..//..//..//..//..//..//..//..//${workspaceFolder}/../..//..//..//${workspaceFolder}/../..//${workspaceFolder}/../${workspaceFolder}/./${workspaceFolder}/../${workspaceFolder}/./${workspaceFolder}/../${workspaceFolder}/./${workspaceFolder}/../${workspaceFolder}/./${workspaceFolder}/../${workspaceFolder}/./${workspaceFolder}/../${workspaceFolder}/./${workspaceFolder}"       
            }     
        ]   
    }   
    

Windows与Linux差异处理

当需要跨平台时,注意以下差异点:

  1. 路径分隔符

    代码片段
    from pathlib import Path   
    
    # Windows正确方式   
    config_path = Path("C:/data/config.json") #正斜杠或双反斜杠 \\\\     
    
    # Bad: config_path = Path("C:\data\config.json") #会转义出错!   
    
  2. 换行符处理

    代码片段
    with open("file.txt", newline='', encoding='utf8') as f:     
        content = f.read()     
    
        if os.linesep != '\n':       
            content = content.replace(os.linesep, '\n')     
    
        lines = content.split('\n')   
    
    

LangChain进阶用法

将MySQL数据与LLM结合的高级示例:

代码片段
from langchain.chains import LLMChain, SimpleSequentialChain   
from langchain.prompts import PromptTemplate   

def advanced_langchain_example():     
"""结合LLM进行数据处理的完整示例"""     
from langchain.chat_models import ChatOpenAI      
from sqlalchemy import create_engine      

# .env中设置OPENAI_API_KEY=sk-your-key      
engine = create_engine(           
f'mysql+mysqlconnector://{db_config["user"]}:{db_config["password"]}@{db_config["host"]}:{db_config["port"]}/{db_config["database"]}'      
)      

llm = ChatOpenAI(temperature=0, model_name="gpt-3")      

# Chain :分析文档内容      
analyze_template = """基于以下文档内容进行分析总结:
{documents}  

请用中文回答并突出关键信息"""      
analyze_prompt = PromptTemplate(input_variables=["documents"], template=analyze_template)      
analyze_chain = LLMChain(llm=llm, prompt=analyze_prompt)      

# Chain :生成SQL查询建议      
sql_template = """根据用户问题生成SQL查询:
问题:{question}  

已知表结构:
CREATE TABLE documents (
id INT PRIMARY KEY,
content TEXT,
metadata JSON);  

请返回可直接执行的SQL语句"""      
sql_prompt = PromptTemplate(input_variables=["question"], template=sql_template)      
sql_chain = LLMChain(llm=llm, prompt=sql_prompt)      

#组合链执行      
overall_chain = SimpleSequentialChain(chains=[analyze_chain, sql_chain], verbose=True)     

result = overall_chain.run("查找包含'框架'关键字的文档")     
print("\n最终结果:", result)   

if __name__ == "__main__":     
advanced_langchain_example() 

这个例子展示了如何将LLM与SQL数据库无缝集成。

Windows性能监控

确保系统资源充足:

代码片段
Get-Counter '\Process(*)\% Processor Time' | Select-Object -ExpandProperty CounterSamples | Where-Object {$_.InstanceName -match "(mysqld|python)"} | Sort-Object CookedValue -Descending | Select-Object InstanceName,CookedValue | Format-Table 

Get-Counter '\Memory\Available MBytes'

理想情况下应有至少500MB可用内存供开发和测试使用。

Windows任务计划自动备份

创建每日备份任务:

代码片段
$action = New-ScheduledTaskAction -Execute 'cmd.exe' -Argument '/c mysqldump --user=root --password=[YOUR_PASSWORD] --databases langchain_demo > C:\backups\langchain_%date:~10,4%%date:~4,2%%date:~7,2%.sql && exit /b %errorlevel%' 

$trigger = New-ScheduledTaskTrigger -Daily -At '02:00' 

Register-ScheduledTask `
-TaskName 'MySQL Daily Backup' `
-Action $action `
-Trigger $trigger `
-RunLevel Highest `
-Password [YOUR_WINDOWS_PASSWORD]

记得替换方括号中的密码并创建C:\backups目录。

WSL兼容性说明

如果你使用WSL(Windows Subsystem for Linux):

1.Linux中的MySQL可以通过localhost访问Windows服务

2.Windows中的Python也可以连接到WSL的MySQL

但需要注意:

代码片段
# WSL中允许远程连接(不安全!仅开发用) 
sudo sed -i 's/bind\-address.*/bind\-address\t\t= /etc/mysql/mysql.conf.d/mysqld.cnf 

sudo service mysql restart 

# Windows防火墙放行WSL IP(每次重启WSL IP会变!) 
Get-NetIPAddress | Where {$_.InterfaceAlias -like "*WSL*"} | ForEach { New-NetFirewallRule `
-DisplayName WSL-MySQL-Inbound `
-Direction Inbound `
-LocalPort @(3306) `
-Action Allow `
-RemoteAddress $_.IPAddress }

更安全的方式是只在同一系统中使用。

原创 高质量