LangChain实战 | 通过LangChain中的ReAct框架实现自动定价

推理与行动的协同

通过一个具体的业务场景,使用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可以根据实时的天气和交通状况自动调整产品价格.

人类解决这个问题的一般过程是:

首先看看这个事该怎么办(思考),其次通过搜索引擎查阅网络上今天鲜花的成本价(行动),据此我可预估鲜花的进货价格,然后根据这个价格的高低(观察)来确定要加价多少(思考),最后得出售价(行动)。

人类为鲜花定价的过程如图所示:

img

这就是我们人类在接到一个新任务时做出决策并完成下一步行动的过程。

在这个简单的例子中,人类首先思考或者观察后再思考,然后采取行动

这里的观察和思考被统称为**“推理”(Reasoning)过程,而“推理”指导人们的“行动”(Acting)**。

在Agent开发中,这个动态决策能力可以由 ReAct 来实现

2. ReAct框架是什么

ReAct框架在2022年论文中被引入《ReAct: Synergizing Reasoning and Acting in Language Models》。

它是生成式 AI 应用中广泛使用的提示策略之一。

ReAct 框架的灵感来自“推理”和“行动”之间的协同作用。这种协同作用使得我们能够学习新任务并做出决策。而在大模型应用中,尤其是与 Agent 相关的应用开发中,我们通过提示工程向大模型植入这个思维框架,明确地告诉它们,要循序渐进地、交错地生成推理轨迹和采取行动,将推理和行动融入解决问题的过程中。

img

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 搜索、维基百科)进行交互,以将额外信息合并到推理中。

这个和外部环境交的过程其实就是我们见过多次的调用并执行工具的行动过程。上面所说的本地知识库或搜索引擎都不是封装在大模型内部的知识,我们把它们称为“外部工具”,见图。

img

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 那里收到最终答案。

img图:执行流程

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 运行日志

img

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"

完整过程:

img

在智能体执行完成后,官网控制台就能看到hello-agent这个项目的执行过程:

左边是当前智能体的所有执行环节,右边是对应环节的输入和输出

img

如何零基础入门 / 学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

read-normal-img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

<think>好的,我现在需要回答用户关于ReAct架构和LangChain库的介绍及使用方法的问题。首先,我得先确认自己对这两个概念的理解是否准确。 ReAct架构,根据用户提供的引用,是一种结合推理(Reasoning)和行动(Action)的方法。它允许模型在处理问题时生成推理过程,同时执行外部操作,比如查询知识库或访问环境信息。这样的设计提高了模型处理复杂问题的能力,并且增强了可解释性和可靠性。我需要进一步确认ReAct的具体工作流程,比如它是如何交替进行推理和行动的,以及实际应用中的例子。 然后是LangChain库。根据引用,LangChain是一个用于构建基于大型语言模型(LLM)应用的框架,支持链式调用和多种工具集成。用户提到的索引(Indexes)部分说明LangChain可以帮助管理外部数据,比如文档加载和向量存储。此外,用户提供的示例中有一个使用LangChain构建ReAct Agent的项目,这个Agent可以查询Wikipedia。我需要详细说明LangChain的核心模块,如模型、索引、链式结构等,以及如何用代码示例展示其使用方法。 接下来要组织回答的结构。首先介绍ReAct架构,包括其原理和优势,然后介绍LangChain库的核心功能,接着结合两者说明如何在LangChain实现ReAct Agent,最后给出相关问题和引用来源。 需要确保回答符合用户的要求:使用中文,行内公式用$...$,独立公式用$$...$$,正确引用来源。同时要生成相关问题,并检查引用标记是否准确添加在相关段落末尾。 可能需要注意的点: 1. ReAct的工作流程是否需要分步骤说明? 2. LangChain的各个模块是否需要更详细的解释? 3. 代码示例是否足够清晰,用户能否根据示例理解实现方法? 4. 引用的位置是否正确,是否每个引用都对应正确的来源? 在撰写过程中,要确保技术术语准确,语言通顺,结构清晰。最后生成的相关问题需要围绕ReActLangChain的应用、原理、优化等方面展开,帮助用户深入理解。</think>### ReAct架构与LangChain库介绍及使用方法 #### 一、ReAct架构:推理与行动的结合 ReAct(Reasoning + Acting)是一种结合**推理过程**和**外部行动**的交互式方法。其核心思想是让模型在处理问题时,动态生成推理步骤并执行相关操作(如查询数据库、调用API等),从而提升复杂任务的可解释性和可靠性[^1]。 **工作原理**: 1. **推理(Reasoning)**:模型分析问题并规划解决路径(例如:“需要查询用户的历史订单信息”); 2. **行动(Action)**:根据推理结果执行具体操作(例如:调用数据库接口`get_user_orders(user_id)`); 3. **观察(Observation)**:获取外部系统的返回结果; 4. **循环迭代**:重复上述步骤直至解决问题。 例如,在数学问题中,模型可能先推导公式,再调用计算工具验证结果: $$ \text{推理} \rightarrow \text{执行计算} \rightarrow \text{验证答案} $$ #### 二、LangChain库:LLM应用开发框架 LangChain是一个为构建**基于大型语言模型(LLM)应用**设计的开源框架,支持链式调用、工具集成及数据索引管理[^2][^4]。 **核心模块**: 1. **模型(Models)**:封装多种LLM(如GPT-3、Claude)的调用接口; 2. **索引(Indexes)**:管理外部数据源,支持文档加载(如PDF、网页)和向量数据库存储; 3. **链(Chains)**:将多个操作串联为工作流,例如: `数据查询 → 结果分析 → 生成报告`; 4. **代理(Agents)**:实现ReAct模式,动态选择工具执行任务。 #### 三、LangChain实现ReAct Agent示例 以下代码演示如何用LangChain构建一个查询Wikipedia的ReAct Agent[^3]: ```python from langchain.agents import load_tools from langchain.agents import initialize_agent from langchain.llms import OpenAI # 初始化模型和工具 llm = OpenAI(temperature=0) tools = load_tools(["wikipedia"], llm=llm) # 创建ReAct Agent agent = initialize_agent( tools, llm, agent="react-docstore", verbose=True ) # 执行查询 result = agent.run("爱因斯坦在1905年发表了哪些重要论文?") print(result) ``` **代码解析**: 1. 通过`load_tools`加载Wikipedia查询工具; 2. 使用`initialize_agent`指定ReAct模式(`react-docstore`); 3. Agent自动分解问题为推理步骤并执行查询。 #### 四、典型应用场景 1. **复杂问答系统**:结合知识库检索与推理生成答案; 2. **数据分析**:调用Python计算库处理数学公式,如解方程$ax^2 + bx + c = 0$; 3. **自动化流程**:跨系统集成(邮件发送+数据库更新)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值