LangChain中的代理机制
代理机制是LangChain中的核心,它通过以下三个元素实现:
- 大模型:作为逻辑引擎,生成预测和处理输入。
- 外部工具:包括数据清洗工具、搜索引擎、应用程序等。
- 代理:控制交互流程,调用适当的外部工具。
代理机制使得大模型能够检查信息真实性,调用外部工具搜索信息,并根据结果进行决策。
ReAct框架
ReAct框架是LangChain中的关键,由以下三个概念组成:
- Thought(思考):LLM模型生成的逻辑推理过程。
- Act(行动):LLM判断需要执行的具体行为。
- 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%卖出,应该如何定价?")
代理的关键组件
代理系统包括:
- 代理(Agent):决定下一步操作的类。
- 工具(Tools):代理调用的函数。
- 工具包(Toolkits):一组用于完成特定目标的工具。
- 代理执行器(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能够进一步集成更多的先进工具和框架,以实现更高级的自动化和智能化应用。