LangChain中的代理与ReAct框架 | 豆包MarsCode AI刷题

127 阅读3分钟

LangChain中的代理机制

代理机制是LangChain中的核心,它通过以下三个元素实现:

  • 大模型:作为逻辑引擎,生成预测和处理输入。
  • 外部工具:包括数据清洗工具、搜索引擎、应用程序等。
  • 代理:控制交互流程,调用适当的外部工具。

代理机制使得大模型能够检查信息真实性,调用外部工具搜索信息,并根据结果进行决策。

ReAct框架

ReAct框架是LangChain中的关键,由以下三个概念组成:

  1. Thought(思考):LLM模型生成的逻辑推理过程。
  2. Act(行动):LLM判断需要执行的具体行为。
  3. Obs(观察):LLM框架对外界输入的获取。

ReAct框架提示LLMs为任务生成推理轨迹和操作,支持与外部环境的交互,如Google搜索、Wikipedia,将额外信息合并到推理中。

代理实现ReAct框架的示例

以找到玫瑰市场价格并计算加价15%后的新价格为例。通过LangChain代理,我们可以自动形成思考与行动链条,并给出正确答案。

# 设置OpenAI和SERPAPI的API密钥
import os
os.environ["OPENAI_API_KEY"] = 'Your OpenAI API Key'
os.environ["SERPAPI_API_KEY"] = 'Your SerpAPI API Key'

# 加载所需的库
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI

# 初始化大模型
llm = OpenAI(temperature=0)

# 设置工具
tools = load_tools(["serpapi", "llm-math"], llm=llm)

# 初始化Agent
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

# 运行代理
agent.run("目前市场上玫瑰花的平均价格是多少?如果我在此基础上加价15%卖出,应该如何定价?")

代理的关键组件

代理系统包括:

  1. 代理(Agent):决定下一步操作的类。
  2. 工具(Tools):代理调用的函数。
  3. 工具包(Toolkits):一组用于完成特定目标的工具。
  4. 代理执行器(AgentExecutor):代理的运行环境。

结构化工具

结构化工具箱允许调用多个工具完成相关任务集合,如文件管理、Web浏览器操作等。

Playwright在LangChain中的应用

Playwright是一个自动化框架,模拟真实用户操作网页。通过Playwright,LangChain可以访问网站、点击、提交表单和查询数据。

from playwright.sync_api import sync_playwright

def run():
    # 使用Playwright上下文管理器
    with sync_playwright() as p:
        # 使用Chromium,但你也可以选择firefox或webkit
        browser = p.chromium.launch()

        # 创建一个新的页面
        page = browser.new_page()

        # 导航到指定的URL
        page.goto('https://langchain.com/')

        # 获取并打印页面标题
        title = page.title()
        print(f"Page title is: {title}")

        # 关闭浏览器
        browser.close()

if __name__ == "__main__":
    run()

Self-Ask with Search代理

Self-Ask with Search代理通过追问和中间答案策略帮助大型语言模型处理多步推理问题。它将大问题切分成小问题,逐步解答,特别适合需要额外信息的问题。

from langchain import OpenAI, SerpAPIWrapper
from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType

llm = OpenAI(temperature=0)
search = SerpAPIWrapper()
tools = [
    Tool(
        name="Intermediate Answer",
        func=search.run,
        description="useful for when you need to ask with search",
    )
]

self_ask_with_search = initialize_agent(
    tools, llm, agent=AgentType.SELF_ASK_WITH_SEARCH, verbose=True
)
self_ask_with_search.run(
    "使用玫瑰作为国花的国家的首都是哪里?"
)

结论

LangChain框架通过代理机制和ReAct框架,实现了大模型的自主判断和工具调用,提高了处理复杂问题的能力。这种机制不仅增强了模型的灵活性和适应性,还扩展了其应用范围,使其能够处理更多种类的任务。随着技术的不断进步,LangChain的应用将更加广泛,特别是在自动化任务处理和多步推理问题解决方面。此外,通过结合最新的编程实践和工具,LangChain能够提供更加强大和灵活的解决方案,以适应不断变化的技术和业务需求。未来,我们期待LangChain能够进一步集成更多的先进工具和框架,以实现更高级的自动化和智能化应用。