如何为LangChain Agent定义支持多输入的自定义模型评分工具?
LangChain多输入工具优化方案
不用再靠逗号分隔字符串传递多参数,LangChain支持通过Pydantic模型定义工具的多输入参数,这种方式更规范、容错性更强,还能让LLM自动识别并传递正确的参数。
实现步骤
- 定义Pydantic参数模型,明确工具需要的输入字段
- 基于该模型重新定义工具
- 调整
llm_model_score函数,直接接收拆分后的参数
修改后的完整代码示例
from langchain.agents import AgentExecutor, create_structured_chat_agent from langchain.tools import Tool from langchain.pydantic_v1 import BaseModel, Field from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI # 1. 定义Pydantic参数模型,明确两个输入字段 class ScoreToolInput(BaseModel): test_data_path: str = Field(description="测试数据集的文件路径") model_path: str = Field(description="预训练模型的文件路径") # 2. 调整评分函数,直接接收拆分后的参数 def llm_model_score(test_data_path: str, model_path: str) -> str: # 这里替换成你的实际准确率计算逻辑 accuracy = 0.92 # 模拟计算结果 return f"模型在测试集上的准确率为:{accuracy:.2%}" # 3. 基于Pydantic模型定义多输入工具 score_tool = Tool.from_function( func=llm_model_score, name="model_score_calculator", description="计算预训练模型在指定测试集上的准确率,需要传入测试数据路径和模型路径两个参数", args_schema=ScoreToolInput # 绑定参数模型 ) # 初始化LLM和Agent llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo") prompt = ChatPromptTemplate.from_messages([ ("system", "你是专业的模型评估助手,使用提供的工具完成任务"), ("user", "{input}"), ("assistant", "{agent_scratchpad}") ]) tools = [score_tool] agent = create_structured_chat_agent(llm, tools, prompt) agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) # 测试调用 result = agent_executor.invoke({ "input": "帮我计算/data/test_set.json路径下的测试集,对/models/bert_base模型的准确率" }) print(result["output"])
优势说明
- 避免了路径含逗号导致的解析错误问题
- 参数定义清晰,LLM能更准确地理解需要传递的输入
- 代码可读性和可维护性更强,后续新增参数也更方便
内容的提问来源于stack exchange,提问作者user3476463
相关产品推荐
相关产品推荐

