【LangChain入门 9 Agent 】LangChain开发Agent智能体
文章目录
- 一、Agent概念
- 1.1 Agent是什么
- 1.2 Agent的能力
- 二、基于LangChain的Agent的使用
- 2.1 单独的大语言无法采取行动
- 2.2 TavilySearchResults 联网搜索
- 2.3 用Agent输出最高气温乘2
简单的来说,语言模型无法采取行动,只能输出文本。
而LangChain的一个重要用例是创建Agent(代理)。
Agent是使用LLM作为推理引擎的系统,用于确定应该采取哪些行动以及这些行动的输入应该是什么。然后可以将这些行动的结果反馈给代理,并确定是否需要更多行动,或者是否可以结束。
本文的例子是:搜索城市的最高气温,然后再乘以2,等于多少。
一、Agent概念
1.1 Agent是什么
AI Agent
是基于LLM的能够自主理解、自主规划决策、执行复杂任务的智能体。
A g e n t s = L L M + 规划技能 + 记忆 + 工具使用 Agents = LLM + 规划技能 + 记忆 + 工具使用 Agents=LLM+规划技能+记忆+工具使用
1.2 Agent的能力
-
Memory(记忆):智能体用来存储和检索历史信息的组件。它允许智能体在多次交互中保持上下文,从而做出更连贯和相关的响应。记忆可以分为短期记忆和长期记忆:
短期记忆:通常用于存储当前会话中的信息,如最近的对话历史。
长期记忆:用于存储更持久的信息,如用户偏好或历史数据。 -
Plan(计划): 智能体用来决定如何执行任务的策略或步骤。它涉及对当前状态和目标的分析,以生成一系列行动步骤。计划可以是静态的(预定义的)或动态的(根据当前情况生成)。
静态计划:预先定义好的步骤,适用于结构化的任务。
动态计划:根据当前上下文和目标实时生成的步骤,适用于复杂和动态的任务。 -
Action(动作): 智能体执行的具体操作。每个行动都是实现计划中的一个步骤。行动可以是调用一个工具、生成一段文本或执行一个外部 API 调用。
工具调用:智能体可以调用各种工具来执行特定任务,如搜索、计算或数据检索。
文本生成:智能体可以生成自然语言响应,与用户进行交互。 -
Tools(工具): 智能体用来执行特定任务的函数或 API。工具可以包括搜索引擎、数据库查询、计算器、翻译服务等。智能体通过调用这些工具来获取信息或执行操作。
内置工具:LangChain 提供了一些内置工具,如搜索工具、计算工具等。
自定义工具:开发者可以根据需要创建自定义工具,并将其集成到智能体中。
二、基于LangChain的Agent的使用
2.1 单独的大语言无法采取行动
from langchain_ollama import OllamaLLM
llm = OllamaLLM(model="deepseek-r1:7b")
# llm.invoke("明朝是什么建立的,皇帝是谁?推理过程用中文表示")
llm.invoke("今天苏州的温度是多少")
模型只能输出:
2.2 TavilySearchResults 联网搜索
先去官网注册个账号,拿到 TAVILY_API_KEY
https://app.tavily.com/home
然后我们搜索下今天苏州的天气怎么样
import os
import getpass
# os.environ["TAVILY_API_KEY"] = getpass.getpass() # 输入密码
os.environ['TAVILY_API_KEY'] = 'tvly-dev你的key'
from langchain_community.tools.tavily_search import TavilySearchResults
search = TavilySearchResults(max_results=1)
print(search.invoke("今天苏州的天气怎么样"))
2.3 用Agent输出最高气温乘2
from langchain.agents import initialize_agent, AgentType, load_tools
import os
# import getpass
# os.environ["TAVILY_API_KEY"] = getpass.getpass() # 输入密码
os.environ['TAVILY_API_KEY'] = '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'
from langchain_community.tools.tavily_search import TavilySearchResults
# os.environ['TAVILY_API_KEY'] = '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'
search = TavilySearchResults(max_results=1)
# 加载常用工具,例如数学计算和维基百科
tools = [search]
tools2 = load_tools(["llm-math"], llm=llm)
tools.extend(tools2)
# 创建并初始化智能体Agent
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,
handle_parsing_errors=True,
verbose=True
)
response = agent.invoke("今天苏州的最高温度是多少?最高温度乘以2等于多少?")
print(response)
因为verbose=True
, 可以看到工具链使用。
回复如下: