什么是 Agent
在 LangChain 中,Agent 是一个核心组件,用于动态管理和执行任务,通过调用语言模型(LLM)和工具(Tools)来完成复杂的任务。Agent 的主要作用是根据用户输入的任务描述,智能地选择并调用合适的工具,逐步解决问题,最终生成答案。
Agent的简单使用
假设,我们的需求是:agent 能够使用网络搜索的工具,来回答关于“三天后上海的天气如何”的问题
- LangChain 内置 GoogleSearch 的网络搜索工具
serpapi
,但是国内不方便使用 - 这里使用国内的 Bocha Web Search API 来替代,但是需要自己定义工具
- Bocha Web Search API 密钥获取与充值:博查AI开放平台
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.agents import Tool
from langchain.tools import tool
import requests
BOCHA_API_KEY = "sk-27f1a75797c64f3fa044d35afd3cbd27"
# 定义Bocha Web Search工具
@tool
def bocha_web_search_tool(query: str, count: int = 8) -> str:
"""
使用Bocha Web Search API进行联网搜索,返回搜索结果的字符串。
参数:
- query: 搜索关键词
- count: 返回的搜索结果数量
返回:
- 搜索结果的字符串形式
"""
url = 'https://api.bochaai.com/v1/web-search'
headers = {
'Authorization': f'Bearer {BOCHA_API_KEY}', # 请替换为你的API密钥
'Content-Type': 'application/json'
}
data = {
"query": query,
"freshness": "noLimit", # 搜索的时间范围,例如 "oneDay", "oneWeek", "oneMonth", "oneYear", "noLimit"
"summary": True, # 是否返回长文本摘要总结
"count": count
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
# 返回给大模型的格式化的搜索结果文本
# 可以自己对博查的搜索结果进行自定义处理
return str(response.json())
else:
raise Exception(f"API请求失败,状态码: {response.status_code}, 错误信息: {response.text}")
# 创建LangChain工具
bocha_tool = Tool(
name="BochaWebSearch",
func=bocha_web_search_tool,
description="使用Bocha Web Search API进行网络搜索"
)
# 加载一些工具
tools = [bocha_tool]
# 初始化 agent
agent = initialize_agent(
tools=tools, # 工具列表,Agent 可以调用的工具。
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, # Agent 类型,决定了 Agent 的行为模式。
llm=tongyi_chat, # 语言模型实例,用于任务解析和生成。
verbose=True # 是否输出详细的日志信息,用于调试。
)
# 测试 agent
agent.run("what will be the weather in Shanghai three days from now?")
通过上述操作,我们成功创建并运行了一个 Agent,它能够帮助我们从网络上获取信息,并根据获取到的信息对我们的问题做出回答。