
【Ollama+langchain+mysql】langchain调用本地部署的ollama大模型,连接mysql进行查询
Prompt Engineering 通过控制整个交互流程的prompt,实现sql语句的自动执行。在实际使用中,发现本代码存在一些生成SQL语句但是不执行的问题。Agent + Chain 的方式,手动控制每一个chain,来完成指定sql的运行。
·
【Ollama+langchain+mysql】langchain调用本地部署的ollama大模型,连接mysql进行查询
本文章省去ollama以及mysql本地部署的步骤
导言
在实际使用中,发现本代码存在一些生成SQL语句但是不执行的问题。这可以根据以下思路来解决:
-
Prompt Engineering 通过控制整个交互流程的prompt,实现sql语句的自动执行
-
Agent + Chain 的方式,手动控制每一个chain,来完成指定sql的运行
代码
from langchain.utilities import SQLDatabase
from langchain_ollama import ChatOllama
from langchain.agents import create_sql_agent
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.agents.agent_types import AgentType
# 配置数据库连接信息
db_user = ""
db_password = ""
db_host = ""
db_name = ""
# 创建数据库连接
db = SQLDatabase.from_uri(f"mysql+pymysql://{db_user}:{db_password}@{db_host}/{db_name}")
# 创建工具包
toolkit = SQLDatabaseToolkit(db=db, llm=ChatOllama(model="qwen2.5:14b"))
# 创建SQL代理,设置为处理自然语言查询
agent_executor = create_sql_agent(
llm=ChatOllama(model="qwen2.5:14b"),
toolkit=toolkit,
verbose=True,
handle_parsing_errors=True,
agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION
)
# 开始问答循环
while True:
# 用户输入查询
query = input("请输入您的查询(输入'exit'退出):")
# 检查退出条件
if query.lower() == 'exit':
print("谢谢使用,再见!")
break
try:
# 让代理生成SQL查询
sql_query = agent_executor.run(f"生成SQL查询以{query},但不要执行它")
# 提取SQL语句(假设输出格式为 ```sql ... ```)
if '```sql' in sql_query:
start = sql_query.find('```sql') + len('```sql')
end = sql_query.find('```', start)
sql_statement = sql_query[start:end].strip()
# 直接执行提取的SQL查询
result = db.run(sql_statement)
print("查询结果:", result)
else:
print("未能从LLM输出中提取有效的SQL语句。")
except Exception as e:
print(f"发生错误: {e}")
if 'Could not parse LLM output' in str(e):
print("提示:模型输出无法解析,请尝试更明确的查询语句。")
运行效果
提问:
回答:
更多推荐
所有评论(0)