You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整LangChain结构化聊天代理(对接SQL数据库)的输出格式

解决LangChain结构化聊天代理格式输出问题的方法

1. 优化Prompt的格式约束

直接在系统提示词中加入强约束格式说明,避免模糊描述,示例如下:

你必须严格遵循以下固定格式输出,任何情况都不能偏离:

Question: [用户的原始问题]
Thought: [你的思考逻辑,明确下一步操作理由]
Action: [调用的工具名称,例如sql_db_query]
Action Input: [工具的输入参数,例如完整SQL语句]
Observation: [工具返回的真实查询数据]
Thought: [基于观察结果的后续判断,确定是否继续查询或直接输出答案]
Final Answer: [给用户的最终回答内容]

同时在提示词末尾补充:若未遵守格式,将无法完成任务,必须重新输出。

2. 绑定结构化输出解析器

使用LangChain的StructuredOutputParser强制模型输出符合结构的内容,代码示例:

from langchain.output_parsers import StructuredOutputParser, ResponseSchema

# 定义输出结构规则
response_schemas = [
    ResponseSchema(name="Question", description="用户原始问题"),
    ResponseSchema(name="Thought", description="思考过程"),
    ResponseSchema(name="Action", description="调用的工具名称"),
    ResponseSchema(name="Action Input", description="工具输入参数"),
    ResponseSchema(name="Observation", description="工具返回的真实数据"),
    ResponseSchema(name="Final Answer", description="最终答案")
]

output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
format_instructions = output_parser.get_format_instructions()

# 将格式指令整合进系统提示词
system_prompt = f"""
你是SQL数据库查询助手,必须严格按照以下格式输出:
{format_instructions}
"""

将该解析器绑定到代理的Prompt中,确保模型输出被强制校验并解析为指定结构。

3. 恢复默认停止序列

不要将stop_sequence设为False,改用StructuredChatAgent的默认停止序列,确保代理在生成到Observation环节时停止,等待工具返回真实数据后继续执行:

from langchain.agents import StructuredChatAgent

agent = StructuredChatAgent.from_llm_and_tools(
    llm=llm,
    tools=tools,
    stop=StructuredChatAgent.default_stop,  # 恢复默认停止序列
    verbose=True
)

4. 调整模型输出长度限制

若出现内容截断,增大OpenAI模型的max_tokens参数,同时降低随机性提升格式遵守度:

from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI(
    model_name="gpt-3.5-turbo",
    max_tokens=1500,  # 提升token上限容纳完整格式内容
    temperature=0  # 降低随机性,强化格式执行
)

5. 使用SQLDatabaseToolKit默认代理模板

直接使用工具包自带的适配代理模板,避免自定义Prompt的格式冲突:

from langchain.agents import AgentExecutor
from langchain.sql_database import SQLDatabase
from langchain.agents.agent_toolkits import SQLDatabaseToolkit

db = SQLDatabase.from_uri("你的数据库URI")
toolkit = SQLDatabaseToolkit(db=db, llm=llm)
agent_executor = AgentExecutor.from_agent_and_tools(
    agent=toolkit.create_agent(),
    tools=toolkit.get_tools(),
    verbose=True,
    handle_parsing_errors=True  # 开启解析错误自动重试
)

该默认代理已内置格式约束,能更好配合SQL工具输出规范格式。


内容的提问来源于stack exchange,提问作者gibri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 08:05:21