人工智能学习与实训笔记(十四):Langchain 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 ChatWenxinWENXIN_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.mzph.cn/news/685415.shtml

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

相关文章

跟着pink老师前端入门教程-day27

三、变量 (一)变量概述 1、什么是变量 白话:变量就是一个装东西的盒子 通俗:变量是用于存放数据的容器,通过变量名获取数据,甚至数据可以修改 2、变量在内存中的存储 本质:变量是程序在内存…

Java毕业设计-基于ssm的网上餐厅管理系统-第72期

获取源码资料,请移步从戎源码网:从戎源码网_专业的计算机毕业设计网站 项目介绍 基于ssm的网上餐厅管理系统:前端jsp、jquery、bootstrap,后端 maven、springmvc、spring、mybatis,集成类名管理、菜品管理、订单管理…

(17)Hive ——MR任务的map与reduce个数由什么决定?

一、MapTask的数量由什么决定? MapTask的数量由以下参数决定 文件个数文件大小blocksize 一般而言,对于每一个输入的文件会有一个map split,每一个分片会开启一个map任务,很容易导致小文件问题(如果不进行小文件合并&…

C# CAD 框选pdf输出

在C#中进行AutoCAD二次开发时,实现框选(窗口选择)实体并输出这些实体到PDF文件通常涉及以下步骤: public ObjectIdCollection GetSelectedEntities() {using (var acTrans HostApplicationServices.WorkingDatabase.Transaction…

代码随想录算法训练营29期Day52|LeetCode 198,213,337

文档讲解:打家劫舍 打家劫舍II 打家劫舍III 198.打家劫舍 题目链接:https://leetcode.cn/problems/house-robber/description/ 思路: 设dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金…

Sora:AI视频生产力的颠覆性跃进,让创意瞬间成“视界”!

在AI视频技术宇宙中,RunwayGen2、Stable Video Diffusion和Pika等明星产品早已名声在外。然而,今日横空出世的Sora犹如一颗璀璨新星,以其震撼性的创新突破,在视频制作领域掀起了一场革命!相较于市面上同类AI视频神器&a…

【洛谷 P3367】【模板】并查集 题解(并查集+启发式合并)

【模板】并查集 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作。 输入格式 第一行包含两个整数 N , M N,M N,M ,表示共有 N N N 个元素和 M M M 个操作。 接下来 M M M 行,每行包含三个整数 Z i , X i , Y i Z_i,X_i,Y…

力扣57题:插入区间

题目链接】 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 【解题代码】 class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {List<int[]> intervalList new ArrayList<>();boolean newIntervalInsert …

使用 Mermaid 创建流程图,序列图,甘特图

使用 Mermaid 创建流程图和图表 Mermaid 是一个流行的 JavaScript 库&#xff0c;用于创建流程图、序列图、甘特图和其他各种图表。它的简洁语法使得创建图表变得非常简单&#xff0c;无需复杂的绘图工具或专业的编程技能。在本文中&#xff0c;我们将讲解如何使用 Mermaid 来创…

【动态规划】买卖股票问题

1.一次买入&#xff0c;一次卖出 买卖股票1 1.明确dp[i][0] dp[i][1]含义 dp[i][0]:表示可能在前i天(包括第i天)不持有该股票,产生的最大收益 dp[i][1]:表示可能在前i天(包括第i天)持有该股票,产生的最大收益 2.递推公式 dp[i][0]可能在i天之前卖出&#xff0c;所以的dp[i]…

android获取sha1

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

理解并实现OpenCV中的图像平滑技术

导读 图像模糊&#xff08;也称为图像平滑&#xff09;是计算机视觉和图像处理中的基本操作之一。模糊图像通常是噪声减少、边缘检测和特征提取等应用的第一步。在本博客中&#xff0c;我们将重点介绍如何使用Python中的OpenCV库应用多种模糊技术。 理论概述&#xff1a; 基本…

【报告解析】OpenAI Sora视频模型官方报告全解析 | 效果,能力以及基本原理

省流版 1 核心数据处理将视频数据整合成一个一个的Patch&#xff0c;方便统一训练数据&#xff0c;利用扩散Transformer架构 2 功能效果除了可以实现基础的文生视频外&#xff0c;实际上还有非常惊艳的视频延展&#xff0c;视频编辑&#xff0c;视频连接等多种功能&#xff0…

Android 11.0 SystemUI禁用长按recent键的分屏功能

1.前言 在11.0的系统rom产品定制化中,系统对于多窗口模式默认会有分屏功能的,但是在某些产品中,需要禁用分屏模式,所以需要在导航栏中 禁用长按recent的分屏模式功能,接下来分析下相关分屏模式的实现 2.SystemUI禁用长按recent键的分屏功能的核心类 frameworks\base\…

算法--数论二

这里写目录标题 高斯消元高斯消元求线性方程组用途高斯消元的数学思想例题代码 二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 高斯消元 高斯消元求线性方程组 用途 这个…

VScode写LaTeX配置,实测有效

环境配置请看LaTeX环境配置-TexLive&#xff0c;实测有效http://t.csdnimg.cn/0txlL VScode写LaTeX配置 0.smatra pdf下载 如果使用外部pdf查看器&#xff0c;比如我用的sumatra pdf,官网是Sumatra PDF reader download page 下载对应版本&#xff0c;比如64位&#xff0c;下…

Pandas:DataFrame的完整指南【第82篇—DataFrame】

Pandas&#xff1a;DataFrame的完整指南 Pandas是Python中最流行的数据处理库之一&#xff0c;而其中的DataFrame对象是数据处理的核心。DataFrame为我们提供了一个强大而灵活的数据结构&#xff0c;使得数据的清洗、分析和可视化变得更加简便。在本文中&#xff0c;我们将深入…

【图论经典题目讲解】洛谷 P5304 旅行者

P5304 旅行者 D e s c r i p t i o n \mathrm{Description} Description 给定一个 n n n 个点&#xff0c; m m m 条边的有向图&#xff0c;求解 k k k 个点两两间最短路长度的最小值。 S o l u t i o n \mathrm{Solution} Solution 对于 k k k 个点&#xff0c;可以考虑二…

leetcode hot100爬楼梯

在本题目中&#xff0c;要求爬第n阶有多少种爬法&#xff0c;并且每次只能爬1个或者2个&#xff0c;这明显是动态规划的问题&#xff0c;我们需要用动态规划的解决方式去处理问题。动态规划就是按照正常的顺序由前向后依次推导。而递归则是从结果往前去寻找&#xff08;个人理解…

Android 9.0 禁用adb shell input输入功能

1.前言 在9.0的系统rom产品开发中,在进行一些定制开发中,对于一些adb shell功能需要通过属性来控制禁止使用input 等输入功能,比如adb shell input keyevent 响应输入事件等,所以就需要 熟悉adb shell input的输入事件流程,然后来禁用adb shell input的输入事件功能,接…