langchain 入门指南 - 使用 Agent

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: langchain 入门指南 - 使用 Agent

Agent 的核心思想是使用 LLM 来选择要采取的一系列动作。在前面学习过的 Chain 中,一系列操作是硬编码的,

而 Agent 使用 LLM 作为推理引擎来确定采取哪些操作以及采取的顺序。

实例

下面的例子中,我们询问了 LLM 一个问题:“今天广州适合穿什么?”。

LLM 因为无法知道当前广州的天气情况,所以它会调用一个函数 query_web 来获取广州的天气情况。

from langchain.agents import initialize_agent, AgentType
from langchain_community.utilities import GoogleSerperAPIWrapper
from langchain_core.tools import Tool
from langchain_openai import ChatOpenAI
import os
# https://serper.dev
os.environ['SERPER_API_KEY'] = 'your serper api key'
llm = ChatOpenAI(
    model_name="yi-large",
    temperature=0.3,
    api_key='your key',
    base_url="https://api.lingyiwanwu.com/v1",
)
def query_web(question: str):
    search = GoogleSerperAPIWrapper()
    return search.run(question)
tools = [
    Tool(
        name="query_web",
        description="""当你需要回答关于当前信息的问题时调用。返回的是搜索引擎的搜索结果。参数为问题""",
        func=query_web
    )
]
agent = initialize_agent(tools, llm, agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
print(agent.run('今天广州适合穿什么?给我返回中文的输出'))

输出:

> Entering new AgentExecutor chain...
Thought: To determine what to wear in Guangzhou today, I need to check the current weather conditions. 
I'll use the query_web tool to find the latest weather information.
Action:
```
{
  "action": "query_web",
  "action_input": "广州今天天气"
}
```
Observation: 83°F
Thought:Thought: The temperature in Guangzhou is 83°F, which indicates a warm day. 
I should recommend light clothing suitable for such weather.
Final Answer: 今天广州的天气适合穿轻薄的衣服,比如短袖衬衫、短裤或者连衣裙。记得涂抹防晒霜,戴上太阳帽和太阳镜来保护自己免受阳光直射。
> Finished chain.
今天广州的天气适合穿轻薄的衣服,比如短袖衬衫、短裤或者连衣裙。记得涂抹防晒霜,戴上太阳帽和太阳镜来保护自己免受阳光直射。

从上面的输出中,我们可以完整地看到 LLM 推理以及调用 tool 的过程:

  • LLM 首先思考了一下,需要查询广州的天气情况。
  • 然后 LLM 选择了调用 query_web 这个工具,传递了参数 广州今天天气
  • query_web 返回了广州今天的天气情况,LLM 根据这个情况给出了回答。
  • 最终我们得到了广州今天适合穿什么的回答。

定义多个工具函数

在上面的例子中,我们只给 agent 指定了一个工具函数,在实际使用中,我们可以定义多个工具函数,让 LLM 在推理的过程中选择合适的工具函数。

from langchain.agents import initialize_agent, AgentType
from langchain_community.utilities import GoogleSerperAPIWrapper
from langchain_core.tools import Tool
from langchain_openai import ChatOpenAI
import os
# https://serper.dev
os.environ['SERPER_API_KEY'] = 'your serper api key'
llm = ChatOpenAI(
    model_name="yi-large",
    temperature=0.3,
    api_key='your key',
    base_url="https://api.lingyiwanwu.com/v1",
)
def query_web(question: str):
    search = GoogleSerperAPIWrapper()
    return search.run(question)
def translate(text: str):
    yi_large_llm = ChatOpenAI(
        model_name="yi-large",
        temperature=0.3,
        api_key='your key',
        base_url="https://api.lingyiwanwu.com/v1",
    )
    return yi_large_llm.invoke(f'please translate "{text}" to Chinese')
tools = [
    Tool(
        name="query_web",
        description="""当你需要回答关于当前信息的问题时调用。返回的是搜索引擎的搜索结果。参数为问题""",
        func=query_web
    ),
    Tool(
        name="translate",
        description="""当你需要将英文翻译成中文时调用。返回的是翻译结果。参数为英文文本""",
        func=translate
    )
]
agent = initialize_agent(tools, llm, agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
print(agent.run('translate "hello" to Chinese'))

输出:

> Entering new AgentExecutor chain...
Thought: To translate "hello" to Chinese, I should use the 'translate' tool.
Action:
```
{
  "action": "translate",
  "action_input": "hello"
}
```
Observation: content='"hello" 翻译成中文是 "你好"。' response_metadata={'token_usage': {'completion_tokens': 14, 'prompt_tokens': 19, 'total_tokens': 33}, 'model_name': 'yi-large', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None} id='run-9ef86681-7d64-44b6-876c-951c54686ef1-0' usage_metadata={'input_tokens': 19, 'output_tokens': 14, 'total_tokens': 33}
Thought:I now know the final answer
Final Answer: "hello" 翻译成中文是 "你好"。
> Finished chain.
"hello" 翻译成中文是 "你好"。

在这个例子中,我们可以看到 agent 正确地选择了 translate 这个工具函数,并且返回了正确的翻译结果。

总结

Agent 是一个强大的工具,可以让我们使用 LLM 来去使用一系列工具函数,从而完成一系列复杂的任务。

比如 LLM 无法获取我们服务器地集群信息,但是我们可以定义一个工具函数来获取这些信息,然后让 LLM 来调用这个函数。


相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
5天前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
|
2月前
|
存储 人工智能
|
15天前
LangChain-26 Custom Agent 自定义一个Agent并通过@tool绑定对应的工具 同时让大模型自己调用编写的@tools函数
LangChain-26 Custom Agent 自定义一个Agent并通过@tool绑定对应的工具 同时让大模型自己调用编写的@tools函数
29 3
LangChain-26 Custom Agent 自定义一个Agent并通过@tool绑定对应的工具 同时让大模型自己调用编写的@tools函数
|
16天前
|
Shell Docker 容器
LangChain-10(2) 加餐 编写Agent获取本地Docker运行情况 无技术含量只是思路
LangChain-10(2) 加餐 编写Agent获取本地Docker运行情况 无技术含量只是思路
15 4
LangChain-10(2) 加餐 编写Agent获取本地Docker运行情况 无技术含量只是思路
|
5天前
|
人工智能 前端开发 JavaScript
前端大模型入门(二):掌握langchain的核心Runnable接口
Langchain.js 是 Langchain 框架的 JavaScript 版本,专为前端和后端 JavaScript 环境设计。最新 v0.3 版本引入了强大的 Runnable 接口,支持灵活的执行方式和异步操作,方便与不同模型和逻辑集成。本文将详细介绍 Runnable 接口,并通过实现自定义 Runnable 来帮助前端人员快速上手。
|
16天前
LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回
LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回
30 2
|
1月前
|
人工智能 自然语言处理 API
深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手
我们小时候都玩过乐高积木。通过堆砌各种颜色和形状的积木,我们可以构建出城堡、飞机、甚至整个城市。现在,想象一下如果有一个数字世界的乐高,我们可以用这样的“积木”来构建智能程序,这些程序能够阅读、理解和撰写文本,甚至与我们对话。这就是大型语言模型(LLM)能够做到的,比如 GPT-4,它就像是一套庞大的乐高积木套装,等待我们来发掘和搭建。
|
15天前
LangChain-24 Agengts 通过TavilySearch Agent实现检索内容并回答 AgentExecutor转换Search 借助Prompt Tools工具
LangChain-24 Agengts 通过TavilySearch Agent实现检索内容并回答 AgentExecutor转换Search 借助Prompt Tools工具
25 0
|
2月前
|
存储 人工智能 自然语言处理
从API到Agent:万字长文洞悉LangChain工程化设计
本文作者试着从工程角度去理解LangChain的设计和使用。大家可以将此文档作为LangChain的“10分钟快速上手”手册,希望帮助需要的同学实现AI工程的Bootstrap。
|
2月前
|
JSON Go 数据格式
langchain 入门指南 - 让 LLM 自动选择不同的 Prompt
langchain 入门指南 - 让 LLM 自动选择不同的 Prompt
71 0