1. LangChain提示模板核心变量解析
在LangChain的提示模板设计中,{tool_names}和{agent_scratchpad}是两个关键的系统级变量。它们分别承担着工具管理和思维过程记录的重要功能。我最初接触这两个变量时,发现官方文档的解释比较抽象,直到在实际项目中踩过几次坑后才真正理解它们的运作机制。
{tool_names}本质上是一个动态占位符,会在运行时被替换为当前agent可用的工具名称列表。比如当你的agent配置了GoogleSearch和Calculator工具时,{tool_names}就会被渲染成"GoogleSearch, Calculator"。这个设计巧妙之处在于它实现了工具与提示语的解耦——你不需要在模板里硬编码工具名称,系统会根据实际加载的工具自动填充。
而{agent_scratchpad}则更像是一个思维记事本。在agent的思考过程中,所有中间步骤(包括工具调用、观察结果、思考过程)都会被自动记录到这个变量中。我注意到很多新手会忽略这个变量的重要性,其实它是实现多步推理的关键。当你的agent需要连续调用多个工具时,scratchpad会保留完整的上下文轨迹。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. {tool_names}的深度应用技巧
2.1 动态工具集成方案
在实际项目中,我发现{tool_names}最强大的特性是支持动态工具集。比如开发客服机器人时,我们可以根据用户权限级别动态加载不同的工具集:
python复制from langchain.agents import initialize_agent
# 基础工具集
base_tools = [get_weather_tool(), get_time_tool()]
# VIP专属工具
vip_tools = [stock_query_tool(), ticket_booking_tool()]
def get_agent(user_type):
tools = base_tools + (vip_tools if user_type == "vip" else [])
return initialize_agent(tools, llm, agent="chat-conversational-react-descripti
