人工智能学习与实训笔记(十四):Langchain之Agent

news2024/11/24 16:04:27

 人工智能专栏文章汇总:人工智能学习专栏文章汇总-CSDN博客

本篇目录

0、概要

1、Agent整体架构

2、langchain中agent实现

3、Agent业务实现逻辑


0、概要

Agent是干什么的? Agent的核心思想是使用语言模型(LLM)作为推理的大脑,以制定解决问题的计划、借助工具实施动作。在agents中几个关键组件如下:

  • Agent:制定计划和思考下一步需要采取的行动。
  • Tools:解决问题的工具
  • Toolkits:用于完成特定目标所需的工具组。一个toolkit通常包含3-5个工具。
  • AgentExecutor:AgentExecutor是agent的运行时环境。这是实际调用agent并执行其选择的动作的部分。

1、Agent整体架构

代理(Agents)涉及LLM做出决策以确定要采取哪些行动,执行该行动,查看观察结果并重复执行步骤直到完成。LangChain为代理提供了标准接口,一系列可供选择的代理和端到端代理的示例。

在LLM驱动的自主代理系统中,LLM充当代理的大脑,并辅以几个关键功能:

  • 规划
    • 子目标拆解解:agent将大型任务拆解为小型的、可管理的子目标,从而能够高效处理复杂任务。
    • 反思和改进:agent可以从过去的行为中进行自我批评和自我反省。这种从错误中吸取教训,并对未来的步骤进行改进的思维可以有效提高最终结果。真种思维方式来自ReAct,其大致格式为:Thought: ...Action: ...Observation: ... (Repeated many times)。

ReAct

  • 记忆
    • 短期记忆:上下文学习是利用模型的短期记忆来学习的。
    • 长期记忆:通过利用外部向量存储和快速检索,agen可以实现长时间保留和回忆(无限)信息的能力。

  • 工具使用
    • 代理学习调用外部 API 以获取模型权重中缺少的额外信息(通常在预训练后很难更改),包括当前时讯、代码执行能力、对私有信息源的访问等。自然可以自定义工具使用,如本地向量数据库查找。

自定义工具方法

2、langchain中agent实现

langchain中agent有两种主要类型:

  • 动作代理人(Action agents):在每个时间步上,使用所有先前动作的输出决定下一个动作。
  1. 接收用户输入
  2. 决定是否使用任何工具以及工具输入
  3. 调用工具并记录输出(也称为“观察结果”)
  4. 使用工具历史记录、工具输入和观察结果决定下一步
  5. 重复步骤 3-4,直到确定可以直接回应用户
agent types
zero-shot-react-description代理使用ReAct框架,仅基于工具的描述来确定要使用的工具.此代理使用 ReAct 框架确定使用哪个工具 仅基于工具的描述。缺乏 会话式记忆。
conversational-react-description这个代理程序旨在用于对话环境中。提示设计旨在使代理程序有助于对话。 它使用ReAct框架来决定使用哪个工具,并使用内存来记忆先前的对话交互。
react-docstore

这个代理使用ReAct框架,必须提供两个工具:一个Search工具和一个Lookup工具

自问自答,会使用Google搜索工具。
self-askwith-search代理使用一个被命名为Intermediate Answer的工具。根据需要执行搜索和提问步骤,以获得最终答案。
chat-zero-shot-react-descriptionzero-shot意味着代理 (Agents) 仅在当前操作上起作用——它没有 记忆
chat-conversational-react-description该代理被设计用于会话设置。提示的目的是使代理具有帮助和会话性。它使用ReAct框架来决定使用哪个工具,并使用内存来记住以前的会话交互。
structured-chat-zero-shot-react-description能够使用多输入工具,结构化的参数输入。
openai-functions某些OpenAI模型(如gpt-3.5-turbo-0613和gpt-4-0613)已经明确地进行了微调,如果使用这些模型,可以考虑使用OpenAI Functions 的AgentType。
openai-multi-functions某些OpenAI模型(如gpt-3.5-turbo-0613和gpt-4-0613)已经明确地进行了微调,如果使用这些模型,可以考虑使用OpenAI Functions 的AgentType。
  • 计划执行代理人(Plan-and-execute agents):预先决定所有动作的完整顺序,然后按照计划执行,而不更新计划。
  1. 接收用户输入
  2. 规划要执行的全部步骤序列
  3. 按顺序执行步骤,将过去步骤的输出作为未来步骤的输入

动作代理人适用于小任务,而计划执行代理人适用于复杂或长时间运行的任务,这些任务需要保持长期目标和重点。

3、Agent业务实现逻辑

 

demo code:

from langchain.agents import initialize_agent, Tool
from langchain_wenxin.chat_models import ChatWenxin

WENXIN_APP_Key = "你自己的KEY"
WENXIN_APP_SECRET = "用你自己的"
#创建LLMChain的大模型,这里我们用的是文心大模型
llm = ChatWenxin(
    temperature=0.4,
    model="ernie-bot-turbo",
    baidu_api_key = WENXIN_APP_Key,
    baidu_secret_key = WENXIN_APP_SECRET,
    verbose=True,
    )
 
# 模拟问关于订单
def search_order(input:str) ->str:
  return "订单状态:已发货;发货日期:2023-09-15;预计送达时间:2023-09-18"
 
# 模拟问关于推荐产品
def recommend_product(input:str)->str:
  return "红色连衣裙"
 
# 模拟问电商faq
def faq(input:str)->str:
  return "7天无理由退货"
 
# 创建了一个 Tool 对象的数组,把这三个函数分别封装在了三个 Tool 对象里面
# 并且定义了描述,这个 description 就是告诉 AI,这个 Tool 是干什么用的,会根据描述做出选择
tools=[
    Tool(
        name="Search Order",func=search_order,
        description="useful for when you need to answer questions about customers orders"
    ),
    Tool(
        name="Recommend Product",func=recommend_product,
        description="useful for when you need to answer questions about product recommendations"
    ),
    Tool(
        name="FAQ",func=faq,
        description="useful for when you need to answer questions about shopping policies, like return policy, shipping policy, etc."
    ),
]
# 指定使用tools,llm,agent则是zero-shot"零样本分类",不给案例自己推理
# 而 react description,指的是根据你对于 Tool 的描述(description)进行推理(Reasoning)并采取行动(Action)
agent=initialize_agent(tools,llm,agent="zero-shot-react-description", verbose=True)


question = "我想买一件衣服,但是不知道哪个款式好看,你能帮我推荐一下吗?"
result=agent.run(question)
print(result)

result:

Action: Recommend Product
Action Input: 顾客询问衣服款式推荐

Observation: 我将根据顾客的需求和喜好推荐几个款式。

Action: 开始搜索并筛选出几个符合顾客需求的款式。

Observation: 这些款式都是比较受欢迎的,并且符合顾客的喜好。

...

Thought: 我已经找到了几个合适的款式,现在可以给出最终推荐了。

Final Answer: 根据顾客的需求和喜好,我推荐了以下几款衣服,您可以根据自己的喜好进行选择。

Final Answer: 推荐款式为:款式A、款式B和款式C。

Observation: 顾客可以根据我的推荐去选择自己喜欢的款式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1452643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VitePress-17- 配置- appearance 的作用详解

作用说明 appearance : 是进行主题模式的配置开关,决定了是否启用深色模式。 可选的配置值: true: 默认配置,可以切换为深色模式; false: 禁用主题切换,只使用默认的配置; dark: 默认使用深色模式&#xff…

【Linux网络编程六】服务器守护进程化Daemon

【Linux网络编程六】服务器守护进程化Daemon 一.背景知识:前台与后台二.相关操作三.Linux的进程间关系四.自成会话五.守护进程四步骤六.服务器守护进程化 一.背景知识:前台与后台 核心知识就是一个用户在启动Linux时,都会给一个session会话&a…

基于Springboot的社区物资交易互助平台(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的社区物资交易互助平台(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系…

leetcode刷题(罗马数字转数字)

1.题目描述 2.解题思路 这时候已经给出了字母对应的数字,我们只需要声明一个字典,将罗马数字和数字之间的对应关系声明即可。其中可能涉及到会出现两个连续的罗马字母代表一个数字,这时候我们需要判断遍历的字符和将要遍历的下一个字符是否存…

pytorch 实现线性回归(深度学习)

一 查看原始函数 初始化 %matplotlib inline import random import torch from d2l import torch as d2l 1.1 生成原始数据 def synthetic_data(w, b, num_examples):x torch.normal(0, 1, (num_examples, len(w)))y torch.matmul(x, w) bprint(x:, x)print(y:, y)y tor…

Mysql第二关之存储引擎

简介 所有关于Mysql数据库优化的介绍仿佛都有存储引擎的身影。本文介绍Mysql常用的有MyISAM存储引擎和Innodb存储引擎,还有常见的索引。 Mysql有两种常见的存储引擎,MyISAM和Innodb,它们各有优劣,经过多次优化和迭代,…

【STM32 CubeMX】SPI HAL库编程

文章目录 前言一、CubeMX配置SPI Flash二、SPI HAL编程2.1 查询方式函数2.2 使用中断方式2.3 DMA方式 总结 前言 STM32 CubeMX 是一款由 STMicroelectronics 提供的图形化配置工具,用于生成 STM32 微控制器的初始化代码和项目框架。在 STM32 开发中,使用…

JDBC查询操作

目录 加载驱动获取连接创建会话发送SQL处理结果关闭资源测试 加载驱动 // 加载驱动Class.forName("com.mysql.cj.jdbc.Driver");获取连接 // 获取连接String url "jdbc:mysql://127.0.0.1:3306/book";String username "root" …

2024全新领域,适合新手发展的渠道,年后不愁资金问题!

我是电商珠珠 如今年已经过完了,不少人还在迷茫自己开工后要做些什么,部分人还在想着去做一些不用吃力就能赚钱的工作,或是一份能兼顾自己日常生活的兼职。 其实,任何赚钱的工作要么动脑要么费力。 费力的工作有很多&#xff0…

敦煌网怎么提升流量的?如何进行自养号测评提升转化率?

敦煌网作为中国领先的跨境电商平台,对于商家而言,提升流量是增加曝光和销售的重要手段。以下将介绍敦煌网提升流量的几种方法。 一、敦煌网怎么提升流量的? 首先,通过合理的商品定位和市场调研,选择有潜力和竞争优势的商品进行…

android获取sha1

1.cmd在控制台获取 切换到Android Studio\jre\bin目录下执行keytool -list -v -keystore 签名文件路径例如: 2.也可以在android studio中获取 在Terminal中输入命令:keytool -list -v -keystore 签名文件路径获取 获取到的sha1如下:

linux系统zabbix工具监控web页面

web页面监控 内建key介绍浏览器配置浏览器页面查看方式 监控指定的站点的资源下载速度,及页面响应时间,还有响应代码; web Scenario: web场景(站点)web page :web页面,一个场景有多…

【LeetCode: 103. 二叉树的锯齿形层序遍历 + BFS】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

OpenAl 视频生成模型 —— Sora技术报告解读

这里是陌小北,一个正在研究硅基生命的碳基生命。正在努力成为写代码的里面背诗最多的,背诗的里面最会写段子的,写段子的里面代码写得最好的…厨子。 写在前面 早上醒来,就看到OpenAl推出的视频模型Sora炸锅了,感觉所…

WordPress站点成功升级后的介绍页地址是什么?

我们一般在WordPress站点后台 >> 仪表盘 >> 更新中成功升级WordPress的话,最后打开的就是升级之后的版本介绍页。比如boke112百科前两天升级到WordPress 6.4.2后显示的介绍页如下图所示: 该介绍除了介绍当前版本修复了多少个问题及修补了多少…

BUUCTF第十九、二十题解题思路

目录 第十九题rome 第二十题rsa 第十九题rome 解压、查壳。 无壳,用32位IDA打开,检索字符串,找到一个字符串“You are correct!”,与flag相关,对其交叉引用找到函数,查看伪代码。 int func() {int resul…

二叉树前序中序后序遍历(非递归)

大家好,又和大家见面啦!今天我们一起去看一下二叉树的前序中序后序的遍历,相信这个对大家来说是信手拈来,但是,今天我们并不是使用常见的递归方式来解题,我们采用迭代方式解答。我们先看第一道前序遍历 1…

LabVIEW开发DUP实时监控系统

LabVIEW开发DUP实时监控系统 该项目采用虚拟仪器设计理念,以LabVIEW作为核心技术平台,开发了一套磁控溅射过程的实时监控系统。实现过程中关键参数的全面数据采集与处理,建立完整的历史数据库,以支持涂层技术的改进和系统向模糊控…

英文论文(sci)解读复现【NO.20】TPH-YOLOv5++:增强捕获无人机的目标检测跨层不对称变压器的场景

此前出了目标检测算法改进专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

输入捕获模式PWM输入模式(PWMI)

一、概念介绍 输出比较: 比较电路输入的CNT、CCR大小关系 ,在通道引脚输出高低电平 二、频率知识、测量方法补充 N/fc得到标准频率的时长,也就是待测频率的周期 测频法代码实现:修改对射式红外传感器计次(上升沿计…