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

news2024/10/5 13:04:53

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.coloradmin.cn/o/1860251.html

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

相关文章

Cesium--旋转3dtiles

以下代码来自Cesium 论坛:3DTileset rotation - CesiumJS - Cesium Community 在1.118中测试可行,可直接在Sandcastle中运行: const viewer new Cesium.Viewer("cesiumContainer", {terrain: Cesium.Terrain.fromWorldTerrain()…

零基础小白应该如何安装Python?(包含Windows、MacOS、Linux)

1. 安装前的准备工作 在安装Python之前,我们需要了解以下几个问题: 确保计算机连接到互联网确认操作系统版本(Windows、MacOS、Linux)决定安装Python的版本(建议安装最新的稳定版本) 2. 在Windows上安装…

docker技术的说明

根据学习网站整理:Docker 10分钟快速入门_哔哩哔哩_bilibili 小白也能看懂的容器科普说明_哔哩哔哩_bilibili 1.虚拟机,需要模拟硬件系统、运行整个操作系统,但体积臃肿,内存占用较高,程序的性能也会受到影响。 2.…

无中心化崛起:Web3对传统互联网的冲击与重构

随着Web3技术的兴起,传统互联网面临着前所未有的挑战和重构。本文将深入探讨Web3的无中心化特性如何对传统互联网产生冲击,以及其可能带来的重大影响和未来发展趋势。 1. 传统互联网的局限与问题 传统互联网,通常称为Web2,主要依…

Go 如何使用指针灵活操作内存

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Vue3整合Tailwindcss实现渲染动态类

创建项目 pnpm create vite整合Tailwindcss 安装依赖: pnpm install -D tailwindcss postcss autoprefixer生成配置文件: npx tailwindcss initpostcss.config.js export default {plugins: {tailwindcss: {},autoprefixer: {},}}tailwind.config.j…

【产品经理】订单处理10-分配快递策略

本次主要讲解下在订单处理过程中分配快递的策略以及分配快递中需要用到的设置。 一、建立快递档案 在ERP系统中,需要建立快递档案,设置所属快递、快递的服务类型、支持的打印模版以及快递在各个平台的电子面单支持情况。 二、仓库绑定快递 仓库需要设…

golang 实现继承方式

经常使用java或c同学应该比较了解纯面向对象,继承、接口、封装等特性,在go中并没有特别显示的表达出来,但是go隐含是支持的,只是支持的方式不一致,可以说go的方式更加灵活,go语言精髓是组合机制&#xff0c…

一口气安装【Python】教程

浏览器搜索python,或者直接跳转网址。 https://www.python.orghttps://www.python.org/ 找到想下载的版本 根据自己电脑下载相应的版本 自定义安装 下一步 修改路径,然后点击安装 等待一会,喝个饮料 点击关闭 安装成功 安装结束

CEWEY C9自动猫砂盆测评:千元级安全实用稳定输出,解放铲屎官双手!

最近邻居姐姐成为新晋铲屎官,猫咪的吃喝还好,因为是打工人每天要早出晚归,铲屎这项不能等待的任务就让她很苦恼,猫砂盆太脏猫咪要么憋着不上要么乱拉乱尿,搞得小姐姐身心俱疲。看着她日渐憔悴的脸色,我这个…

软考中级复习过程

中级软考复习过程 先上成绩截图 ~~~~ 总结一下自己的软考中级备考过程,个人备考的是软件设计师,首先对于软考中的大部分内容其实我都学过的,只是有些内容确实会忘记,我把整个备考的过程分为前后两个阶段。 ~~~~ 前期阶段&#…

复分析——第7章——ζ 函数和素数定理(E.M. Stein R. Shakarchi)

第7章 ζ函数和素数定理 Bernhard Riemann, whose extraordinary intuitive powers we have already mentioned, has especially renovated our knowledge of the distribution of prime numbers, also one of the most mysterious questions in mathematics. He has tau…

如何在 Odoo 17 库存模块中进行质量控制

质量控制是确保制造产品质量符合最终要求的关键步骤。有效的质量控制能够提高客户满意度。在生产过程中,质量检测可以在多个环节进行,以便及时发现并解决问题。不同的行业采用的质量控制技术可能有所不同。 在商业尤其是制造业中,保证产品质量至关重要。一个产品需要经过多次…

百度地图使用任意图片旋转任意角度作为地面贴图

公司项目有个需求是要在地图上贴个航拍的照片做出类似卫星地图的效果,但是只有一张图片而且可以随时替换,也不好做瓦片地图,而且照片的角度可以任意旋转。 要实现这个功能需要解决以下问题: 百度地图怎么贴图片图片角度如何旋转 …

el-dialog使用::v-deep()穿透设置样式不生效,解决办法亲测有效!

场景&#xff1a; <el-dialogv-model"dialogVisible"width"800px":before-close"beforeClose"append-to-body:close-on-click-modal"false"title"增加文档"><template #footer><div style"text-align:c…

开发大模型应用,到底使用RAG还是微调?我们应该从哪些方面考虑?

现在基于大模型开发应用时&#xff0c;相信很多人都有这种疑问&#xff0c;到底对大模型进行微调还是外接RAG呢&#xff1f;因为两者在一定层面上有很多相似的地方&#xff0c;下面让我给大家从各个层面进行分析&#xff0c;结合具体的业务场景&#xff0c;看哪种方式更适合你的…

【OnlyOffice】 桌面应用编辑器,版本8.1发布,PDF编辑器、幻灯片版式、改进从右至左显示、新的本地化选项等功能,快来体验吧

继 ONLYOFFICE 文档 8.1 发布后&#xff0c;适用于 Linux、Windows 和 macOS 的 ONLYOFFICE 桌面应用程序最新版本也已推出。它具有在线套件的最主要功能&#xff0c;例如功能齐全的 PDF 编辑器、演示文稿中的幻灯片版式、改进的 RTL 支持、新的本地化选项等。 目录 ONLYOFFICE…

【Unity Android】Unity链接安卓手机调试

一、物理连接手机 1.USB数据线链接 2.打开开发者模式 大部分手机在手机设置->系统管理->关于手机->软件版本型号中&#xff0c;点击7次以上&#xff0c;来开启系统管理中的开发者模式选项。 3.打开USB调试 打开开发者模式后&#xff0c;开启USB调试 二、Unity中…

Hi3861 OpenHarmony嵌入式应用入门--LiteOS Timer

LiteOS Timer&#xff08;定时器&#xff09;是LiteOS操作系统中的一个重要组件&#xff0c;它提供了一种基于软件模拟的定时器功能&#xff0c;用于满足在硬件定时器数量不足时的定时需求。 软件定时器&#xff1a;基于系统Tick时钟中断&#xff0c;由软件来模拟的定时器。当经…

表单(forms)

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在app1文件夹下创建一个forms.py文件&#xff0c;添加如下类代码&#xff1a; from django import forms class PersonForm(forms.Form): first_na…