langchain agent按需使用Skill

一.背景

        LangChain Agent 按需使用 Skill(技能),是指智能代理根据任务场景的具体需求,动态选择、调用并组合所需的技能模块(如数据查询、逻辑推理、工具调用、自然语言生成等),而非一次性加载所有技能。这一模式的诞生,根植于大语言模型应用从 “通用能力展示” 走向 “精细化场景落地” 的核心诉求,是技术层面的能力治理、资源层面的效率优化与业务层面的场景适配共同作用的结果。以下从技术背景业务场景背景工程实践背景三个维度,梳理其核心逻辑。

1.技术背景:Skill 体系的发展与 Agent 能力的边界挑战

        LangChain Agent 的核心竞争力在于 “将 LLM 的认知能力与外部工具 / 技能结合,解决复杂任务”,而技能体系的演进与 Agent 固有能力的局限,直接驱动了 “按需使用 Skill” 模式的产生。

1. Skill 从 “单一工具” 到 “模块化体系” 的演进

        早期的 LangChain Agent 仅能调用少量单一工具(如搜索引擎、计算器),这些工具可视为最基础的 “技能单元”。随着 LangChain 生态的完善,Skill 的内涵不断扩展,形成了分层的模块化体系:

  • 基础技能:如文本解析、数据
<think> 我们正在讨论如何为LangChain Agent提供提示词(prompt)。根据之前的对话历史和引用内容,特别是引用[1]和引用[4],我们可以总结出以下关键点: 1. **使用提示模板(PromptTemplate)**:通过`PromptTemplate`类创建模板,其中包含占位符,如`{input}`(用户输入)、`{agent_scratchpad}`(Agent的思考过程记录)和`{tools}`(可用工具列表)等。 2. **在创建Agent时注入提示模板**:使用`create_react_agent`(或类似函数)将模板与LLM和工具集合成。 3. **多Agent系统的提示设计**:引用[1]提到多Agent相互调用的场景,例如CEO→助理→执行者模式,每个Agent都有自己的提示词。 4. **提示词的结构**:通常包含指令、工具描述、行动格式要求和思考过程记录等。 现在,我们将详细说明如何为LangChain Agent提供提示词: ### 一、基本步骤 1. **导入必要的模块**: ```python from langchain_core.prompts import PromptTemplate from langchain.agents import create_react_agent, AgentExecutor ``` 2. **定义提示模板**: 创建一个字符串模板,包含必要的占位符和指令。例如,使用ReAct风格的模板: ```python template = """ 你是一个有用的助手。请使用以下工具解决问题: 工具列表: {tools} 使用以下格式: 问题:{input} 思考:{agent_scratchpad} 行动:{{"行动": "$TOOL_NAME", "行动输入": "$INPUT"}} 观察:{{$TOOL_OUTPUT}} (重复思考/行动/观察直到解决问题) 最终答案:{{"行动": "最终答案", "行动输入": "你的回答"}} 注意: - 工具调用必须使用JSON格式,且只能使用上面列出的工具。 - 如果不要工具即可回答问题,则直接使用最终答案。 """ ``` 3. **创建PromptTemplate对象**: ```python prompt = PromptTemplate.from_template(template) ``` 4. **创建Agent**: 将模板与LLM(语言模型)和工具(tools)结合: ```python agent = create_react_agent( llm=llm, # 已初始化的语言模型 tools=tools, # 工具列表,每个工具都有name和description prompt=prompt # 上一步创建的模板 ) ``` 5. **创建执行器并运行**: ```python agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) result = agent_executor.invoke({"input": "用户的问题"}) ``` ### 二、自定义工具描述的提示 在模板中,`{tools}`占位符会被自动替换为可用工具的描述。这些描述来自`tools`列表中每个工具的`description`属性。因此,为自定义工具设计提示词描述时,应确保每个工具的`description`清晰说明其功能和使用方法。例如: ```python tools = [ Tool( name="Search", func=search_tool, description="用于搜索最新信息。输入:搜索关键词。" ), Tool( name="Calculator", func=calculator_tool, description="用于数学计算。输入:数学表达式。" ) ] ``` ### 三、多Agent系统的提示设计 引用[1]中的多Agent示例(CEO→助理→执行者)表明,每个Agent都有自己的提示词。我们可以为每个Agent分别设计提示模板: ```python # CEO Agent的提示模板 ceo_template = """ 你作为CEO,负责制定计划。请根据以下任务制定详细计划: 任务:{input} 计划: """ ceo_prompt = PromptTemplate.from_template(ceo_template) ceo_agent = create_react_agent(llm, ceo_tools, ceo_prompt) # 助理Agent的提示模板 assistant_template = """ 你作为助理,负责执行CEO制定的计划。当前计划: {plan} 请执行: """ assistant_prompt = PromptTemplate.from_template(assistant_template) assistant_agent = create_react_agent(llm, assistant_tools, assistant_prompt) # 控制器函数 def multi_agent_controller(task): plan = ceo_agent_executor.invoke({"input": task})["output"] # ceo_agent_executor是ceo_agent的执行器 result = assistant_agent_executor.invoke({"input": plan})["output"] return result ``` ### 四、提示词最佳实践 1. **明确格式要求**:在模板中清晰地指定行动输出的格式(如JSON),并给出示例。 2. **分阶段引导思考**:引导Agent进行思考(Reason)、行动(Act)和观察(Observation)的循环。 3. **工具描述清晰**:每个工具的描述应准确且简洁,便于Agent理解何时使用该工具。 4. **加入示例**:在复杂任务中,可以在模板中加入一两个示例,帮助模型理解要求。 ### 五、完整示例 以下是一个完整的单Agent示例: ```python from langchain_openai import ChatOpenAI from langchain.agents import create_react_agent, AgentExecutor, Tool from langchain_core.prompts import PromptTemplate # 初始化LLM llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) # 定义工具(假设有两个工具) def search(query: str) -> str: # 模拟搜索工具 return "42" def calculator(expression: str) -> str: # 模拟计算器 return str(eval(expression)) tools = [ Tool( name="Search", func=search, description="用于回答事实性问题。输入:问题关键词。" ), Tool( name="Calculator", func=calculator, description="用于数学计算。输入:数学表达式。" ) ] # 定义提示模板 template = """ 请使用以下工具解决问题: 工具: {tools} 使用格式: 问题:{input} 思考:{agent_scratchpad} 行动:{{"行动": "工具名", "行动输入": "输入参数"}} 观察:工具返回结果 ...(重复直到问题解决) 最终答案:{{"行动": "最终答案", "行动输入": "答案内容"}} 注意: - 行动必须使用JSON格式,且只能使用上述工具或最终答案。 - 如果不要工具,直接使用最终答案。 """ prompt = PromptTemplate.from_template(template) # 创建Agent agent = create_react_agent(llm, tools, prompt) # 创建执行器 agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) # 执行 result = agent_executor.invoke({"input": "2的38次方是多少?"}) print(result) ``` ### 六、注意事项 - **占位符自动填充**:`{agent_scratchpad}`在运行过程中由Agent自动填充,包含之前的思考和行动历史。 - **工具描述注入**:`{tools}`占位符会被替换为每个工具的名称和描述。 - **多轮对话**:如果要处理多轮对话,可以在模板中加入`{chat_history}`占位符,并在调用时传入对话历史。 通过以上步骤,可以有效地为LangChain Agent提供提示词,引导其使用工具解决问题。 §§相关问题§§ 1. 如何优化LangChain Agent的提示词效果? 2. 不同Agent类型(如ReAct/Self-ask)的提示词有何区别? 3. 如何为自定义工具设计有效的提示词描述? 4. 提示词中的`agent_scratchpad`具体记录哪些信息? 5. 在多轮对话场景下如何设计提示词? </think>### 如何为 LangChain Agent 提供提示词 在 LangChain 中为 Agent 提供提示词的核心方法是通过**结构化提示模板**实现,以下是详细步骤和最佳实践(基于引用[1][4]): #### 一、核心方法 1. **创建提示模板** 使用 `PromptTemplate` 定义包含占位符的模板: ```python from langchain_core.prompts import PromptTemplate template = """ SYSTEM: 你是一个专业助理,请使用工具解决问题。 可用工具: {tools} 指令: 1. 严格使用JSON格式响应:{{"行动": "$TOOL_NAME", "行动输入": "$INPUT"}} 2. 工具选项:{tool_names} 或 "最终答案" 3. 响应流程: 问题:{input} 思考:{agent_scratchpad} 行动:```json$JSON_BLOB``` """ prompt = PromptTemplate.from_template(template) ``` 2. **集成工具描述** 创建 Agent 时自动注入工具信息: ```python from langchain.agents import create_react_agent agent = create_react_agent( llm, # 语言模型实例 tools, # 预定义工具列表 prompt # 上一步的模板 ) ``` - `{tools}` 自动替换为工具描述(名称+功能) - `{tool_names}` 自动替换为工具名称列表 3. **关键占位符说明** - `{input}`:用户当前查询(动态注入) - `{agent_scratchpad}`:Agent 的思考过程(自动记录推理步骤) - `{chat_history}`:多轮对话历史(可选) #### 二、高级用法(引用[1]) 1. **多 Agent 协作提示** 不同 Agent 使用专属提示模板分工协作: ```python # CEO Agent 提示模板 ceo_template = "作为CEO,请规划任务:{task},输出分步计划" ceo_prompt = PromptTemplate.from_template(ceo_template) # 执行 Agent 提示模板 executor_template = "作为执行者,请完成:{step},使用工具:{tools}" executor_prompt = PromptTemplate.from_template(executor_template) ``` 2. **动态提示链** Agent 间传递带上下文的提示: ```python def multi_agent_controller(task): plan = ceo_agent.run(ceo_prompt.format(task=task)) return executor_agent.run(executor_prompt.format(step=plan, tools=tools)) ``` #### 三、最佳实践 1. **格式约束** ```text 强制JSON格式:{{"行动": "工具名", "行动输入": {{"参数": "值"}}}} 错误示例会被系统自动纠正[^1] ``` 2. **工具描述规范** ```python Tool( name="weather", description="查询天气,输入格式:{'city': 城市名}" # 明确输入结构 ) ``` 3. **思考过程引导** ```text 思考步骤: 1. 分析问题核心求 2. 匹配可用工具能力 3. 检查参数完整性 4. 预测可能结果 ``` #### 四、完整示例 ```python from langchain.agents import AgentExecutor # 创建执行器 agent_executor = AgentExecutor( agent=create_react_agent(llm, tools, prompt), tools=tools, verbose=True ) # 执行查询 result = agent_executor.invoke({ "input": "计算2的38次方并转换为十六进制", "chat_history": [] # 可传入历史对话 }) ``` > **输出流程示例**: > ``` > 思考:先计算2^38 → 使用Calculator工具 > 行动:```json{"行动": "Calculator", "行动输入": "2**38"}``` > 观察:274877906944 > 思考:转换为十六进制 → 使用Converter工具 > 行动:```json{"行动": "Converter", "行动输入": {"value":274877906944, "format":"hex"}}``` > ``` #### 五、调试技巧 1. 开启 `verbose=True` 查看提示词渲染结果 2. 使用 `prompt.partial(tools=...)` 预填充静态内容 3. 通过 `output_parser` 自定义响应解析逻辑 > 官方提示模板文档:[LangChain Prompt Templates](https://api.python.langchain.com/en/latest/core_api_reference.html#module-langchain_core.prompts)[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路边草随风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值