推理与行动的协同
通过一个具体的业务场景,使用ReAct的思路来创建一个智能体
-
\1. 业务需求
-
\2. ReAct框架是什么
-
\3. LangChain 中 ReAct Agent 的实现
-
- 3.1 大模型(LLM)
- 3.2 提示词(prompt)
- 3.3 外部工具(external tools)
- 3.4 Agent执行器(Agent executor)
-
\4. Agent的完整代码
-
- 4.1 运行环境Python 3.10.11, LangChain 0.3
- 4.2 代码
- 4.3 运行日志
-
\5. 使用LangSmith跟踪智能体的执行过程
-
参考
智能体是一种能够感知环境、做出决策并采取行动的系统。这些系统能够执行被动的任务,也能够主动寻找解决问题的方法,适应环境的变化,并在没有人类直接干预的情况下做出决策。
1. 业务需求
现在有一个生意很好的鲜花店
在运营花店的过程中,我们经常遇到天气变化导致鲜花售价变化的情况。那么,每天早上你会如何为当日的鲜花定价呢?
我们创建一个Agent,让Agent可以根据实时的天气和交通状况自动调整产品价格.
人类解决这个问题的一般过程是:
首先看看这个事该怎么办(思考),其次通过搜索引擎查阅网络上今天鲜花的成本价(行动),据此我可预估鲜花的进货价格,然后根据这个价格的高低(观察)来确定要加价多少(思考),最后得出售价(行动)。
人类为鲜花定价的过程如图所示:
这就是我们人类在接到一个新任务时做出决策并完成下一步行动的过程。
在这个简单的例子中,人类首先思考或者观察后再思考,然后采取行动。
这里的观察和思考被统称为**“推理”(Reasoning)过程,而“推理”指导人们的“行动”(Acting)**。
在Agent开发中,这个动态决策能力可以由 ReAct 来实现
2. ReAct框架是什么
ReAct框架在2022年论文中被引入《ReAct: Synergizing Reasoning and Acting in Language Models》。
它是生成式 AI 应用中广泛使用的提示策略之一。
ReAct 框架的灵感来自“推理”和“行动”之间的协同作用。这种协同作用使得我们能够学习新任务并做出决策。而在大模型应用中,尤其是与 Agent 相关的应用开发中,我们通过提示工程向大模型植入这个思维框架,明确地告诉它们,要循序渐进地、交错地生成推理轨迹和采取行动,将推理和行动融入解决问题的过程中。
3. LangChain 中 ReAct Agent 的实现
在 LangChain 中使用 Agent 时,我们只需要理解下面 4 个元素。
大模型(LLM) :
提供逻辑的引擎,负责生成预测和处理输入。
提示(prompt) :
负责指导模型,形成推理框架。(ReAct风格的提示词)
外部工具(external tools) :
包括数据清洗工具、搜索引擎、应用程序等。
Agent执行器(Agent executor) :
负责调用合适的外部工具,并管理整个流程。(通过create_react_agent生成的Agent)
根据用户的输入(接收任务),Agent会首先决定调用哪些工具,然后通过相应的工具给出答案。Agent不仅可以同时使用多种工具,而且可以将一个工具的输出数据作为另一个工具的输入数据。
3.1 大模型(LLM)
在整个流程中,大模型经常需要自主判断下一步的行动。如果不施加额外的引导,大模型则可能无法自主判断下一步的行动。
例如,任务是查询库存,如果库存不足,就搜索合适的商家并进货。完成这个任务需要考虑一系列的操作。
- 什么时候开始在本地数据库中进行检索?
- 如何确定检索本地数据库的步骤已经完成,可以开始进行下一步?
- 调用哪个外部搜索工具(例如:百度)?
- 外部搜索工具是否返回想要的内容?
- 如何确定外部信息的真实性并执行下一步?
通过对 ReAct 框架进行完美封装和实现,LangChain 可以赋予大模型极大的自主性。
应用 ReAct框架后,你的大模型将从一个仅仅可以借助自己内部知识进行对话聊天的机器人飞升为一个能使用工具的智能 Agent。
3.2 提示词(prompt)
提示词可能包含 Agent的性格(也就是给它分配角色,让它以特定方式进行响应)、任务的背景(用于提供更多任务类型的上下文)以及用于激发更好推理能力的提示策略 (如 ReAct 框架)。
尽你所能回答以下问题,你可以访问以下工具:
{tools}
请使用以下格式回答:
问题 : 你必须回答的输入问题
思考 : 你每次都应该思考接下来怎么做
行动 : 要采取的行动,应该是[tool_names}中的一个
行动输人 : 行动的输入
观察 : 行动的结果
......(这个思考 一 行动 一 行动输入 一 观察 过程可以重复N次)
思考 : 我现在知道最终答案了
最终答案 : 原始输入问题的最终答案
开始!
问题 : {input}
思考 : {agent_scratchpad}
在这个提示中,有三个占位符 {tool}、{input} 和 {agent_scratchpad}。这些将在发送到 LLM 之前被适当文本替换。
tool
- 代理可用的工具
input
- 原始问题(通常为用户提出的问题)
agent_scratchpad
- 存储之前的想法/行动/行动输入/观察 的历史记录(思考过程)
参考:https://smith.langchain.com/hub/hwchase17/react?organizationId=099ea035-86e1-4ed7-bc0c-fd43b7039d50
3.3 外部工具(external tools)
ReAct框架会提示大模型为任务生成推理轨迹和行动,这使得Agent能系统地执行动态推理以创建、维护和调整操作计划,同时还支持与外部环境(例如 Google 搜索、维基百科)进行交互,以将额外信息合并到推理中。
这个和外部环境交的过程其实就是我们见过多次的调用并执行工具的行动过程。上面所说的本地知识库或搜索引擎都不是封装在大模型内部的知识,我们把它们称为“外部工具”,见图。
LangChain内置完整工具列表见:https://python.langchain.com/docs/integrations/tools/
3.4 Agent执行器(Agent executor)
如何在我们的人工智能应用中执行需要多个步骤的复杂任务,一个答案是 Agent Executor
LangChain AgentExecutor 构建 Agent,对于入门来说是不错的选择,但当我们需要更多的灵活性和控制,需要创建更高级的 Agent,我们可以使用 LangGraph Agent
Agent Executor负责协调Agent 的执行。它调用Agent ,执行Agent返回的操作,然后再次调用Agent ,将执行操作的结果传递给Agent 。这个过程一直持续到从Agent 那里收到最终答案。
图:执行流程
4. Agent的完整代码
4.1 运行环境 Python 3.10.11, LangChain 0.3
4.2 代码
准备环境变量:
import os
# OpenAI 环境变量
os.environ['OpenAI_API_KEY'] = 'hk-iwtb1e427'
# 搜索工具环境变量
os.environ['SERPAPI_API_KEY'] = '66bebeb6a334'
# LangSmith 环境变量 (可选) ,如果需要使用 LangSmith 功能,请在环境变量中设置以下变量
os.environ['LANGCHAIN_TRACING_V2'] = "true"
os.environ['LANGCHAIN_ENDPOINT'] = "https://api.smith.langchain.com"
os.environ['LANGCHAIN_API_KEY'] = "lsv2_pt1c9e"
os.environ['LANGCHAIN_PROJECT'] = "hello-agent"
初始化大模型:
# 初始化大模型
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-4o-mini",
temperature=1,
base_url="https://api.openai-hk.com/v1"
)
设置工具:
# 设置工具
from langchain_core.tools import tool
# 自定义计算器工具,用于计算鲜花的价格
@tool
def calculator(expression: str) -> str:
"""使用 Python 的 numexpr 库计算数学表达式
表达式应该是一个单行的数学表达式
例如:
"352 * 493" 表示 "352 乘以 493"
"""
import numexpr
import math # 确保导入 math 库
local_dict = {"pi": math.pi, "e": math.e}
result = str(
numexpr.evaluate(
expression.strip(),
global_dict={}, # 限制访问全局变量
local_dict=local_dict, # 添加常用数学函数
)
)
print(f"The result of {expression} is {result}")
return result # 确保返回结果为字符串
from langchain_community.agent_toolkits.load_tools import load_tools
tools = [calculator]
loaded_tools = load_tools(["serpapi"], llm=llm)
tools += loaded_tools
设置提示词模板:
# 设置提示模板
from langchain.prompts import PromptTemplate
template = '''
尽你所能用中文回答以下问题。如果能力不够你可以使用以下工具:
{tools}
Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
Begin!
Question: {input}
Thought:{agent_scratchpad}
'''
prompt = PromptTemplate.from_template(template)
# from langsmith import Client
#
# client = Client()
# prompt = client.pull_prompt("hwchase17/react")
print("提示词:")
print(prompt)
使用create_react_agent初始化Agent:
# 初始化Agent
from langchain.agents import create_react_agent
agent = create_react_agent(llm, tools, prompt)
# 构建AgentExecutor
from langchain.agents import AgentExecutor
agent_executor = AgentExecutor(agent=agent, tools=tools, handle_parsing_errors=False, verbose=True)
执行Agent:
# 执行AgentExecutor
agent_executor.invoke({"input":
"""今天市场上玫瑰花的一般进货价格是多少?
如果我在此基础上加价5%,应该如何定价?"""})
4.3 运行日志
5. 使用LangSmith跟踪智能体的执行过程
LangSmith 是一个用于构建生产级LLM应用的平台。
它让您调试、测试、评估和监控基于任何LLM框架构建的链和智能代理,并与 LangChain 无缝集成
非常简单就可以开启 langsmith 日志记录
1.在官网注册,smith.langchain.com
2.新建Tracing projects
3.配置环境变量
os.environ['LANGCHAIN_TRACING_V2'] ="true"
os.environ['LANGCHAIN_ENDPOINT'] ="https://api.smith.langchain.com"
os.environ['LANGCHAIN_API_KEY'] ="你自己的KEY"
os.environ['LANGCHAIN_PROJECT'] ="hello-agent"
完整过程:
在智能体执行完成后,官网控制台就能看到hello-agent这个项目的执行过程:
左边是当前智能体的所有执行环节,右边是对应环节的输入和输出
如何零基础入门 / 学习AI大模型?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?
”“谁的饭碗又将不保了?
”等问题热议不断。
不如成为「掌握AI工具的技术人」
,毕竟AI时代,谁先尝试,谁就能占得先机!
想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高
那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
】
👉 福利来袭
优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈
全套AGI大模型学习大纲+路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉 福利来袭
优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈
这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
】
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。