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

如何为HuggingFace Pipeline加载的Llama-3自定义LLM绑定工具?

问题与解决方案:为HuggingFace Pipeline加载的Llama-3绑定自定义工具

问题原因

HuggingFacePipeline类不存在bind_tools方法,该方法是LangChain中OpenAI系列模型专属的工具绑定接口,因此直接调用会触发AttributeError。

可行解决方法

针对本地通过HuggingFace Pipeline加载的Llama-3模型,可通过自定义Prompt引导+输出解析的方式实现工具绑定,具体步骤如下:

1. 修正代码拼写错误

原代码中model_config的tempreature为拼写错误,需改为temperature,避免模型配置异常。

2. 调整Prompt,明确工具调用规则

修改系统提示词,清晰告知模型可用工具的名称、功能及标准输出格式(要求输出包含tool_name和input字段的JSON):

prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            f"""
            你是任务助手,需根据用户需求判断是否调用工具。
            可用工具:
            - some_custom_tool:执行指定任务,输入为字符串,返回成功或失败信息。
            
            调用工具时必须严格按以下JSON格式输出:
            {{"tool_name": "some_custom_tool", "input": "输入内容"}}
            
            无需调用工具时,直接返回回答内容即可。
            """,
        ),
        ("user", "{input}"),
        MessagesPlaceholder(variable_name="agent_scratchpad"),
    ]
)

3. 重构Agent链,移除bind_tools调用

直接使用原HuggingFacePipeline实例,配合JsonOutputParser解析模型输出,处理工具调用逻辑:

# 移除原llm_with_tools = llm.bind_tools(tools)代码行

agent = (
    {
        "input": lambda x: x["input"],
        "agent_scratchpad": lambda x: format_to_openai_tool_messages(
            x["intermediate_steps"]
        ),
    }
    | prompt
    | llm
    | JsonOutputParser()
)

agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, return_intermediate_steps=True)

4. 格式稳定性优化(可选)

若模型输出JSON格式不稳定,可使用PydanticOutputParser强制输出符合指定结构:

from langchain.output_parsers import PydanticOutputParser
from pydantic import BaseModel, Field

class ToolCall(BaseModel):
    tool_name: str = Field(description="要调用的工具名称")
    input: str = Field(description="工具的输入参数")

parser = PydanticOutputParser(pydantic_object=ToolCall)

# 更新系统提示词,添加格式说明
prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            f"""
            你是任务助手,需根据用户需求判断是否调用工具。
            可用工具:
            - some_custom_tool:执行指定任务,输入为字符串,返回成功或失败信息。
            
            调用工具时必须按照以下格式输出:
            {parser.get_format_instructions()}
            
            无需调用工具时,直接返回回答内容即可。
            """,
        ),
        ("user", "{input}"),
        MessagesPlaceholder(variable_name="agent_scratchpad"),
    ]
)

# 更新Agent链中的解析器
agent = (
    {
        "input": lambda x: x["input"],
        "agent_scratchpad": lambda x: format_to_openai_tool_messages(
            x["intermediate_steps"]
        ),
    }
    | prompt
    | llm
    | parser
)

系统信息

langchain==0.2.6
langchain-community==0.2.6
langchain-core==0.2.11
langchain-openai==0.1.14
langchain-text-splitters==0.2.2
Python 3.10.13

运行环境:Kaggle GPU t4x2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:02:11