LangChain简明教程(4)

目录

  1. LangChain简明教程(1)
  2. LangChain简明教程(2)
  3. LangChain简明教程(3)

模块 III:Agent(1)——工具

LangChain 引入了一个强大的概念,称为 Agent,当前的很多媒体将其翻译为“智能体”,从汉语的译名来看,它会让人觉得很“智能”。不过,为了避免因“望文生义”而产生误解,本文不对这个单词进行翻译,读者可以按照某种专有名词来对待。

从纯粹技术角度描述,Agent 即是对链式(chains)概念的提升,利用语言模型动态地决定要执行的动作序列,使它们变得极其灵活和适应性强。与传统链条中动作是硬编码在代码中的不同,Agent 使用语言模型作为推理引擎,来决定采取哪些动作以及以什么顺序执行。

Agent 是负责决策的核心组件,它利用语言模型和提示词(prompt)的力量来确定实现特定目标的下一步行动。Agent 的输入通常包括以下内容:

  • 工具:可用工具的描述(稍后会详细介绍)。
  • 用户输入:用户的高层次目标或查询。
  • 中间步骤:为达到当前用户输入而执行的(动作,工具输出)对的历史记录。

Agent 的输出可以是下一步要执行的动作(AgentActions),也可以是发送给用户的最终响应(AgentFinish)。一个动作指定了一种工具以及该工具的输入。

工具

工具是 Agent 用来与外界交互的接口,使 Agent 能够执行各种任务,例如搜索网络、运行 shell 命令或访问外部 API。在 LangChain 中,工具对于扩展 Agent 的能力并使其能够完成多样化任务至关重要。

要在 LangChain 中使用工具,可以通过以下代码片段加载它们:

from langchain.agents import load_tools

tool_names = [...]
tools = load_tools(tool_names)

某些工具可能需要一个基础的语言模型(LLM)来初始化。在这种情况下,也可以传一个 LLM:

from langchain.agents import load_tools

tool_names = [...]
llm = ...
tools = load_tools(tool_names, llm=llm)

这种设置允许访问各种工具并将它们集成到你的 Agent 工作流中。LangChain 所提供的完整工具列表及其使用文档已经列在了官方文档中,点击这里查看

让我们来看一些工具的使用举例。

DuckDuckGo

利用 DuckDuckGo 工具可以实现网络搜索(使用 DuckDuckGo 的搜索引擎),使用方法如下:

from langchain.tools import DuckDuckGoSearchRun
search = DuckDuckGoSearchRun()
search.run("manchester united vs luton town match summary")

输出:

在这里插入图片描述

DataForSeo

DataForSeo 工具包允许通过 DataForSeo API 获取搜索引擎结果。要使用此工具包,需要设置你自己的 API 凭证(关于 API 的注册,可以参考 DataForSeo 官方文档)。以下是配置凭证的方法:

import os

os.environ["DATAFORSEO_LOGIN"] = "<your_api_access_username>"
os.environ["DATAFORSEO_PASSWORD"] = "<your_api_access_password>"

一旦配置好上述内容,即可通过 API 创建 DataForSeoAPIWrapper 工具:

from langchain.utilities.dataforseo_api_search import DataForSeoAPIWrapper

wrapper = DataForSeoAPIWrapper()

result = wrapper.run("Weather in Los Angeles")

DataForSeoAPIWrapper 工具从各种来源检索搜索引擎结果。

如果返回内容要求是 JSON 格式,可以自定义返回结果类型和字段。例如,可以指定结果类型、字段,并设置返回最上层的最大数量:

json_wrapper = DataForSeoAPIWrapper(
    json_result_types=["organic", "knowledge_graph", "answer_box"],
    json_result_fields=["type", "title", "description", "text"],
    top_count=3,
)

json_result = json_wrapper.results("Bill Gates")

此示例通过指定结果类型、字段并限制结果数量来定制 JSON 响应。

还可以通过向 API 包装器传递额外的参数,来指定搜索结果的位置和语言:

customized_wrapper = DataForSeoAPIWrapper(
    top_count=10,
    json_result_types=["organic", "local_pack"],
    json_result_fields=["title", "description", "type"],
    params={"location_name": "Germany", "language_code": "en"},
)

customized_result = customized_wrapper.results("coffee near me")

通过提供位置和语言参数,可以将搜索结果定制为特定的地区和语言。

还可以灵活选择想要使用的搜索引擎。只需指定目标搜索引擎即可:

customized_wrapper = DataForSeoAPIWrapper(
    top_count=10,
    json_result_types=["organic", "local_pack"],
    json_result_fields=["title", "description", "type"],
    params={"location_name": "Germany", "language_code": "en", "se_name": "bing"},
)

customized_result = customized_wrapper.results("coffee near me")

在此示例中,搜索被定制为使用 Bing 作为搜索引擎。

API 包装器还允许指定要执行的搜索类型。例如,可以执行地图搜索:

maps_search = DataForSeoAPIWrapper(
    top_count=10,
    json_result_fields=["title", "value", "address", "rating", "type"],
    params={
        "location_coordinate": "52.512,13.36,12z",
        "language_code": "en",
        "se_type": "maps",
    },
)

maps_search_result = maps_search.results("coffee near me")

这将搜索定制为获取与地图相关的信息。

Shell (bash)

Shell 工具包为 agents 提供了对 shell 环境的访问权限,使它们能够执行 shell 命令。此功能非常强大,但应谨慎使用,尤其是在沙盒环境中。以下是使用 Shell 工具的方法:

from langchain.tools import ShellTool

shell_tool = ShellTool()

result = shell_tool.run({"commands": ["echo 'Hello World!'", "time"]})

在这个例子中,shell 工具要求执行两条指令,效果如下:

在这里插入图片描述

你可以将 Shell 工具提供给 agent,以执行更复杂的任务。以下是一个 agent 使用 Shell 工具从网页中获取链接的示例:

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

llm = ChatOpenAI(temperature=0.1)

shell_tool.description = shell_tool.description + f"args {shell_tool.args}".replace(
    "{", "{{"
).replace("}", "}}")
self_ask_with_search = initialize_agent(
    [shell_tool], llm, agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True
)
self_ask_with_search.run(
    "Download the langchain.com webpage and grep for all urls. Return only a sorted list of them. Be sure to use double quotes."
)

输出效果:

在这里插入图片描述

在此场景中,agent 使用 Shell 工具执行一系列命令,以获取、过滤并排序网页中的 URL。

上述示例展示了一些 LangChain 中可用的工具。这些工具最终扩展了 agent 的能力(将在下一小节探讨),并使它们能够高效地执行各种任务。根据需求,你可以选择最适合项目需求的工具和工具包,并将它们集成到 agent 的工作流中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CS创新实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值