青训营X豆包MarsCode 技术训练营第二课 | 豆包MarsCode AI 刷题

237 阅读5分钟

使用 LangChain 打造智能代理:探索工具与 Agent 的强大能力

在AI应用中,智能代理(Agent)作为系统的核心控制器,承担着任务分配、推理决策等职责。LangChain作为一个强大的开发框架,为开发者提供了一种全新的方法来构建基于大模型的代理系统。在LangChain中,工具(Tool)作为代理的“武器”,通过与外部系统的交互,让智能代理拥有了强大的执行能力。本文将深入探讨LangChain中工具与Agent的结合,带你一起开发出更智能、更高效的AI助手。

1. 什么是 LangChain 中的工具?

在LangChain的世界里,工具是代理与外部世界交互的桥梁。工具可以是各种类型的功能封装,例如网络搜索、文献查询、邮件管理等。通过工具的调用,智能代理可以执行复杂的任务,例如处理科研论文、自动发送邮件,甚至进行代码管理。

工具本身通常是封装了一些功能的模块,每个工具都有自己的输入、输出和处理逻辑。LangChain通过为这些工具提供统一的框架,使得不同工具之间的协作变得更加简单和高效。当代理收到任务时,它会根据任务的需求选择合适的工具进行处理。

2. LangChain 的工具加载与使用

在LangChain中,加载工具非常简单。开发者只需要指定工具的名称,就能方便地将其集成到代理中。以下是加载工具的示例代码:

from langchain.agents import load_tools
tool_names = ['arxiv', 'gmail']  # 选择你需要的工具
tools = load_tools(tool_names)

对于一些工具,可能需要初始化大模型(LLM)以帮助代理完成任务。可以通过以下方式加载工具和模型:

from langchain.chat_models import ChatOpenAI
from langchain.agents import load_tools, initialize_agent, AgentType

llm = ChatOpenAI(temperature=0.0)  # 初始化大模型
tools = load_tools(["arxiv"], llm=llm)  # 加载工具并与LLM结合

3. 使用 ArXiv 工具进行科研助理开发

ArXiv 是一个包含众多科研预印本的数据库,涵盖了物理学、数学、计算机科学等多个领域。在LangChain中,arXiv工具封装了对ArXiv数据库的访问功能,使得代理可以快速获取科研论文的相关信息。

例如,我们可以用ArXiv工具来提取某篇论文的创新点:

# 初始化模型和工具
llm = ChatOpenAI(temperature=0.0)
tools = load_tools(["arxiv"])

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

# 运行代理,查询论文的创新点
result = agent_chain.run("介绍一下2005.14165这篇论文的创新点?")
print(result)

在这个示例中,代理通过ArXiv工具获取论文信息,并进行推理,最终给出关于论文创新点的答案。

4. 开发个人助理:Gmail 工具箱的使用

除了科研助手,LangChain还可以帮助你构建个人助理。例如,你可以让AI助手每天检查邮件,并提供信息汇总。通过集成Gmail工具,开发者可以让智能代理与Gmail进行交互,完成查询、草拟邮件等任务。

步骤一:设置 Gmail API

首先,你需要在Google Cloud平台创建一个OAuth 2.0项目,并配置API凭证。完成后,将凭证保存为credentials.json文件。然后,使用以下代码生成认证token:

from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']
creds = None
if os.path.exists('token.json'):
    creds = Credentials.from_authorized_user_file('token.json', SCOPES)

if not creds or not creds.valid:
    if creds and creds.expired and creds.refresh_token:
        creds.refresh(Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file(
            'credentials.json', SCOPES)
        creds = flow.run_local_server(port=0)
    with open('token.json', 'w') as token:
        token.write(creds.to_json())

步骤二:用 LangChain 开发智能邮件助手

接下来,你可以通过LangChain框架开发Gmail助手,利用工具库与Gmail API交互。以下是一个简单的示例,展示如何查询特定邮件:

from langchain.agents.agent_toolkits import GmailToolkit
from langchain.chat_models import ChatOpenAI
from langchain.agents import initialize_agent, AgentType

# 初始化Gmail工具包
toolkit = GmailToolkit()

# 获取Gmail API的凭证并建立连接
from langchain.tools.gmail.utils import build_resource_service, get_gmail_credentials
credentials = get_gmail_credentials(
    token_file="token.json",  # Token文件路径
    scopes=["https://mail.google.com/"],  # 邮件读取权限
    client_secrets_file="credentials.json",  # 客户端密钥文件
)

# 创建API服务
api_resource = build_resource_service(credentials=credentials)
toolkit = GmailToolkit(api_resource=api_resource)

# 初始化聊天模型
llm = ChatOpenAI(temperature=0, model='gpt-4')

# 配置代理
agent = initialize_agent(
    tools=toolkit.get_tools(),
    llm=llm,
    agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
)

# 询问代理是否收到特定邮件
result = agent.run("今天易速鲜花客服给我发邮件了么?")
print(result)

通过此代码,你的智能代理将能够读取Gmail并回答是否收到来自特定发件人的邮件。

5. LangChain 的优势与总结

LangChain框架的强大之处在于它将多个复杂的任务和工具抽象化,提供了一个统一的接口来管理大模型与外部工具的交互。通过LangChain,开发者可以更加专注于构建应用的业务逻辑,而无需处理底层的细节。

LangChain 的核心优势:

  • 集成多种工具与模型:支持多个工具和模型协同工作,能够处理不同类型的任务。
  • 易于扩展和维护:工具和代理的管理简单直观,可以快速添加新功能或替换现有组件。
  • 智能化交互:代理可以根据上下文和任务的需求自动选择工具进行处理,提高了系统的智能化程度。
  • 可解释性:LangChain提供了对决策过程的清晰记录,有助于理解模型的推理和决策过程。

6. 思考与挑战

随着LangChain的应用越来越广泛,开发者可以探索更多场景的智能代理,例如自动化办公助手、代码管理工具等。你也可以尝试将GitHub工具与LangChain结合,自动处理PR合并、Issue管理等任务,进一步提升开发效率。

通过学习LangChain,你不仅能掌握如何构建复杂的AI系统,还能提升你的开发效率,让你的AI助手成为你工作中的得力助手。

如果你喜欢本文内容,欢迎分享给有需要的朋友,也期待在留言区看到你的学习心得与挑战!