当前位置: 首页 > news >正文

【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, 可以看到工具链使用。
在这里插入图片描述
回复如下:
在这里插入图片描述

http://www.dtcms.com/a/98799.html

相关文章:

  • 当模板方法模式遇上工厂模式:一道优雅的烹饪架构设计
  • 【Qt】ffmpeg编码—存储(H264)
  • 链路聚合技术
  • 基于Spring Boot的戒烟网站的设计与实现(LW+源码+讲解)
  • 每日OJ题_剑指offer数组篇(剑指offer04+剑指offer11+剑指offer21)
  • 深度学习 Deep Learning 第12章 深度学习的主流应用
  • python之kafka组件
  • 车辆vin码/车架号查询接口如何用Java实现
  • 数字内容体验提升用户参与策略
  • Java 求两个 List 集合的交集和差集
  • 交换综合实验
  • pycharm与python版本
  • 常见FPGA逻辑单元比较(仅参考)
  • 全国产1U机架式交换机解决方案
  • Linux: 进程间通信
  • Python 序列构成的数组(对序列使用+和_)
  • sqlmap基础命令总结
  • [C++] 智能指针 进阶
  • Mysql练习题
  • RPCGC阅读
  • 算法刷题记录——LeetCode篇(11.1) [第1001~1010题]
  • Linux进程管理之进程的概念、进程列表和详细的查看、进程各状态的含义
  • C 语言的未来:在变革中坚守核心价值
  • vue搭建一个树形菜单项目
  • 坚持“大客户战略”,昂瑞微深耕全球射频市场
  • 计算机网络 第二章:应用层(2)
  • 项目实战-角色列表
  • SQLAlchemy系列教程:事件驱动的数据库交互
  • vue3实现router路由
  • 用Python实现简易的命令行工具