macOS开发实战:用Python+LangChain构建基于MySQL的智能应用

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

macOS开发实战:用Python+LangChain构建基于MySQL的智能应用

引言

在当今AI时代,将传统数据库与智能语言模型结合可以创造出强大的应用。本文将带你使用Python和LangChain框架,在macOS上构建一个能够理解并处理MySQL数据的智能应用。通过本教程,你将学会如何让AI模型与数据库进行交互,实现自然语言查询数据等功能。

准备工作

环境要求

  • macOS系统(建议10.15及以上版本)
  • Python 3.8+
  • MySQL服务器(本地或远程)
  • 基本的Python和SQL知识

安装必要工具

首先打开终端(Terminal),执行以下命令安装所需软件:

代码片段
# 安装Homebrew(如果尚未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装Python和MySQL
brew install python mysql

# 验证安装
python3 --version
mysql --version

Python环境配置

代码片段
# 创建项目目录并进入
mkdir langchain-mysql-app && cd langchain-mysql-app

# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate

# 安装依赖包
pip install langchain openai python-dotenv mysql-connector-python sqlalchemy

MySQL数据库设置

1. 启动MySQL服务

代码片段
brew services start mysql

2. 创建测试数据库和数据表

登录MySQL控制台:

代码片段
mysql -u root -p

执行以下SQL语句创建测试数据:

代码片段
-- 创建数据库
CREATE DATABASE langchain_demo;
USE langchain_demo;

-- 创建员工表
CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    department VARCHAR(50) NOT NULL,
    salary DECIMAL(10,2) NOT NULL,
    hire_date DATE NOT NULL
);

-- 插入测试数据
INSERT INTO employees (name, department, salary, hire_date) VALUES 
('张三', '技术部', 8500.00, '2020-05-15'),
('李四', '市场部', 7500.00, '2019-11-22'),
('王五', '技术部', 9200.00, '2021-03-10'),
('赵六', '人事部', 6800.00, '2022-01-05');

LangChain与MySQL集成实战

1. 配置环境变量

创建.env文件存储敏感信息:

代码片段
echo "OPENAI_API_KEY=你的OpenAI_API_KEY" > .env
echo "DB_USER=root" >> .env
echo "DB_PASSWORD=你的MySQL密码" >> .env
echo "DB_HOST=localhost" >> .env 
echo "DB_NAME=langchain_demo" >> .env

注意:请替换为你的实际API密钥和数据库密码。

2. Python代码实现

创建app.py文件,添加以下代码:

代码片段
import os
from dotenv import load_dotenv
from langchain import OpenAI, SQLDatabase, SQLDatabaseChain

# 加载环境变量
load_dotenv()

# MySQL连接配置
db_user = os.getenv("DB_USER")
db_password = os.getenv("DB_PASSWORD")
db_host = os.getenv("DB_HOST")
db_name = os.getenv("DB_NAME")

# MySQL连接URI格式: mysql+mysqlconnector://user:password@host/database_name?
db_uri = f"mysql+mysqlconnector://{db_user}:{db_password}@{db_host}/{db_name}"

def setup_db_chain():
    """设置LangChain与MySQL的连接"""

    # 连接到MySQL数据库实例化SQLDatabase对象时传递自定义参数解决编码问题)
    db = SQLDatabase.from_uri(
        db_uri,
        include_tables=['employees'],   #只包含特定表以提高效率)
        sample_rows_in_table_info=2     #每表只采样2行作为上下文)
    )

    #初始化OpenAI LLM模型(gpt-3.5-turbo-instruct是成本较低的版本)
    llm = OpenAI(
        temperature=0,                  #控制输出的随机性)
        model_name="gpt-3.5-turbo-instruct"
    )

    #创建SQLDatabaseChain实例)
    db_chain = SQLDatabaseChain.from_llm(
        llm, 
        db, 
        verbose=True                    #显示详细执行过程便于调试)
    )

    return db_chain

def main():
    """主函数"""

    print("=== MySQL智能查询系统 ===")

    try:
        db_chain = setup_db_chain()

        while True:
            query = input("\n请输入你的问题(输入q退出): ")

            if query.lower() == 'q':
                print("再见!")
                break

            try:
                result = db_chain.run(query)
                print(f"\n回答: {result}")
            except Exception as e:
                print(f"出错: {str(e)}")

    except KeyboardInterrupt:
        print("\n程序被中断")

if __name__ == "__main__":
    main()

代码解释

  1. 环境变量加载:使用python-dotenv安全地管理敏感信息。
  2. 数据库连接:通过SQLAlchemy的URI格式连接MySQL。
  3. LangChain配置
    • SQLDatabase: LangChain的数据库包装器,提供与数据库的交互能力。
    • OpenAI: LangChain封装的LLM接口。
    • SQLDatabaseChain: LangChain的核心组件,将自然语言转换为SQL查询并执行。
  4. 交互循环:持续接收用户输入并返回查询结果。

运行示例

启动应用程序:

代码片段
python app.py

尝试以下自然语言查询:

代码片段
"技术部有多少员工?"
"列出所有薪资超过8000的员工"
"计算市场部的平均薪资"

示例输出:

代码片段
=== MySQL智能查询系统 ===

请输入你的问题(输入q退出):  技术部有多少员工?

> Entering new SQLDatabaseChain chain...
技术部有多少员工?
SQLQuery:SELECT COUNT(*) FROM employees WHERE department = '技术部';
SQLResult: [(2,)]
Answer:技术部有2名员工。

回答:技术部有2名员工.

高级功能扩展

1. SQL代理模式(更灵活)

修改setup_db_chain()函数:

代码片段
from langchain.agents import create_sql_agent
from langchain.agents.agent_toolkits import SQLDatabaseToolkit

def setup_db_agent():
    """使用更灵活的代理模式"""

    db = SQLDatabase.from_uri(db_uri)
    llm = OpenAI(temperature=0)

    toolkit = SQLDatabaseToolkit(db=db, llm=llm)

    agent_executor = create_sql_agent(
        llm=llm,
        toolkit=toolkit,
        verbose=True,
        agent_type="openai-tools"
    )

    return agent_executor

#然后在main()中替换为agent即可体验更智能的交互方式。

2. CSV文件导入功能扩展代码片段:

代码片段
import pandas as pd 

def import_csv_to_mysql(csv_path):
"""辅助函数:将CSV数据导入MySQL"""
df = pd.read_csv(csv_path)

engine = create_engine(db_uri) 
df.to_sql('new_table', engine, if_exists='replace', index=False)

print(f"成功导入数据到表new_table")

Troubleshooting常见问题解决)

1.编码错误:如果遇到编码问题,尝试修改URI为:

代码片段
db_uri += "?charset=utf8mb4&collation=utf8mb4_general_ci"

2.连接超时:检查MySQL服务是否运行:

代码片段
brew services list | grep mysql 

3.API限制:如果OpenAI API调用频繁受限:

代码片段
llm = OpenAI(request_timeout=30) #增加超时时间 

4.复杂查询失败:对于复杂问题可先分解为简单子问题)

总结)

通过本教程你学会了:

✓ macOS环境下Python+LangChain开发环境的搭建
✓ MySQL数据库的基本配置与连接
✓ LangChain核心组件的使用(SQLDatabase、LLM、Chains)
✓自然语言到SQL的转换原理
✓实际开发中的调试技巧和最佳实践

这个基础框架可以进一步扩展为:
-企业级数据分析助手
-客户服务聊天机器人
-自动化报表生成系统

完整项目代码已托管在GitHub:项目链接(示例链接))

下一步建议学习LangChain的Memory模块来实现多轮对话功能。

原创 高质量