当前位置:   article > 正文

langchain 入门指南 - 使用 Agent_langchain-chatchatv0.3中的agent使用

langchain-chatchatv0.3中的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('今天广州适合穿什么?给我返回中文的输出'))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

输出:

> 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.
今天广州的天气适合穿轻薄的衣服,比如短袖衬衫、短裤或者连衣裙。记得涂抹防晒霜,戴上太阳帽和太阳镜来保护自己免受阳光直射。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

从上面的输出中,我们可以完整地看到 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'))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

输出:

> 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" 翻译成中文是 "你好"。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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

总结

Agent 是一个强大的工具,可以让我们使用 LLM 来去使用一系列工具函数,从而完成一系列复杂的任务。
比如 LLM 无法获取我们服务器地集群信息,但是我们可以定义一个工具函数来获取这些信息,然后让 LLM 来调用这个函数。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/988800
推荐阅读
相关标签
  

闽ICP备14008679号