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

求助:如何实现meta-llama/Llama-3.2-1B-Instruct的工具调用?

Llama-3.2-1B-Instruct 工具调用实现建议
  • 直接用Hugging Face Transformers原生API实现
    别依赖LangChain了,直接上手Transformers库的核心组件。关键是严格遵循Llama-3.2官方定义的工具调用格式构造提示,明确工具的名称、参数结构,强制模型返回指定格式的工具调用指令。
    示例代码:

    from transformers import AutoTokenizer, AutoModelForCausalLM
    import torch
    import re
    
    model_name = "meta-llama/Llama-3.2-1B-Instruct"
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForCausalLM.from_pretrained(
        model_name,
        torch_dtype=torch.bfloat16,
        device_map="auto"
    )
    
    # 严格对齐Llama-3.2的工具调用提示模板
    system_prompt = """你是能使用工具的助手,可用工具如下:
    [
      {
        "name": "get_weather",
        "description": "获取指定城市的实时天气",
        "parameters": {
          "type": "object",
          "properties": {
            "city": {
              "type": "string",
              "description": "要查询的城市名称"
            }
          },
          "required": ["city"]
        }
      }
    ]
    
    规则:
    1. 需要用工具时,必须返回格式:<|tool_call|>[{"name":"工具名","parameters":{"参数名":"参数值"}}]<|tool_call|>
    2. 不需要工具时直接回答问题"""
    
    user_query = "上海今天气温多少?"
    # 拼接符合模型要求的对话格式
    prompt = (
        "<|begin_of_solution|><|start_header_id|>system<|end_header_id|>\n"
        f"{system_prompt}<|eot_id|><|start_header_id|>user<|end_header_id|>\n"
        f"{user_query}<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n"
    )
    
    inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
    outputs = model.generate(
        **inputs,
        max_new_tokens=200,
        temperature=0.1,
        do_sample=False
    )
    response = tokenizer.decode(outputs[0], skip_special_tokens=False)
    
    # 提取工具调用指令
    tool_call = re.search(r'<\|tool_call\|>(.*?)<\|tool_call\|>', response, re.DOTALL)
    if tool_call:
        print("工具调用:", tool_call.group(1))
    else:
        print("直接回答:", response.split("<|end_header_id|>\n")[-1].strip())
    
  • 精准优化提示词
    小模型对提示词细节要求更高,别写模糊表述:

    • 明确告知模型必须按指定格式返回工具调用,否则回答无效
    • 工具的描述和参数要简洁结构化,避免冗余信息
    • 可以在提示词里加入1个工具调用示例,强化模型的格式记忆
  • 检查模型的特殊token配置
    确认tokenizer包含<|tool_call|>等Llama-3.2工具调用专用的特殊token,如果缺失,需要手动添加后重新保存tokenizer再加载。

  • 用量化减少资源占用
    哪怕是1B参数的模型,资源不足也会导致生成不稳定。用bitsandbytes做4bit或8bit量化,保证模型运行流畅,避免因资源限制导致格式输出错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:50:04