基于Ollama Mistral构建Text to SQL应用:SQL Agent报错修复求助
修正后的Ollama+Mistral Text to SQL Agent实现代码
核心问题说明
报错「缺失tool_names、tools变量」是因为SQL Agent初始化时必须明确指定可用的数据库操作工具及对应名称,同时要确保本地模型能调用这些工具获取库表结构,避免生成错误SQL。
完整修正代码
from langchain.llms import Ollama from langchain.agents import create_sql_agent from langchain.agents.agent_toolkits import SQLDatabaseToolkit from langchain.sql_database import SQLDatabase from langchain.agents.agent_types import AgentType # 1. 连接目标数据库(示例为SQLite,替换为你的数据库连接字符串) db = SQLDatabase.from_uri("sqlite:///your_database.db") # 2. 初始化Ollama本地Mistral模型 llm = Ollama(model="mistral") # 3. 创建SQL工具包,包含表结构查询、SQL执行等核心工具 toolkit = SQLDatabaseToolkit(db=db, llm=llm) # 4. 初始化SQL Agent,补全必填的tools和tool_names参数 agent = create_sql_agent( llm=llm, toolkit=toolkit, agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True, tools=toolkit.get_tools(), tool_names=[tool.name for tool in toolkit.get_tools()] ) # 5. 测试Agent功能 response = agent.run("查询用户表中所有年龄大于30的用户姓名") print(response)
关键修正点
- 补全tools和tool_names参数:从SQL工具包中自动提取可用工具及名称,解决缺失变量的报错。
- 绑定数据库与模型:让工具包同时关联数据库和Mistral模型,Agent可实时获取库表结构,避免生成不存在的表或逻辑错误的SQL。
- 指定适配的Agent类型:使用
ZERO_SHOT_REACT_DESCRIPTION类型,适配本地模型的推理逻辑,提升SQL生成准确性。
额外优化建议
- 可在prompt中预先加入数据库表结构、字段注释等信息,进一步降低错误SQL的生成概率。
- 确认Ollama已正确拉取Mistral模型(执行
ollama pull mistral命令验证),以及数据库连接字符串格式正确。
内容的提问来源于stack exchange,提问作者Abhra Sarkar
相关产品推荐
相关产品推荐

