小白学习langchain第二弹:连接mysql数据库实现对话的两种方式

两种方式介绍

使用的大模型是ollama本地启动的DeepsSeek-r1:8b模型,大模型可以根据连接数据库,根据你的问题,生成SQL语句,并通过langchain提供的工具包进行sql查询,并返回结果。

方式一 生成sql语句,之后查询给出结果

此种方式分为两个步骤,第一个chain根据问题得出具体的SQL语句,之后创建chain将查询语句、执行查询、问答模版、模型、输出模式解析,给出结果,这个方式每次就进行一次查询。

python 复制代码
# 创建模型与数据库的chain,负责将自然语言转为SQL
test_chain = create_sql_query_chain(model,db)

answer_prompt = PromptTemplate.from_template(
    """给定以下用户问题、SQL语句和SQL执行后的结果,回答用户问题。
    Question:{question}
    SQL Query:{query}
    SQL Result: {result}
    回答:"""
)
# 创建一个执行SQL语句的工具
execute_sql_tool = QuerySQLDataBaseTool(db=db)

# 生成sql,执行sql
chain = (RunnablePassthrough.assign(query=test_chain).assign(result=itemgetter('query')|execute_sql_tool)
         |answer_prompt|model|StrOutputParser())

resp = chain.invoke(input={'question':'请问:用户表有多少条数据'})

方式二 利用SQLDtabaseToolit连接数据库和模型,创建agent执行操作

agent方式可以进行多次查询和联表查询等复杂的查询,更推荐一些

python 复制代码
db = SQLDatabase.from_uri(MYSQL_URI)

toolkit = SQLDatabaseToolkit(db=db,llm=model)
tools = toolkit.get_tools()

system_prompt = """
您是一个被设计用来与SQL数据库交互的代理。
给定一个输入问题,创建一个语法正确的SQL语句并执行,然后查看查询结果并返回答案。
除非用户指定了他们想要获得的示例的具体数量,否则始终将SQL查询限制为最多10个结果。
你可以按相关列对结果进行排序,以返回MySQL数据库中最匹配的数据。
您可以使用与数据库交互的工具。在执行查询之前,你必须仔细检查。如果在执行查询时出现错误,请重写查询SQL并重试。
不要对数据库做任何DML语句(插入,更新,删除,删除等)。

首先,你应该查看数据库中的表,看看可以查询什么。
不要跳过这一步。
然后查询最相关的表的模式。
"""
system_message = SystemMessage(content=system_prompt)
# 创建代理,可以将工具、模型和系统信息关联,更直接方便
agent_executor = chat_agent_executor.create_tool_calling_executor(model,tools,system_message)

result = agent_executor.invoke({'messages':[HumanMessage(content='哪个部门下员工人数最多')]})

re1 = result['messages']
# 结果在最后一个索引地址
print(re1[len(re1) - 1])

本地搭建mysql容器

拉取mysql镜像,创建对应映射目录、创建配置、后台启动docker,在MAC下记得将docker启动哦!

shell 复制代码
#!/bin/bash

docker pull mysql:8.0.39
mkdir -p /Users/a/service/mysql/data
mkdir -p /Users/a/service/mysql/conf
mkdir -p /Users/a/service/mysql/logs


cat  << EOF >/Users/a/service/mysql/conf/my.cnf
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
default-time_zone = '+8:00'
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
EOF

docker run -p 3306:3306 --name mysql -v /Users/chenyijing/service/mysql/logs:/logs -v /Users/chenyijing/service/mysql/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.39

执行完上述脚本后,可以进行数据库连接和测试,我是在pycharm的右侧边栏database测试的。

遇到了的问题

ModuleNotFound MQYSQLdb但在pip install mysql-client的时候报错 Trying pkg-config --exists mysqlclient Command 'pkg-config --exists mysqlclient' returned non-zero exit status 1.

参考以下安装mysql和安装mysql的客户端包

shell 复制代码
brew install mysql
pip install mysqlclient

完整代码

放到github上了 github.com/fleurchen/l...

本次文章参考:【绝对是B站最全最细的LangChain大模型全套教程(AI学习路线Langchain+项目深度实战),七天就能从入门到就业!让你少走99%的弯路!】www.bilibili.com/video/BV1YN...

相关推荐
大模型教程1 小时前
14天速成LLM高手!大佬开源学习笔记,GitHub狂揽700星
程序员·llm·agent
AI大模型2 小时前
大模型相关术语和框架总结|LLM、MCP、Prompt、RAG、vLLM、Token、数据蒸馏
程序员·llm·agent
AI大模型2 小时前
OpenAI官方出品 : 从0到1构建AI Agent实战指南, 解锁智能自动化新范式
程序员·llm·agent
Baihai_IDP2 小时前
你说的 CUDA 到底是哪个 CUDA?一文理清那些让人混淆的术语和版本号
人工智能·面试·llm
Mintopia3 小时前
🎩 AIGC技术提升Web服务效率的量化分析:从成本到体验
人工智能·llm·ai编程
春天的菠菜3 小时前
【LangChain第2章】使用之Model I/O
langchain
idkmn_4 小时前
Agentic AI 基础概念
人工智能·python·深度学习·chatgpt·langchain
扫地的小何尚4 小时前
NVIDIA CUDA-Q QEC权威指南:实时解码、GPU解码器与AI推理增强
人工智能·深度学习·算法·llm·gpu·量子计算·nvidia
坐吃山猪5 小时前
ClaudeCode安装记录
llm·claude
阿正的梦工坊5 小时前
Search-R1:用强化学习训练LLM推理并利用搜索引擎
人工智能·机器学习·搜索引擎·llm