Ollama调用Llama3.1时工具返回结果被忽略的问题求助
问题:Ollama调用Llama3.1工具后无法利用返回结果解答原始问题?
我通过Ollama与Llama3.1模型交互,已成功触发工具调用并获取到工具返回的结果,但在请求模型基于该结果解答原始问题时遇到问题——模型完全忽略工具返回内容,始终给出“无法提供电话号码”这类通用话术。我尝试了两种请求格式:
第一种格式:
{"model":"llama3.1:8b","keep_alive":5,"messages":[{"role":"assistant","content":"Resolve question if possible. Do not invent any names. Answer question strictly as provided."},{"role" : "user", "content" : "What is Gregs phone number?"},{"role":"tool","content":"Gregs phone number is 1-305-881-9872"}]}
第二种格式:
{"model":"llama3.1:8bx","keep_alive":5,"messages":[{"role" : "user", "content" : "What is Gregs phone number?"},{"role":"tool","content":"Gregs phone number is 1-305-881-9872"}]}
请问我的操作哪里有误?
问题根源与修正方案
消息序列逻辑缺失
Llama3.1遵循标准工具调用规范,工具返回的内容需要和助手发起的工具调用请求形成关联,完整的逻辑链必须是:用户提问→助手发起工具调用→工具返回结果→助手基于结果回答。你当前的消息序列缺少「助手发起工具调用」的关键环节,模型无法识别工具返回内容与原始问题的对应关系。正确的请求格式示例
需补充助手发起工具调用的消息(包含tool_calls字段),同时工具返回消息要通过tool_call_id与之前的调用绑定:{ "model": "llama3.1:8b", "keep_alive": 5, "messages": [ {"role": "user", "content": "What is Gregs phone number?"}, {"role": "assistant", "content": "", "tool_calls": [{"id": "1", "function": {"name": "get_phone_number", "parameters": {"name": "Greg"}}}]}, {"role": "tool", "content": "Gregs phone number is 1-305-881-9872", "tool_call_id": "1"}, {"role": "user", "content": "Please answer my original question using the tool result."} ] }额外注意要点
- 确认使用的Llama3.1版本支持工具调用,优先选择官方原版
llama3.1:8b-instruct,部分量化精简版本可能阉割了该功能; - 工具返回消息的
role必须严格设为tool,且tool_call_id要和助手调用消息中的id完全匹配; - 最后追加明确提示,要求模型基于工具结果回答,避免触发模型内置的安全过滤话术。
- 确认使用的Llama3.1版本支持工具调用,优先选择官方原版
内容的提问来源于stack exchange,提问作者Michaela.Merz
相关产品推荐
相关产品推荐

