AI大模型企业应用实战(23)-Langchain中的Agents如何实现?

0 前言

这将所有可用的代理按照几个维度进行分类。

预期模型类型

用于聊天模型(接收信息,输出信息)或 LLM(接收字符串,输出字符串)。这主要影响所使用的提示策略。

支持聊天历史记录

这些代理类型是否支持聊天历史记录。如果支持,就意味着可以作为聊天机器人使用。如果不支持,则意味着它更适合单一任务。支持聊天记录通常需要更好的模型,因此早期针对较差模型的代理类型可能不支持聊天记录。

支持多输入工具

这些代理类型是否支持多输入工具。如果一个工具只需要单一输入,那么 LLM 通常更容易知道如何调用它。因此,早期几种针对较差模型的代理类型可能不支持它们。

支持并行函数调用

让 LLM 同时调用多个工具可以大大加快代理的速度,无论是否有任务需要通过这样做来协助。不过,LLM 要做到这一点要困难得多,因此有些代理类型不支持这一点。

所需模型参数

该代理是否要求模型支持任何附加参数。有些代理类型会利用 OpenAI 函数调用等功能,这就需要其他模型参数。如果不需要,则表示一切都通过提示完成。

何时应考虑使用该代理类型:

Agent TypeIntended Model TypeSupports Chat HistorySupports Multi-Input ToolsSupports Parallel Function CallingRequired Model ParamsWhen to Use
OpenAI ToolsChattools若使用的最新OpenAI model (1106+)
OpenAI FunctionsChatfunctions如果您使用的是 OpenAI 模型,或者是针对函数调用进行了微调并公开了与 OpenAI 相同函数参数的开源模型
XMLLLMAnthropic模型或其他擅长 XML 的模型
Structured ChatChat如果您需要支持具有多个输入的工具,并且正在使用不支持函数调用的模型
ReActLLM简化模型

来看看内置的主要agent类型:

1 OPENAI_FUNCTIONS

Openai函数调用型,某些模型(如 OpenAI 的 gpt-3.5-turbo 和 gpt-4)已经过微调,可以检测函数何时应该被调用,并响应应该传递给函数的输入。在 API 调用中,你可描述函数,并让模型智能地选择输出一个包含参数的 JSON 对象来调用这些函数。

OPENAI_FUNCTIONS代理旨在与这些模型配合使用。

2 ZERO_SHOT_REACT_DESCRIPTION

零样本增强生成型

from langchain.agents import (load_tools,initialize_agent,AgentType,
)
import os
os.environ["SERPAPI_API_KEY"] = "xxx"# 定义llm
class QwenTurboTongyi(Tongyi):model_name = "qwen-turbo"
llm = QwenTurboTongyi(temperature=1)tools = load_tools(["serpapi","llm-math"],llm=llm)
agent = initialize_agent(tools,llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True,
)
print(agent)
print(agent.agent.llm_chain.prompt.template)
agent.invoke("现在美国总统是谁?他的年龄除以2是多少?")

3 CHAT_ZERO_SHOT_REACT_DESCRIPTION

零样本增强生成型(对话),使用了chatmodel

tools = load_tools(["serpapi","llm-math"],llm=llm)
agent = initialize_agent(tools,llm,agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,verbose=True,
)
print(agent)
print(agent.agent.llm_chain.prompt.messages[0].prompt.template)
agent.invoke("现在美国总统是谁?他的年龄除以2是多少?")

4 CONVERSATIONAL_REACT_DESCRIPTION

对话增强生成型

from langchain.memory import ConversationBufferMemory
#记忆组件
memory = ConversationBufferMemory(memory_key="chat_history",
)tools = load_tools(["serpapi","llm-math"],llm=llm)
agent = initialize_agent(tools,llm,agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,memory=memory,#记忆组件verbose=True,
)
print(agent)
print(agent.agent.llm_chain.prompt.template)

agent.run("hi i am JavaEdge")

agent.run("what is my name?")

agent.run("有什么好吃的中国菜可以推荐给我吗?")

agent.run(input="我都没吃过!我名字的最后一个字母是什么?1998年的世界杯谁夺冠了?")

5 STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION

结构化对话生成增强型

from langchain.memory import ConversationBufferMemory
#记忆组件
memory = ConversationBufferMemory(memory_key="chat_history",return_messages=True,
)
tools = load_tools(["serpapi","llm-math"],llm=llm)
agent = initialize_agent(tools,llm,agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,memory=memory,#记忆组件handle_parsing_errors=True,verbose=True,
)
print(agent)
print(agent.agent.llm_chain.prompt.messages[0].prompt.template)
print(agent.agent.llm_chain.prompt.messages[1].prompt.template)

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化

  • 活动&券等营销中台建设

  • 交易平台及数据中台等架构和开发设计

  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化

  • LLM应用开发

    目前主攻降低软件复杂性设计、构建高可用系统方向。

参考:

  • 编程严选网

本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

智慧互联:Vatee万腾平台展现科技魅力

随着科技的迅猛发展,我们的生活正逐渐变得智能化、互联化。在这个信息爆炸的时代,一个名为Vatee万腾的平台正以其独特的魅力,引领我们走向一个更加智能的未来。 Vatee万腾,这个名字本身就充满了对科技未来的憧憬与期待。作为一家专…

[网络安全产品]---EDR

what EDR(Endpoint Detection and Response,端点检测和响应),这是一种技术或者说是解决方案,它记录端点上的行为,使用数据分析和基于上下文的信息检测来发现异常和恶意活动,并记录有关恶意活动的数据&…

vue2 antd 开关和首页门户样式,表格合计

1.首页门户样式 如图 1.关于圆圈颜色随机设置 <a-col :span"6" v-for"(item, index) in menuList" :key"index"><divclass"circle":style"{ borderColor: randomBorderColor() }"click"toMeRouter(item)&qu…

游戏AI的创造思路-技术基础-深度学习(1)

他来了&#xff0c;他来啦&#xff0c;后面歌词忘了~~~~~ 开谈深度学习&#xff0c;填上一点小坑&#xff0c;可又再次开掘大洞 -.-b 目录 1. 定义 2. 深度学习的发展历史和典型事件 3. 深度学习常用算法 3.1. 卷积神经网络&#xff08;CNN&#xff09; 3.1.1. 算法形成过…

Redis-主从复制的准备工作-准备三台redis服务器

文章目录 1、新建三个redis配置文件&#xff0c;用于定义每个服务的专属配置1.1、复制文件redis.conf到redis安装目录下1.2、关闭redis_common.conf中的 aof 功能1.1.1、新建 redis_6379.conf1.1.2、新建 redis_6380.conf1.1.3、新建 redis_6381.conf 2、启动三个服务器2.1、后…

Electron运行报错

安装&#xff1a; npm install --save-dev electron 1&#xff1a;报错&#xff1a; electron Unable to find Electron app at 2&#xff1a; ReferenceError: require is not defined in ES module scope, you can use importinstead 在ES模块作用域中没有定义ReferenceErr…

Python重拾

1.Python标识符规则 字母&#xff0c;下划线&#xff0c;数字&#xff1b;数字不开头&#xff1b;大小写区分&#xff1b;不能用保留字&#xff08;关键字&#xff09; 2.保留字有哪些 import keyword print(keyword.kwlist)[False, None, True, and,as, assert, async, await…

2023 联邦推荐系统综述

本博客结合2023年发表的综述文章&#xff0c;对近期一些联邦推荐文章进行总结&#xff0c;综述原文&#xff1a; SUN Z, XU Y, LIU Y, et al. A Survey on Federated Recommendation Systems[J]. 2023.https://doi.org/10.48550/arXiv.2301.00767 引言 最近&#xff0c;已有许多…

【linux网络(六)】IP协议详解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux网络 1. 前言2. IP协议报…

链家房屋数据爬取与预处理-大数据采集与预处理课程设计

芜湖市链家二手房可视化平台 成品展示 重点说明 1.数据特征数量和名称、数据量 数据特征数量&#xff1a;14&#xff1b; 名称&#xff1a;小区名、价格/万、地区、房屋户型、所在楼层、建筑面积/平方米、户型结构、套内面积、建筑类型、房屋朝向、建筑结构、装修情况、梯户…

(上位机APP开发)调用华为云命令API接口给设备下发命令

一、功能说明 通过调用华为云IOT提供的命令下发API接口,实现下面界面上相同的功能。调用API接口给设备下发命令。 二、JavaScript代码 function sendUnlockCommand() {var requestUrl = "https://9bcf4cfd30.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/60…

Springboot 整合 DolphinScheduler(一):初识海豚调度

目录 一、什么是 DolphinScheduler 二、DolphinScheduler 的特性 三、DolphinScheduler 核心架构 四、单机环境部署流程 1、下载安装包 2、上传至服务器&#xff0c;解压缩 3、单机启动 4、登录 dolphinscheduler UI 5、配置数据库【非必需】 &#xff08;1&#xff…

前端:Nuxt3 + Vuetify3 + Element Plus + 添加常用插件

想要开发一个网站&#xff0c;并且支持SEO搜索&#xff0c;当然离不开我们的 Nuxt &#xff0c;那通过本篇文章让我们一起了解一下。让我们一起来构建下 Nuxt3 集成其它插件 目录 安装 Nuxt3&#xff0c;创建项目 一、搭建脚手架 二、添加 Vuetify 3 2.1、安装 Vuetify 3 …

如何将一个web端程序打包成一个pc端程序(exe文件)?

如何将一个Web端程序打包成一个PC端程序&#xff0c;例如一个可执行的EXE文件&#xff0c;是许多开发者常见的需求。下面将详细解释如何使用Nativefier工具将Web端程序打包成PC端程序的具体步骤。 目录 下载并安装Node.js验证Node.js和npm的安装安装Nativefier使用Nativefier打…

革新校园环境:轻空间打造上海六十中学多功能气膜馆

在现代教育环境中&#xff0c;舒适、环保和多功能的建筑越来越受到重视。上海六十中学多功能气膜馆的建设正如火如荼地进行中&#xff0c;这个项目由轻空间&#xff08;江苏&#xff09;膜科技有限公司全力打造&#xff0c;将为学校师生带来全新的活动体验。 项目进展 自项目启…

量子计算的崛起:开启计算新纪元

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

基于SpringBoot小区物业智能卡管理设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

MySQL 外连接、内连接与自连接的区别?

引言&#xff1a;本文将深入探讨这些连接类型的概念、语法及其应用场景&#xff0c;帮助读者全面理解如何利用这些技术实现复杂的数据查询和分析。在数据库查询中&#xff0c;连接操作使得我们可以根据指定的关联条件&#xff08;join condition&#xff09;联合两个或多个表中…

昇思25天学习打卡Day01

实验结果 心得体会 趁着假期&#xff0c;跟谁官方实战营开始系统学习MindSpore深度学习框架。昇思MindSpore是一个全场景深度学习框架&#xff0c;旨在实现易开发、高效执行、全场景统一部署三大目标。其中易开发表现为API友好&#xff0c;调试难度低&#xff1b;高效执行包括…

C语言常用标准头文件

头文件的基础概念 在C的系列语言程序中&#xff0c;头文件&#xff08;通常扩展名为.h&#xff09;被大量使用&#xff0c;它通常包含函数、变量、结构体等的声明和定义&#xff0c;以及一些宏定义和类型定义。头文件的主要作用是为了方便管理和重用代码&#xff0c;它可以被多…