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

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"}]}

请问我的操作哪里有误?


问题根源与修正方案

  1. 消息序列逻辑缺失
    Llama3.1遵循标准工具调用规范,工具返回的内容需要和助手发起的工具调用请求形成关联,完整的逻辑链必须是:用户提问→助手发起工具调用→工具返回结果→助手基于结果回答。你当前的消息序列缺少「助手发起工具调用」的关键环节,模型无法识别工具返回内容与原始问题的对应关系。

  2. 正确的请求格式示例
    需补充助手发起工具调用的消息(包含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."}
      ]
    }
    
  3. 额外注意要点

    • 确认使用的Llama3.1版本支持工具调用,优先选择官方原版llama3.1:8b-instruct,部分量化精简版本可能阉割了该功能;
    • 工具返回消息的role必须严格设为tool,且tool_call_id要和助手调用消息中的id完全匹配;
    • 最后追加明确提示,要求模型基于工具结果回答,避免触发模型内置的安全过滤话术。

内容的提问来源于stack exchange,提问作者Michaela.Merz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:50:06