两种方式介绍
使用的大模型是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...