Windows 10环境下LangChain与MySQL联合开发完全指南(2024版)

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

Windows 10环境下LangChain与MySQL联合开发完全指南(2024版)

引言

LangChain是一个强大的框架,用于构建基于语言模型的应用程序。当它与MySQL数据库结合使用时,可以创建出能够查询、分析和处理结构化数据的智能应用。本教程将带你从零开始,在Windows 10环境下搭建LangChain与MySQL的开发环境,并实现一个完整的示例应用。

准备工作

环境要求

  1. Windows 10操作系统
  2. Python 3.8或更高版本
  3. MySQL Server 8.0或更高版本
  4. Visual Studio Code或其他Python IDE

需要安装的软件

第一部分:环境配置

1. 安装Python和必要库

首先确保已安装Python,然后在命令提示符中执行以下命令安装所需库:

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

说明
langchain: LangChain核心库
openai: OpenAI API客户端(如果使用OpenAI模型)
mysql-connector-python: MySQL官方Python连接器
python-dotenv: 用于管理环境变量

2. MySQL数据库安装与配置

  1. 从MySQL官网下载并安装MySQL Community Server
  2. 安装过程中设置root用户密码(请妥善保存)
  3. 完成安装后,确保MySQL服务正在运行(可在服务管理中查看)

3. 创建测试数据库和表

打开MySQL命令行客户端或Workbench,执行以下SQL:

代码片段
CREATE DATABASE langchain_demo;
USE langchain_demo;

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    category VARCHAR(50) NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    description TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO products (name, category, price, description)
VALUES 
    ('MacBook Pro', 'Electronics', 1999.99, 'Apple laptop with M2 chip'),
    ('iPhone 15', 'Electronics', 999.99, 'Latest Apple smartphone'),
    ('Coffee Maker', 'Home Appliances', 79.99, 'Automatic coffee machine'),
    ('Desk Lamp', 'Home Office', 39.99, 'LED desk lamp with adjustable brightness');

第二部分:基础集成示例

1. Python连接MySQL基础示例

创建一个db_connection.py文件:

代码片段
import mysql.connector
from dotenv import load_dotenv
import os

# 加载环境变量
load_dotenv()

def get_db_connection():
    """建立并返回MySQL数据库连接"""
    try:
        conn = mysql.connector.connect(
            host="localhost",
            user=os.getenv("DB_USER", "root"),     # 默认使用root用户
            password=os.getenv("DB_PASSWORD", ""), # 从.env文件读取密码更安全
            database="langchain_demo"
        )
        print("成功连接到MySQL数据库")
        return conn
    except mysql.connector.Error as err:
        print(f"数据库连接错误: {err}")
        return None

def test_query():
    """测试查询"""
    conn = get_db_connection()
    if conn:
        cursor = conn.cursor(dictionary=True)
        cursor.execute("SELECT * FROM products LIMIT 2")
        results = cursor.fetchall()

        print("\n查询结果:")
        for row in results:
            print(row)

        cursor.close()
        conn.close()

if __name__ == "__main__":
    test_query()

注意事项
1. 安全性提示:在实际项目中,不要将数据库凭据硬编码在代码中。使用.env文件存储敏感信息。
2. 资源管理:确保在使用完连接后关闭它们,避免资源泄漏。

2. LangChain与SQLDatabase集成

创建一个langchain_sql.py文件:

代码片段
from langchain.sql_database import SQLDatabase
from langchain.chains import SQLDatabaseChain
from langchain.chat_models import ChatOpenAI
from dotenv import load_dotenv
import os

# 加载环境变量(包含OpenAI API密钥)
load_dotenv()

# MySQL连接配置 - 实际项目中应从环境变量获取这些值
db_config = {
    "host": "localhost",
    "user": os.getenv("DB_USER", "root"),
    "password": os.getenv("DB_PASSWORD", ""),
    "database": "langchain_demo"
}

def setup_sql_chain():
    """设置LangChain SQL数据库链"""

    # Step 1: 创建SQLDatabase实例
    db = SQLDatabase.from_uri(
        f"mysql+mysqlconnector://{db_config['user']}:{db_config['password']}@{db_config['host']}/{db_config['database']}"
    )

    # Step 2: 初始化语言模型(这里使用ChatGPT)
    llm = ChatOpenAI(
        model_name="gpt-3.5-turbo",
        temperature=0,
        openai_api_key=os.getenv("OPENAI_API_KEY") # OpenAI API密钥应存储在.env文件中
    )

    # Step 3: 创建SQLDatabaseChain实例
    db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)

    return db_chain

def run_query(db_chain, question):
    """使用LangChain运行自然语言查询"""
    try:
        result = db_chain.run(question)
        print(f"\n问题: {question}")
        print(f"回答: {result}")
        return result
    except Exception as e:
        print(f"查询出错: {e}")
        return None

if __name__ == "__main__":

    # Step A: OpenAI API密钥检查(必须设置才能运行)
    if not os.getenv("OPENAI_API_KEY"):
        print("错误: OPENAI_API_KEY未设置。请在.env文件中添加您的OpenAI API密钥")
        exit(1)

    # Step B: Setup the chain once and reuse it for multiple queries (更高效)
    chain = setup_sql_chain()

    # Step C: Run sample queries (演示不同场景)

    1️⃣ # Scenario A: Simple data retrieval (简单数据检索)
     run_query(chain, "我们有哪些类别的产品?")

    2️⃣ # Scenario B: Aggregation query (聚合查询)
     run_query(chain, "最贵的产品是什么?价格是多少?")

    3️⃣ # Scenario C: Complex analysis (复杂分析)
     run_query(chain, "电子产品和非电子产品的平均价格差是多少?")

关键点解释
1. SQLDatabase: LangChain提供的包装器,简化了与SQL数据库的交互。
2. SQLDatabaseChain: LangChain链,将自然语言转换为SQL查询并执行。
3. ChatOpenAI: LangChain的OpenAI聊天模型接口。

第三部分:高级应用示例

RAG (检索增强生成)模式实现

创建一个rag_example.py文件:

代码片段
from langchain.document_loaders import SQLDatabaseLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.chains import RetrievalQAWithSourcesChain 
from langchain.chat_models import ChatOpenAI 
from langchain.indexes import VectorstoreIndexCreator 
from dotenv import load_dotenv 
import os 

load_dotenv()

class MySQLRAGSystem:
   def __init__(self):
       self.db_config = {
           "host": "localhost",
           "user": os.getenv("DB_USER", "root"),
           "password": os.getenv("DB_PASSWORD", ""),
           "database": "langchain_demo"
       }
       self.db_url = f"mysql+mysqlconnector://{self.db_config['user']}:{self.db_config['password']}@{self.db_config['host']}/{self.db_config['database']}"

   def initialize_system(self):
       """初始化RAG系统"""

       # Step A: Load data from MySQL as documents (从MySQL加载数据作为文档)
       loader = SQLDatabaseLoader.from_uri(
           self.db_url,
           include_tables=['products'],   # Specify tables to include 
           sample_rows_in_table_info=3   # Number of sample rows to include in table info 
       )

       documents = loader.load()

       # Step B: Split documents into chunks (将文档分块) 
       text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
       texts = text_splitter.split_documents(documents)

       # Step C: Create vector store index (创建向量存储索引) 
       self.index = VectorstoreIndexCreator().from_loaders([loader])

       # Step D: Initialize LLM and QA chain (初始化LLM和QA链) 
       llm = ChatOpenAI(model_name="gpt-4", temperature=0) 
       self.qachain = RetrievalQAWithSourcesChain.from_llm(llm=llm, retriever=self.index.as_retriever())

   def query(self, question):
       """执行RAG查询"""
       result = self.qachain({"question": question})

       print("\n=== RAG Query Result ===")
       print(f"Question:\t{result['question']}")
       print(f"Answer:\t\t{result['answer']}")
       if result.get('sources'):
           print(f"Sources:\t{result['sources']}")

if __name__ == "__main__":
   if not os.getenv("OPENAI_API_KEY"):
      print("Error: OPENAI_API_KEY not set in .env file") 
      exit(1) 

   rag_system = MySQLRAGSystem() 
   rag_system.initialize_system() 

   questions = [
      "根据产品数据,你会推荐哪些高端电子产品?为什么?",
      "比较我们的家用电器和办公产品的价格范围",
      "基于现有数据,建议我们可以增加哪些产品类别?"
   ]

   for q in questions:
      rag_system.query(q) 

Windows特有注意事项

  1. 路径问题

    • Windows使用反斜杠\作为路径分隔符,但在Python字符串中应使用原始字符串或双反斜杠:
      代码片段
      config_path = r"C:\Users\YourName\config.env"<br>
      
  2. 服务管理

    • MySQL服务可能不会自动启动。可以通过以下命令管理服务:
      代码片段
      net start mysql80   #启动MySQL服务(Win+R输入services.msc也可图形化管理)
      net stop mysql80   #停止服务  <br>
      
  3. 防火墙设置

    • Windows Defender防火墙可能会阻止本地连接。确保允许localhost的连接或添加例外规则。
  4. 性能优化

    • Windows上的Python可能不如Linux高效。对于大型数据集处理考虑:
      • WSL2 (Windows Subsystem for Linux)中运行Python代码
      • PyPy解释器替代CPython

Troubleshooting常见问题解决方案

错误1: mysql.connector.errors.DatabaseError: Access denied for user...
解决方案:
1️⃣检查用户名/密码是否正确
2️⃣确认用户有访问指定数据库的权限
3️⃣尝试重置密码后重新连接

错误2: ModuleNotFoundError: No module named 'langchain'
解决方案:
1️⃣确认已正确安装包 (pip show langchain)
2️⃣检查是否在正确的Python环境中操作
3️⃣尝试重新安装 (pip install --force-reinstall langchain)

错误3: SQL查询返回中文乱码
解决方案:
在连接字符串中添加字符集参数:

代码片段
f"mysql+mysqlconnector://...?charset=utf8mb4"

错误4: OpenAI API请求超时
解决方案:
1️⃣检查网络连接是否正常
2️⃣尝试设置代理(如在中国大陆地区)

Conclusion总结

通过本教程我们完成了:

✔️ Windows环境下LangChain+MySQL开发环境的搭建
✔️ Python与MySQL的基础交互实现
✔️ LangChain的SQLDatabaseChain实际应用
✔️ RAG模式的进阶实现
✔️ Windows平台特有问题的解决方案

关键要点回顾:

🔹 始终保护敏感信息:使用.env文件管理API密钥和数据库凭证
🔹 资源管理:及时关闭数据库连接避免泄漏
🔹 模块化开发:将不同功能拆分为独立模块/类便于维护

下一步学习建议:

📌 LangChain官方文档深入阅读 https://python.langchian.com
📌 MySQL性能优化技巧学习
📌 RAG模式在不同场景下的应用探索

原创 高质量