如何为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
相关产品推荐
相关产品推荐

