绑定工具后Llama3.2在LangGraph中无法响应普通文本输入的解决方法
问题分析
绑定工具后Llama3.2对所有输入都触发工具调用,哪怕是无需工具的普通问候,这并非LangChain类的问题,而是模型对工具调用的触发逻辑缺少明确引导——默认绑定工具后,模型没有清晰的判断标准,导致误触发工具调用。
解决方案
1. 添加系统提示词明确工具调用边界
在调用模型前加入系统消息,明确告知模型仅在需要用工具解决问题时才调用,否则直接用自然语言回复:
from langchain_ollama import ChatOllama from langgraph.graph import MessagesState from langgraph.graph import StateGraph, START, END from langchain_core.messages import HumanMessage, SystemMessage def multiply(a: int, b: int) -> int: return a * b def tool_calling_llm(state: MessagesState): # 加入明确的系统引导提示 system_msg = SystemMessage(content="你是助手,仅当用户问题需要计算乘法时调用multiply工具,其他场景直接用自然语言回复。") messages = [system_msg] + state["messages"] return {"messages": [llm_with_tools.invoke(messages)]} llm = ChatOllama(model="llama3.2") llm_with_tools = llm.bind_tools([multiply]) builder = StateGraph(MessagesState) builder.add_node("tool_calling_llm", tool_calling_llm) builder.add_edge(START, "tool_calling_llm") builder.add_edge("tool_calling_llm", END) graph = builder.compile() messages = graph.invoke({"messages": HumanMessage(content="hello")}) print(messages)
2. 显式配置工具调用策略(可选)
在bind_tools时显式设置tool_choice="auto",强化模型自主判断逻辑:
llm_with_tools = llm.bind_tools([multiply], tool_choice="auto")
3. 完善LangGraph工具调用流程(进阶)
如果需要处理工具返回结果,可添加工具执行节点和条件分支:
- 新增工具执行节点,处理模型的工具调用请求
- 添加条件判断,决定模型是继续调用工具还是直接回复用户
这一步是完整工具链的优化,解决当前误触发问题前两步已足够。
原理说明
Llama3.2这类开源模型对工具调用的prompt依赖性比闭源模型更强,默认绑定工具后没有明确的触发规则,容易出现误调用。通过系统提示词明确边界,能让模型清晰判断何时调用工具、何时直接回复。
内容的提问来源于stack exchange,提问作者Neha
相关产品推荐
相关产品推荐

