【LLM】Agent在智能客服的实践(AI agent、记忆、快捷回复 | ReAct)

note

内容概况:结合京粉app学习agent的实践

  • Agent架构:通过模型训练提升LLM识别工具的准确性;设计可扩展并安全可控的agent架构扩展业务能力。
  • 记忆:多轮对话应用中如何组织、存储和检索记忆来提升大模型对用户的理解。
  • 快捷回复:利用快捷回复做用户意图的路径规划,实现业务目标。

Agent落地具体场景,需要定制:

  • Prompt 模板中 few shot 中的内容。
  • function calling 中的外部工具定义。

注意事项:

  • 本质上所有的 Agent 设计模式都是将人类的思维、管理模式以结构化prompt的方式告诉大模型来进行规划,并调用工具执行,且不断迭代的方法。

未来展望:

  • 1、垂类领域用户意图的理解:结合垂类业务的特点,通过自然语言沟通交流的方式,更加精准更快速的识别用户的意图,模型上需要大量的真实可靠的业务数据来进行训练,机制上需要对Agent进行升级,多个更加专业的助理进行协作,例如multi Agent的应用。
  • 2、生成式推荐技术:对现有推荐系统进行技术变革,从召回、排序、重排固有的推荐链路演变成直接生成用户所需的内容或商品。
  • 3、成本效率:大语言模型虽然很强大,但是其应用也带来巨大的成本和效率上的考验,如何在垂类领域采用较小的模型实现大模型的效果,如何对模型推理加速,提高计算利用效率,降低机器成本,也是我们长期需要考虑和优化的地方。

文章目录

  • note
  • 一、LLM based agent实践
  • 二、实战1-AI Agent
    • 1. 工具识别
    • 2. Agent实现
      • (1)Agent的两阶段
      • (2)合理的架构
  • 三、实战2- 记忆
  • 四、实战3-快捷回复
  • 五、ReAct原理和实现
  • Reference

一、LLM based agent实践

某东客户端背景:一个助手帮助推客,随时解答用户问题、利用数据分析指导用户进行选品推广、提醒活动、经营指导、素材生成等。

Agent:进行规则、决策、执行。同时智能体拥有记忆、使用工具能力。

痛点:解决LLM对垂直场景专业知识不足、知识的时效性、容易出现幻觉等。

挑战:

  • 工具的识别:开源模型对于外部工具使用能力准确率有待提高
  • Agent架构:智能客服->智能创意->推荐系统->自动驾驶->智能机器人

二、实战1-AI Agent

1. 工具识别

  • system prompt:不稳定
  • 把工具训练到模型:利用ToolLLM框架提供的数据构建、模型微调、评测框架来增强对工具的使用能力

2. Agent实现

(1)Agent的两阶段

  • 最初agent实现,是基于langchain的agent来开发的
    • langchain的开发问题:过度封装、异步并发效率低、版本前后不兼容、核心功能难易控制,由于langchain是用python实现:解释性语言进行速度慢、并发处理能力较弱、适合做实验或小型应用。
    • 在ReAct范式上,结合内部组件、自研组件,融入了工具/接口的接入、自定义工具的编排、记忆模块、vearch向量检索、prompt引擎、流式回调函数、各模块的监控、用golang重写了agent架构等,提升了系统稳定性、高并发能力。
  • Agent分为2各阶段:
    • 初始化阶段:
      • 对环境信息的收集,包括用户的输入、历史记忆加载、工具的接入、prompt接入、模型的接入、流式/非流式回调接入,langchain中agent启动阶段很耗时。
      • 针对每轮用户的交互,agent需要初始化,采用agent复用的方式进行预加载,除了用户的输入、历史记忆,其他模块全部提前加载,提升效率
    • 迭代执行阶段:预处理模块、规划、后处理模块、执行
      • 预处理模块需要维护一个阶段状态(第几轮迭代)和数据的拼接处理(用户的输入+大模型回复+执行结果)。
      • 规划阶段主要是通过大模型推理阶段,这里需要预留对工具的解析模块,因为不同的模型对于工具的输入是不一样的。
      • 后处理模块是对模型规划的结果进行解析,有部分需要注意对模型规划的结果做区分,结束或调用工具,需要在这里进行流式和非流式的结果存储和返回,如果需要调用工具,就进入执行模块。
      • 执行阶段将工具的调用结果送入预处理模块进行下一轮的迭代,在模型的调用和工具的调用中都预设了自定义钩子,用户可以根据需求在自定义工具执行的任意阶段进行流式输出。

(2)合理的架构

(1)完全智能化架构:系统的运行完全依靠agent自主执行
在这里插入图片描述

(2)安全性架构:系统运行依靠提前编写的任务流,agent只做流程的选择和选择。
在这里插入图片描述

京粉智能推广助手的业务主要需求:

功能描述及解决方案依赖
知识问答京东联盟有很多针对推客的使用介绍、规则、常用问题。可以通过外挂知识库解决知识库
经营分析对于推客经营状进行分析,包括收入、客群画像、推广建议。可以通过联盟各种已有工具接口进行数据的接入。推查/用户画像/活动等工具接口
推广选品目标明确的(搜索iphone15 pro max)、目标模糊的(过年送长辈的礼物)、无目的对于推荐的商品,要有推荐理由。同步相似品牌多维度对比(佣金、价格、销量、评论等)分别简单任务和复杂任务。复杂任务可以通过特定的任务流实现商品接口/历史数据/同品相似品牌数据
文案生成对于选好的商品,帮助推客自动化生推广文案和分享链接转链工具
  • 从功能需求来看,既有简单任务,又有复杂任务,而且随着时间的推移,增加的任务会越来越多,同时业务的定制化内容越来越复杂,对Agent的难度会增加很多。
  • 为了平衡从业务、安全、成本、效率考虑,最终通过自定义任务流与agent自主决策相结合的方式,兼容了动态规划、自主决策执行任务流与业务的可定制化、可扩展性。

三、实战2- 记忆

对于多轮对话形式的大模型应用来说,上下文信息对于模型理解人类需求有很大的帮助,如果没有记忆,在多轮对话中,大模型的表现会比较割裂,长期的记忆也会让模型对用户的习惯、偏好有更好的认知

重点:

  • 模拟人类大脑记忆和检索方式,构建长/短期记忆
  • 多轮对话中的垂类领域知识的结构化记忆

技术方案:记忆的构建可以概括为理解、存储、删除和检索的过程。

  • 短期记忆:短期记忆的设计比较容易,包括短期滑窗多轮对话的方式和定长时间内的多轮对话都可以作为短期记忆,短期记忆要尽可能的存储细节信息,但是轮数要尽可能的少。
  • 长期记忆:将短期的记忆提取实体信息(通过NER抽取实体信息;通过LLM对缓存进行总结、压缩,按照记忆片段和时间戳进行向量表征并存入向量库中)
  • 垂类领域知识:比如京东的skuid,是一个数字类型,不代表任何语义信息,在前面的对话中可能会输出给用户某个skuid,如果短期记忆已被压缩成长期记忆,就会导致不包含任何语义信息的数字类型消失,我们可以通过自定义结构化信息存储的方式将这类信息与长/短时记忆进行融合存储和检索,这样在用户多轮次对话中就可以通过(“分析上一个商品”)从记忆中获取结构化的skuid来查找并分析该商品,而不是必须输入分析上一个商品的“skuid”才能够识别。
  • 检索时同时检索短时缓存记忆和向量库长时记忆检索(通过vearch实现)以及垂类领域知识,将三部分进行融合后,作为整体的记忆模块,节省记忆空间。

在这里插入图片描述

四、实战3-快捷回复

1.通过历史信息和用户的当前输入,利用大模型总结续写能力,生成一些用户可能继续输入的内容。

2.结合应用的功能预设一些常用问题。

3.重点:可以根据应用的业务目标,来规划用户使用路径图,使用户按照快捷回复的路径最终达成我们需要的业务目标,在实际业务中可以结合1、2点,既有用户想输入的,又有我们想让用户看到的功能。

在这里插入图片描述

五、ReAct原理和实现

Agent落地具体场景,需要定制:

  • Prompt 模板中 few shot 中的内容。
  • function calling 中的外部工具定义。

LLM agent第一文,发表于2022年10月(chatgpt还没出来),提出让大模型学会工具。在论文的开头作者也提到了人类智能的一项能力就是 Actions with verbal reasoning,即每次执行行动后都有一个“碎碎念 Observation”:我现在做了啥,是不是已经达到了目的。这相当于让 Agent 能够维持短期记忆。

EX:让孩子帮去厨房拿一个胡椒粉。

Action1:先看看台面上有没有;
Observation1:台面上没有胡椒粉,执行下一步;
Action2:再拉开灶台底下抽屉里看看;
Observation2:抽屉里有胡椒粉;
Action3:把胡椒粉拿出来。

在这里插入图片描述
重点:本质上所有的 Agent 设计模式都是将人类的思维、管理模式以结构化prompt的方式告诉大模型来进行规划,并调用工具执行,且不断迭代的方法。

(1)生成提示词。首先,将代码中预设好 ReAct 的提示词模板(格式为Quesion->Thought->Action->Observation)和用户的问题进行合并。得到的提示词是这样的。

  • 如果要针对自己的领域定制,需要将fewshot的内容替换,比如action可能有"Send message to someone",这里的send可能对应一个外部接口。

在这里插入图片描述
(2)调用大模型生成Thought+Action。 接下来将 few shot 提示词发给大模型。如果直接将上述提示词发给大模型,大模型生成将针对用户问题生成一堆 Thought,Action 和 Observation,但显然这里 Action 还没有展开,我们并不希望大模型输出 Observation。在代码里通过 Stop.Observation 来控制大模型遇到Observation后停止输出,于是大模型仅仅返回 Thought 和 Action,而不会把 Observation 给生成出来。

(3)调用大模型生成Thought+Action。 接下来将 few shot 提示词发给大模型。大模型仅仅返回 Thought 和 Action,而不会把 Observation 给生成出来。

(3)调用外部工具。拿到action后走function call,可以微调。

(4)生成Observation。api返回结果,还会将接口返回内容转换为自然语言输出,生成 Observation,然后将 Observation 的内容,加上刚刚的 Thought, Action 内容输入给大模型,重复第 2,3 步,直至 Action 为Finish 为止。

(5)完成输出。将最后一步的 Observation 转化为自然语言输出给用户。

Reference

[1] 京粉智能推广助手-LLM based Agent在联盟广告中的应用与落地
[2] Agent的九种设计模式(图解+代码)

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

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

相关文章

【微服务】服务注册与发现、分布式配置管理 - Nacos

概述 Nacos是阿里巴巴旗下的一个开源产品,目前市场使用率还是比较高的。在最初开源时,Nacos选择内部三个产品合并并统一开源,这三个产品分别是:非持久化注册中心(Configserver)、持久化注册中心&#xff0…

vue2接入高德地图实现折线绘制、起始点标记和轨迹打点的完整功能(提供Gitee源码)

目录 一、申请密钥 二、安装element-ui 三、安装高德地图依赖 四、完整代码 五、运行截图 六、官方文档 七、Gitee源码 一、申请密钥 登录高德开放平台,点击我的应用,先添加新应用,然后再添加Key。 ​ 如图所示填写对应的信息&…

网络基础 【HTTP】

💓博主CSDN主页:麻辣韭菜💓   ⏩专栏分类:Linux初窥门径⏪   🚚代码仓库:Linux代码练习🚚 💻操作环境: CentOS 7.6 华为云远程服务器 🌹关注我🫵带你学习更多Linux知识…

模拟算法(5)_数青蛙

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 模拟算法(5)_数青蛙 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 题目链接…

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,1-1

文件下载与邀请翻译者 学习英特尔开发手册,最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册,会是一件耗时费力的工作。如果有愿意和我一起来做这件事的,那么&#xff…

空域中低通滤波器和高通滤波器的互补关系——Unsharp masking的理论基础

空域中从一个单位冲激中减去一个低通核产生一个高通核。 对应地,频域中数字滤波器低通转高通可以通过1-低通高通实现。模拟滤波器不行。 从原始图像减去模糊图像称为Unsharp masking。这是Unsharp masking的理论基础。锐化的程度由这个正比例系数控制。

计算机网络(十) —— IP协议详解,理解运营商和全球网络

目录 一,关于IP 1.1 什么是IP协议 1.2 前置认识 二,IP报头字段详解 三,网段划分 3.1 IP地址的构成 3.2 网段划分 3.3 子网划分 3.4 IP地址不足问题 四,公网IP和私有IP 五,理解运营商和全球网络 六&#xff…

Linux 进程状态、僵尸进程与孤儿进程

目录 0.前言 1. 进程状态 1.1 定义 1.2 常见进程 2.僵尸进程 2.1 定义 2.2 示例 2.3 僵尸进程的危害与防止方法 3. 孤儿进程 3.1 介绍 3.2 示例 4.小结 (图像由AI生成) 0.前言 在上一篇文章中,我们介绍了进程的基本概念、进程控制块&#…

C语言自定义类型联合和枚举(25)

文章目录 前言一、联合体联合体的声明联合体的特点联合体和结构体内存布局对比联合体的大小计算联合体的实际使用样例礼品兑换单判断当前机器是大端还是小端 二、枚举枚举的定义枚举类型的声明枚举类型的优点枚举类型的使用 总结 前言 关于自定义类型除了我们常用的结构体&…

Python机器视觉:01- 利用列表和切片操作 - 做一个弧线和图片相交的mask区域

前言: Python的列表处理,在机器视觉中经常被用到,这里结合基本的概念机器视觉实践案例,成文如下: 本身将实现一个,弧线的mask填充:这个mask是我的一个天文项目的应用,目的在于将月…

实现Xshell与虚拟机中Linux服务器的连接(附常见错误解决)

前言 Xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 本文将介绍Xshell与虚拟机中Linux服务器连接…

Web APIs——Dom获取属性操作

1.变量声明 1.1以后声明变量我们优先使用哪个? const 有了变量先给const,如果发现它后面是要被修改的,再改为let 1.2 为什么const声明的对象可以修改里面的属性? 因为对象是引用类型,里面存储的是地址&#x…

自动驾驶核心技术:感知融合、规划决策、控制执行

1、前言 简单来说,实现自动驾驶需要解决三个核心问题:“我在哪?我要去哪?我该如何去?”能完整解决这三个问题就是真正的自动驾驶。 目前,自动驾驶汽车关键技术主要包括环境感知、精准定位、决策与规划、控制与执行、高精地图与车联网V2X以…

大学生就业招聘:Spring Boot系统的设计与实践

5系统详细实现 5.1 用户模块的实现 5.1.1 求职信息管理 大学生就业招聘系统的用户可以管理自己的求职信息,可以对自己的求职信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 求职信息管理界面 5.1.2 首页 用户登录可以在首页看到招聘信息展示也一些求职…

Flet介绍:平替PyQt的好用跨平台Python UI框架

随着Python在各个领域的广泛应用,特别是在数据科学和Web开发领域,对于一个简单易用且功能强大的用户界面(UI)开发工具的需求日益增长。传统的Python GUI库如Tkinter、PyQt虽然功能强大,但在易用性和现代感方面略显不足…

算法篇1:双指针思想的运用(1)--C++

一.算法解析 双指针,顾名思义就是两个指针,常见的算法中,我们可以看到两种: 1.对撞指针:一般用于顺序结构,也称为左右指针。 对撞指针从两端向中间移动。一个指针从最左端开始,另一个从最右端…

比较搜索难度曲线5s1-4和4s1

在行列可自由变换的条件下,平面上的5点结构只有34个,4点结构有16个 (A,B)---6*n*2---(0,1)(1,0) 让B全是0。当收敛误差为7e-4,收敛199次取迭代次数平均值。让隐藏层节点数n分别为10,15,20,25,30&#xff…

C(十四)while、for、do-while循环综合(一)

uu们,小弟我本科在读,文章我会一直坚持更新下去,包括但不限于C初阶、C进阶、数据结构、C、Linux、MySQL、项目、QT开发、各种算法(之后会持续更新),并且站在小白的视角尽可能通俗易懂地把这些写出来&#x…

【Android】获取备案所需的公钥以及签名MD5值

目录 重要前提 获取签名MD5值 获取公钥 重要前提 生成jks文件以及gradle配置应用该文件。具体步骤请参考我这篇文章:【Android】配置Gradle打包apk的环境_generate signed bundle or apk-CSDN博客 你只需要从头看到该文章的配置build.gradle(app&…

25重庆长安深蓝控制器开发面试经验 深蓝最常见面试问题总结

【面试经历】 秋招气氛组选手的第一场面试,9.17网申,9.24电话约面,9.26线上面试。问得很细,全长约1个小时 1. 自我介绍、项目介绍 2.项目细节,遇到了哪些困难;有没有PCB设计经验DC-DC芯片选型,电源噪声的原因、怎么消除、 3.画BUCK和BOOST拓扑图,讲原理 4.了解MCU的主…