### **需求背景**
LLM 和信息检索技术已经成为提高客户服务效率的关键工具。其中**检索增强生成(Retrieval-Augmented Generation,RAG)模型融合了知识库检索和自然语言生成的能力**,可以帮助客服团队基于现有知识库快速回答客户咨询,提高工作效率和客户满意度。
然而,在实际应用中,业务团队往往面临着 IT 资源限制、传统软件工程思维以及高层决策者的疑虑等障碍。具体来说:
1. 业务团队通常无法调动大量的 IT 资源来支持构建 RAG 系统;
2. 传统软件工程思维往往将准确度视为上线的关键指标,导致对准确度要求过高;
3. IT 立项阶段的价值说明难以说服高层决策者。
为了解决上述问题,我们尝试改变思维方式:
1. 寻求开箱即用的 RAG 解决方案,降低实施成本和技术门槛;
2. 将 RAG 定位为客服人员的智能助手(Copilot),帮助减轻工作负担,减少重复劳动,提高工作效率;
3. 采用低成本、低风险的方式开始使用生成式 AI,逐步积累经验和效益证据。
因此,如果能够找到一种启动成本低、依赖路径少、不侵入现有工作流程的生成式 AI 解决方案,将更有利于在实际环境中部署和使用。
### **为什么选择 Amazon Bedrock 知识库**
1)Knowledge Base for [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail)(后续简称 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库)是一项完全托管的功能,可帮助您**实施从数据摄取到检索和提示增强的整个 RAG 工作流程**。
2)它可以将来自公司私有数据源的上下文信息提供给基础模型和代理,以**提供更相关、更准确、更定制的响应**。
3)您可以使用检索 API 从知识库获取相关结果,并使用 Amazon RetrieveAndGenerate API 直接将检索到的结果用于增强提示并生成响应。
4)从知识库检索到的所有信息均附有引文,可提高透明度并最大限度地减少幻觉。
在客服工作台方面,如果您正在使用 Zendesk,那么本文提到的定制的 Zendesk App 结合 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库可以让您的团队在半天内拥有一个基于您自己的知识库的解决方案,并帮助提供基于工单的自动回复内容。
### **方案工作流和效果**
#### **工作流说明**
1. 根据工单内容使用 Amazon Bedrcok 中的大语言模型进行自动分类。
2. 利用基于上下文的 RAG(检索增强生成)能力生成回复内容。
3. 根据第一步的分类精确修改 RAG 的内容,使其内容更加准确。
4. 提供翻译功能,帮助不同区域的客服人员快速理解内容。
5. 利用知识库元数据过滤,结合标签等信息实现精准知识召回。
同时,记录客服使用过程中的信息,帮助建立后期反馈机制并优化:
1. 记录工单处理详细日志,包括使用情况和需要改进的地方。
2. 利用 [Amazon OpenSearch Service](https://aws.amazon.com/cn/opensearch-service/?trk=cndc-detail) Dashboard 构建分析仪表板,帮助客户分析并持续优化知识库。
![image.png](https://dev-media.amazoncloud.cn/a40947ac3ecc405684e6ecd66831feb3_image.png "image.png")
### **客服侧 Zendesk App 功能**
Zendesk 是一个客户服务平台,通过使用 Zendesk,您可以处理来自各个渠道的客户消息。Zendesk 可以通过 App 来扩展其能力。**本方案中,定制的 Zendesk App 是集成 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库的的一个入口**。其他客服工作台或者应用入口完全可以参考借鉴本文提到的方案。
为了加速客户团队采纳生成式 AI 能力,Account Team 与客户客服产品团队紧密配合,基于 Zendesk App Framework 开发了一个 Zendesk 扩展 App,该 App 提供交互界面供客服人员使用。App 源码已经托管在 Github 开源,大家可以自行 fork 修改使其更适合您的应用场景。当然您也可以下载已经打包好的 zip 版本直接安装到您的 Zendesk 客服工作台中(全部可以通过 Zendesk 管理员在界面上完成,只需要上传 zip 包并点击 “install” 按钮完成安装)。
> **Github**
>
> https\://github.com/nimysan/amazon-bedrock-zendesk-app?trk=cndc-detail
具体安装步骤可以参考下方链接:
> https\://developer.zendesk.com/documentation/apps/getting-started/uploading-and-installing-a-private-app/?trk=cndc-detail
安装完成后,在 Task Bar 侧面栏找到我们的 App 并展开,如下:
App 主要提供工单分析、智能回复内容生成、反馈收集功能,常见操作流程如下:
1. 根据工单内容进行意图识别(区分该工单是售前咨询、故障投诉等细分场景)。
2. 自动读取当前工单,获取标题和内容信息。
3. 通过点击 “AI Suggest” 按钮调用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库获取生成式 AI 回复内容,并展示该回复相关的引用文档和 Chunk 等信息,供客服参考(步骤1、2可以根据需要多次进行)。
4. 根据第一步识别的意图,改写内容。例如,对于售前座席,可以适当提供推荐能力;对于售后座席,确保回复内容的语气更具人文关怀,符合当地语言的表达方式。
5. 针对咨询本身和回复内容提供多语言翻译功能,帮助不同区域客服人员快速理解(基于 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 中的[大语言模型](https://aws.amazon.com/cn/what-is/large-language-model/?trk=cndc-detail)提供翻译能力)。
6. 获取工单标签如区域、产品型号等,构建元数据过滤器,结合 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库元数据过滤能力实现精准召回。
7. 客服点击 “Use it” 按钮,将生成的内容自动复制到回复窗口,并记录此次调用日志。
8. 如果客服认为生成的内容尚待改进,可以点击 “Need Improve” 按钮提交反馈。
每一次客服人员采纳自动回复的内容或者点击 “Need Improve”,当前 “ticket” 的咨询和关联的文档详细信息会记录到日志中。这些日志可以导出供客服团队进一步优化文档。
#### **使用一个月后效果反馈**
1. 上线第一周后进行统计,经过客服团队的实际使用,有 **24%** 的工单可直接采用生成的内容回复。
2. 上线第三周后,经过持续调优,在工单辅助处理阶段增加工单意图识别和针对不同意图进行 Prompt 的优化调整,首回场景直接采用自动生成内容来回复工单的比例**大于了60%**。
3. 后续通过优化 Prompt 和引入历史记录分析, 可以持续提高直接采纳比例。
### **架构参考**
![image.png](https://dev-media.amazoncloud.cn/22d3024811b34a18a0c075813c1517a7_image.png "image.png")
1. App 提供客服工作人员交互入口。
2. [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Proxy Server 提供调用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Knowledge Base RetrieveAndGenerate 接口获取 RAG 响应。
3. 将不同意图对应的 Prompt 保存在 [Amazon DynamoDB](https://aws.amazon.com/cn/dynamodb/?trk=cndc-detail) 中,提供更为精细的生成式 AI 响应。
4. 调用 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 中的大语言模型提供翻译和回复改写能力。
5. [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库文档源选择 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 服务。
6. 向量数据库选择 Amazon OpenSearch Serverless,并且我们将客服使用日志也存入同一个库。同时基于 Amazon OpenSearch Serverless 的 Dashboard 提供反馈分析能力。
#### **安装部署**
1.初始化 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库并导入文档。
2.部署一个 BedrockProxy 的 http 服务,可以使用 Amazon CloudFormation 一键部署或者自行下载,并以您习惯的方式部署。 Template 模版在下方。
> **下载链接**
>
> https\://github.com/nimysan/AIServer?trk=cndc-detail
>
> **Template模版**
>
https\://github.com/nimysan/AIServer/blob/main/cloudformation/template.yaml?trk=cndc-detail
3.下载 Zendesk App 包,下载链接如下:
https\://github.com/nimysan/amazon-bedrock-zendesk-app/releases/tag/1.0.0?trk=cndc-detail
4.以管理身份登录 Zendesk 管理控制台,上传并安装该 App。具体操作细则可参考:Installing the app in Zendesk Support。
> **Installing the app in Zendesk Support**
>
> https\://developer.zendesk.com/documentation/apps/build-an-app/build-your-first-support-app/part-5-installing-the-app-in-zendesk-support/?trk=cndc-detail
整体部署过程大概可以在一个半个工作日时内完成。
当您的客服登录 Zendesk 服务台并打开一个 “ticket” 后,在右边的侧面工作栏就可以看到这个 App,单击打开就可以开始愉快地享受生成式 AI 的高效率回复了。
### **使用实践**
#### **Embedding 模型选择**
Amazon Text Embeddings V2 是一款轻量级、高效的模型,非常适合不同维度的高准确度检索任务。该模型支持灵活的嵌入大小(256、512、1,024),并优先维护较小维度的准确度,有助于在不影响准确度的前提下降低存储成本。当将维度从1,024减少到512时,Amazon Titan Text Embeddings V2 可保留大约99%的检索准确度;当将维度从1,024减少到256时,该模型可保留97%的准确度。
此外,Amazon Titan Text Embeddings V2 还包括预训练中对100多种语言的多语言支持,以及用于提高测量向量相似度的准确度的单位向量标准化。
#### **Zendesk 如何安全访问 Amazon Bedrock**
![image.png](https://dev-media.amazoncloud.cn/5a54c5dad80e4f72ba730f4c9460b87b_image.png "image.png")
前端 Zendesk App 不保存 Token 的值。真实的 Token 值存储在 Zendesk proxy server 侧,当 App 发一起一个远程访问的时候,经过 proxy server 替换 Token 占位符获得真实 Token 值。
设置细节参考:Zendesk App 如何安全地访问外部接口。
> **Zendesk App 如何安全地访问外部接口**
>
> https\://developer.zendesk.com/documentation/apps/app-developer-guide/making-api-requests-from-a-zendesk-app/?trk=cndc-detail
#### **使用 Amazon Bedrock 知识库的 metadata filter 能力**
对于面向全球市场的企业,其客服团队通常需要处理来自不同国家、不同渠道和不同产品的各种咨询。这些咨询所依赖的知识库并不完全相同,比如不同国家的促销信息或某些国家特有的产品型号标准。如何在一个统一的知识库中提供精准的查询和响应能力,是企业亟需解决的问题。
[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库的元数据过滤功能可以有效地解决这一问题。该功能允许用户在执行查询前,通过指定包含或排除特定文档的元数据属性,来缩小搜索范围,确保生成的响应更加贴近查询需求。
具体来说,用户可以在数据引入时为每个文档定义自定义的元数据属性,包括布尔值、字符串、小数和整数等数据类型。在查询时,用户可利用8种常见的关系运算符,如等于、不等于、大于、小于等,对这些元数据属性进行过滤。
例如,对于“如何申请理赔”这样的查询,用户可以应用过滤器,仅检索与特定国家相关的文档,从而确保生成的响应更加准确和相关。这种细粒度的元数据过滤能力使得 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库能够满足面向全球市场的差异化知识管理需求,提高客服效率和客户体验。
元数据过滤功能参考下方链接:
> https\://aws.amazon.com/about-aws/whats-new/2024/03/knowledge-bases-amazon-bedrock-metadata-filtering/?trk=cndc-detail
在我们的场景下,Zendesk App 会提取当前 “ticket” 的 “ticket_brand”、“ticket_channel” 等标签,并组装查询 “filter”。
![image.png](https://dev-media.amazoncloud.cn/3b6d89155bab4b20ba75d8ff37969782_image.png "image.png")
#### **处理长度超过1,000字的输入**
根据 KnowledgeBaseQuery 接口文档描述,输入 text 不能超过1,000字。当前针对 ticket 内容超过1,000字的情况,我们将操作分为两步:
1. 采用 LLM 压缩,将文本内容先压缩到1,000以内。
2. 压缩后的内容作为输入做 KnowledgeBaseQuery。
> **KnowledgeBaseQuery**
>
>https\://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_KnowledgeBaseQuery.html?trk=cndc-detail
压缩内容 PE 参考:
```
Compress the following content about customer services
inquiries into a 1000-character response, without including any explanatory phrases.
Just provide the condensed content directly. content is:{question}"
```
这种方式的缺点是一次建议需要调用两次 LLM 大模型,成本稍高,等待时间更长;优点是兼容各种渠道较长的 “ticket” 咨询。
#### **Use it 和 Need Approve 日志记录说明**
我们复用了 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) Knowledge Base 使用的 [Amazon OpenSearch Service](https://aws.amazon.com/cn/opensearch-service/?trk=cndc-detail) 服务存储客服使用日志,并基于此日志做一些分析。
日志存储的 Index 名称为:behavior_logs,记录了当前客服的账号、RAG 的输入和输出、当前引用的 KB 文档信息以及客服反馈的 Use It 和 Need Improve 等。
从日志中我们可以获取到:
1. 回答被采纳和要求 Improve 的次数比率。
2. 哪些文档被经常引用。
3. 当前知识库中的文档分布详情。
这些数据可以帮助客服团队持续优化知识库。
![image.png](https://dev-media.amazoncloud.cn/7095aa09abec450ba8a8b4d517d86c70_image.png "image.png")
根据日志的内容,可以创建如下的 dashboard 帮助分析 KB 使用情况。
![image.png](https://dev-media.amazoncloud.cn/f67e4c6e0fc944f58c593447eaef4c67_image.png "image.png")
当然您通过修改代码将日志存入不同的引擎中去。
### **文档入库的一些注意事项**
1. Embeddings 选用 Amazon Titan Text Embeddings v2,对于文档入库有更好的兼容性,当前实际测试中文、英语、日语都能够支持。
2. 由于当前阶段同步数据源的日志并没有显示同步成功或者失败的细节,我们可以制作基于 OpenSearch 的 dashboard,来显示当前在库的文档和 chunk 数量。
3. 不要在一次数据源同步操作中同时增加文档和删除文档,将在 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 中删除文档和数据源同步作为一次原子同步操作。
4. .csv、.excel、.doc 等格式文档请使用 UTF-8 编码。
5. 图片扫描类 PDF 暂不支持。
### **参考文档**
> **1.[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 知识库提供完全托管的 RAG 体验:**
>
> https\://aws.amazon.com/cn/blogs/china/knowledge-bases-now-delivers-fully-managed-rag-experience-in-amazon-bedrock/?trk=cndc-detail
>
> **2.Amazon Text Embeddings V2 是一款轻量级、高效的模型,非常适合不同维度的高准确度检索任务:**
>
> https\://aws.amazon.com/about-aws/whats-new/2024/04/amazon-titan-text-embeddings-v2-amazon-bedrock/?trk=cndc-detail
>
> **3.基于 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 自建生成式 AI 平台:**
>
> https\://aws.amazon.com/cn/blogs/china/self-built-genai-platform-based-on-amazon-bedrock/?trk=cndc-detail
>
> **4.Github for Zendesk App(提供下载安装包)**:
>
> https\://github.com/nimysan/amazon-bedrock-zendesk-app?trk=cndc-detail
>
> **5.[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 代理服务 Github 地址:**
>
> https\://github.com/nimysan/AIServer?trk=cndc-detail
> **生成式 AI**:前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。
![image.png](https://dev-media.amazoncloud.cn/0e441ee2ae214c649d85088e390c5c46_image.png "image.png")
![image.png](https://dev-media.amazoncloud.cn/8f04cab45bbe4bff97dff9dee2c28f8d_image.png "image.png")
![image.png](https://dev-media.amazoncloud.cn/14c68593c4de46ad916a754b2dd58ace_image.png "image.png")
![image.png](https://dev-media.amazoncloud.cn/102989a4f6ee4aab884dd2d772342439_image.png "image.png")