Langgraph create_react_agent双LLM配置及SQL执行后中断方案咨询
双LLM架构下create_react_agent的中断与流程改造方案
核心思路
将流程拆分为两个独立阶段:
- 阶段1:用GPT-4 32K驱动ReAct Agent,完成SQL生成与执行,在SQL执行后立即中断Agent流程
- 阶段2:将SQL执行结果传入低成本LLM,生成面向用户的自然语言回复
Interrupt_after参数用法
interrupt_after是create_react_agent的参数,接收一个工具名称列表,指定Agent在执行完这些工具调用后立即停止后续思考流程。对于SQL场景,你需要找到SQL查询工具的具体名称(通常是sql_db_query,部分版本可能为query_sql_db),将其传入该参数即可实现SQL执行后的中断。
代码改造示例
def get_response(state: gr.State, user_input: str, history: list)->any: # 初始化双LLM实例 gpt4_32k = ChatOpenAI(model="gpt-4-32k", temperature=0) cheap_llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7) # 替换为你的低成本LLM # 用GPT-4 32K构建SQL工具集 toolkit = SQLDatabaseToolkit(db=DB, llm=gpt4_32k) tools = toolkit.get_tools() # 确认SQL查询工具的名称(可打印tools列表核对) sql_tool_name = next(tool.name for tool in tools if "query" in tool.name.lower()) system_message = SystemMessage(content=SQL_PREFIX) # 创建Agent时指定执行完SQL工具后中断 agent_executor = create_react_agent( llm=gpt4_32k, tools=tools, messages_modifier=system_message, interrupt_after=[sql_tool_name] ) sql_result = None # 流式执行Agent,捕获SQL执行结果 for s in agent_executor.stream( {"messages": [HumanMessage(content=user_input)]}, stream_mode="values" ): latest_msg = s["messages"][-1] # 判断是否为SQL执行后的结果消息 if isinstance(latest_msg, AIMessage) and not latest_msg.additional_kwargs.get("tool_calls"): sql_result = latest_msg.content break # 拿到结果后立即终止Agent流程 # 用低成本LLM生成用户可见的回复 if sql_result: reply_prompt = f"用户问题:{user_input}\nSQL查询结果:{sql_result}\n请用自然语言简洁回复用户,不要提及SQL相关内容。" user_reply = cheap_llm.invoke(reply_prompt).content else: user_reply = "抱歉,暂时无法获取查询结果,请稍后再试。" history.append((user_input, user_reply)) return ["", history]
关键注意事项
- 工具名称确认:不同版本的
SQLDatabaseToolkit可能生成不同名称的工具,建议先打印tools列表(print([tool.name for tool in tools]))确认SQL查询工具的准确名称。 - 错误处理:可添加对SQL执行失败场景的捕获(比如判断
sql_result是否包含错误信息),让低成本LLM生成对应的友好提示。 - Prompt优化:针对低成本LLM的回复Prompt可以根据业务需求调整,比如指定回复风格、字数限制等。
内容的提问来源于stack exchange,提问作者user25495141
相关产品推荐
相关产品推荐

