LangChain 核心理念
- 代理(Agent)与链(Chain)的差异:
- 链:操作硬编码在代码中。
- 代理:使用语言模型动态决定操作序列。
Agent 的关键组件
-
代理(Agent):
- 由语言模型和提示(prompt)驱动。
- 提示包含性格、背景和推理策略。
- LangChain提供多种类型的代理。
-
工具(Tools):
- 代理调用的函数。
- 关键在于提供正确的工具和正确描述工具。
-
工具包(Toolkits):
- 完成特定目标的一组相关工具。
- 例如:Office365工具包。
-
代理执行器(AgentExecutor):
- 代理的运行环境。
- 负责调用代理、执行操作、处理复杂情况和日志记录。
AgentExecutor 的运行机制
-
关键代码回顾:
llm = OpenAI(temperature=0) # 大语言模型 tools = load_tools(["serpapi", "llm-math"], llm=llm) # 工具-搜索和数学运算 agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) # 代理 agent.run("目前市场上玫瑰花的平均价格是多少?如果我在此基础上加价15%卖出,应该如何定价?") # 运行代理 -
深入AgentExecutor:
- 设置断点,使用“Step Into”功能深入
agent.py文件的AgentExecutor类内部方法_take_next_step。
- 设置断点,使用“Step Into”功能深入
-
第一轮思考:模型决定搜索:
Plan方法由Agent类的Plan方法完成。- 传递问题给
llm_chain,接收返回结果。
-
第二轮思考:模型决定计算:
- 根据搜索结果,模型决定使用计算器工具。
-
第三轮思考:模型完成任务:
- 模型判断任务完成,输出最终答案。
思考题
- 分析
AgentExecutor类中的_take_next_step方法,理解其如何实现Plan和工具调用。
延伸阅读
- 代码实现细节:
AgentExecutor类。LLMChain类。