# 基于 RAG 实现智能问答 本教程以搭建一个产品助手智能体为例,说明如何使用扣子编程的知识库功能来实现产品资料问答场景。 ## 背景知识 扣子编程是一款用来开发新一代 AI Chat智能体的应用编辑平台,无论你是否有编程基础,都可以通过这个平台来快速创建各种类型的 Chat Bot,并将其发布到各类社交平台和通讯软件上。 ### 知识库介绍 扣子编程的知识库功能提供了简单易用的方式来存储和管理外部数据,让你的智能体可以与指定的数据进行交互。将数据上传到知识库后,扣子编程会自动将你的文档分割成一个个内容片段进行存储,并通过多种检索策略来检索最相关的内容来回答用户问题。 ### RAG 方案与应用 在大型语言模型时代,RAG (Retrieval-Augmented Generation 检索增强生成)指的是在回答问题或生成文本时,先从大规模文档库中检索相关信息,然后利用这些检索到的信息来生成响应或文本,从而提高回复内容的质量。 RAG 的两个关键阶段: * **检索阶段**:使用编码模型基于问题检索相关文档。 * **生成阶段**:使用检索到的上下文作为条件生成文本。 RAG 技术的应用可以很好地解决大模型的胡乱编造的问题,即让大模型在回答用户问题前先参考知识库中的相关内容,可极大抑制大模型的幻觉现象。 扣子编程的知识库功能支持上传外部数据,上传后可自动分段和编码,然后在智能体开发界面选择导入指定的知识库即可实现 RAG 对话。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/bc0b9e031d2f43c7948f1c0bf54d4fab~tplv-goo7wpa0wc-image.image) RAG 应用的高频场景包括虚拟人物生成、产品资料问答、QA客服问答、专业领域知识学习等。本教程以产品资料问答智能体为例,讲解如何从智能体场景分析到智能体搭建。 ## 产品资料问答场景 ### 场景概述 现代产品更新换代速度快,用户在使用产品时经常会有疑问,而且新产品的上市会伴随大量的信息和数据。利用RAG检索增强生成框架,我们能够将这些零散的信息整合成一个知识库。 通过这个知识库,用户能够快速获得到需要问题的答案,它的出现让用户不必再翻看厚重的说明书或漫无边际地搜索网络,省时又省力,极大地提升了用户体验。 #### **目标用户群体** 产品资料问答智能体的目标用户非常广泛,包括不限于普通消费者、产品销售人员、客服人员、以及那些对特定产品感兴趣的潜在购买者。通过问答系统,他们可以更深入地了解产品,加快决策的效率,例如: 1. 潜在消费者:想要了解产品特性、功能、用户评价等基本信息。 2. 现有用户:需要获得关于产品使用、故障排除、维护保养等更深层次的知识。 3. 客服人员:可以使用这个系统作为辅助工具,提高自己的工作效率和效果。 4. 市场研究人员:能通过问答内容了解消费者关注的焦点和产品的常见疑问,辅助产品改进和市场定位。 #### **场景价值** * 使用简单:用户只需简单输入关于产品的问题,系统就会从上传的产品手册、官网信息等资料中找到答案,就像网上聊天一样简单。 * 数据实时更新:企业可以不断上传最新的产品资料,保证用户能够获得最准确和最新的信息。 * 节省资源:减少了客服人员的工作压力,降低了人力成本,同时也提升了用户满意度和品牌形象。 ### 如何收集产品知识 要搭建这个产品资料问答智能体,我们首先需要从不同的地方收集产品资料,就像要写一本书一样,我们得有足够的背景信息。产品资料的来源途径大致有以下几种: * **官方资料:​**对于任何产品来说,最权威的资料通常来自其制造商或开发商。这包括产品的帮助手册、使用指导、官方网站上的FAQ(常见问题解答)等。这些资料详细介绍了产品的功能、使用方法、维护保养等重要信息。 * **新闻报道/媒体发布:​**新闻媒体对产品的评测、新功能的报道、产品发布会的新闻稿等,都是了解产品最新动态的好资料。 * **社交媒体/论坛:​**用户的评价、讨论和问答经常出现在社交网络和论坛上,虽然这些信息的权威性可能不如官方资料,但它们反映了真实用户的使用体验和市场反馈。 * **专业评测:​**有很多专业网站或杂志会对产品进行深入的评测,包括性能测试、对比分析等,这些都是构建知识库的宝贵来源。 * **线上商城的产品描述和用户评论:​**销售平台上的产品描述和用户留下的评价可以帮我们了解产品的市场表现和用户关注点。 * **云服务信息:​**如果产品是云服务或软件,那么开发者社区、API文档、在线教程等都是重要的信息渠道。 搜集到这些资料之后,我们会通过知识库的上传和处理流程来对知识处理和组织,让用户提的任何有关产品的问题都能在这个巨大的知识库中找到准确答案。 ### 如何写提示词(Prompt) 提示词 (Prompt) 是一种自然语言指令,告诉大语言模型执行什么任务。提示编写的越清晰明确,智能体的回复也会越符合预期。 以下是产品资料问答场景的人设与回复逻辑编写示例,更多关于提示词编写的信息可参考[提示词概述](https://docs.coze.cn/api/open/docs/guides/prompt)。 ```Plain Text # 角色 你是一款XXX产品的问答小助手。能够精确理解用户的问题,并从你的知识库中检索相关信息,进一步生成给用户的回复。 ## 技能 ###技能 1: 问题理解和检索 -理解用户的问题,并识别其关键信息。 -根据关键信息,对知识库进行检索。 ###技能 2: 回答生成 -基于检索到的信息,为用户生成准确、简洁的回答。 ##约束 -仅回答与产品相关的问题,不回答无关话题。 -尽量使用清晰简练的语言来回答用户的问题。 -整个回答过程中,始终以用户的需求为中心。 ``` ## 案例:飞连产品助手 本教程以一款办公安全产品[飞连](https://www.volcengine.com/product/feilian)为例,演示如何一步步搭建一个飞连产品问答助手。 ### 案例介绍 飞连是新一代数字化办公基建,帮助企业员工随时随地安全连接内部网络与应用。飞连的用户分为 IT 管理员和终端用户。不同的用户角色在使用飞连的功能和场景也不同,例如 IT 管理员关注各种功能的配置,而终端用户关注如何使用飞连连接公司内部网络和应用。飞连提供了完整的使用说明文档,然而这些文档内容量大,用户很难快速及时的找到所需要的内容。 为了解决飞连用户在使用产品时遇到的使用问题,我们可以通过扣子编程搭建一个飞连产品助手。 ### 步骤一:收集数据 第一步:确认信息源 为了解决用户使用飞连产品相关的问题,我需要收集飞连产品的使用资料,包括: * 使用手册:产品使用文档包括管理员使用手册、客户端用户使用手册、故障排查手册等 * 在线反馈:收集的用户反馈问题列表 * 产品信息:官网上的产品信息 第二步:收集数据和内容整理 | **类别** | **内容** | **来源** | | --- | --- | --- | |
使用指导 | 管理员手册 | 线上文档:https://www.volcengine.com/docs/6427/158878 | | | 客户端手册 | Word 文档 | | | 故障排查手册 | Word 文档 | | | 常见问题 | Excel表格 | | 产品信息 | 产品介绍 | 产品官网:https://www.volcengine.com/product/feilian | | | 价格信息 | 线上文档:https://www.volcengine.com/docs/6427/129375 | ### 步骤二:创建知识库 对于不同的知识类型和内容存储方式,我们可以选择不同的知识库。在扣子编程中创建三个知识库,分别用于保存产品使用相关的内容、问题排查相关的内容。包括: * 产品信息知识库:文本格式,用于收集线上产品的基础信息 * 产品文档知识库:文本格式,用于保存功能使用文档、功能介绍文档 * 问题排查知识库:表格格式,用于添加常见问题,供问题排查使用 #### 手动采集网页数据:采集线上产品信息 飞连产品的官网页面上提供了产品优势、不同版本的能力支持情况,我们也可以将这些信息收录到知识库中。 产品官网页面上的信息很多,但我们只需要产品优势和不同版本支持的功能信息,这种情况下我们可以使用知识库的网页数据采集功能抓取指定的内容片段。 1. 登录[扣子编程](https://code.coze.cn/home)。 2. 在页面顶部选择目标工作空间,然后在左侧导航栏中单击**资源库**。 4. 在**资源**页面右上角,单击 **+资源** > **知识库**。 5. 选择**文本格式**,导入类型指定为**在线数据**,并单击**创建并导入**。 6. 选择**手动采集**。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/c9f2786de33f4fa2b2caf8a663db6903~tplv-goo7wpa0wc-image.image) 7. 根据页面提示安装扩展程序并授权。 8. 输入要采集内容的网页地址。 9. 根据页面提示,完成标注。 在弹出的页面,点击页面下方的**文本**按钮(图标⓵)开始选择要采集的内容(图标⓶),然后单击选定内容对应的**文本**按钮(图标⓷)。选择内容后,单击**查看数据**(图标⓸),确认内容无误后单击**完成并采集**上传数据。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/afb3ff992b444af6af69c892c9263708~tplv-goo7wpa0wc-image.image) 10. 设置**自动分段与清洗**,等待数据处理。 #### 自定义切分策略:添加功能使用文档 功能使用文档是常见的产品资料。通常一个功能文档会包含多个操作步骤或场景,这种情况下,你可以将这类的长文档内容进行分类和清洗,使用扣子知识库的自动分段规则精准拆分文档内容,保证回复的准确性。 以下图中的《VPN 配置最佳实践》文档为例,该文档中包含了4个 VPN 配置场景的说明内容。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/e2917b0c54f54eef9566d10e4988b241~tplv-goo7wpa0wc-image.image) 为了保证文档上传到知识库后可以按照场景进行拆分,我们在每个场景标题前手动添加了**###​**分隔符。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/3cf114042f7f4e698778aed9c29c0501~tplv-goo7wpa0wc-image.image) 接下来将该文档导入到文本格式知识库中: 1. 在**资源**页面右上角,单击 **+资源** > **知识库**。 2. 选择**文本格式**,导入类型指定为**本地文档**,并单击**创建并导入**。 3. 选择《VPN 配置最佳实践》word文档,等待内容上传后,单击**下一步**。 4. 选择**自定义**分段方式,分段标识符设置为`###`,长度设置为`2000`,然后单击**下一步**。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/7f3f870b0b5548dab8b62e875344068a~tplv-goo7wpa0wc-image.image) 5. 上传后,单击单元名称查看分段情况。可以看到每个场景都是一个独立的内容片段。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/80ecdf3bffd74a59b26bf60fa3ed5983~tplv-goo7wpa0wc-image.image) #### 表格类知识的构建:添加常见问题表格 扣子编程的知识库支持导入表格内容,你可以将沉淀的常见用户问题内容通过表格方式快速导入。 以如下一个常见问题表格为例,参考以下操作将这些常见问题导入到知识库中。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/413154bb96a94b6c94ab5ca5c0a1e7f5~tplv-goo7wpa0wc-image.image) 1. 在**资源**页面右上角,单击 **+资源** > **知识库**。 2. 选择**表格格式**,导入类型指定为**本地文档**,并单击**创建并导入**。 3. 上传已经准备好的常见问题文件,然后单击**下一步**。 4. 配置表格结构,你可以选择要展示的内容和索引字段。单击**下一步**。 本场景中选择将**问题描述**列的内容作为索引内容,即使用这一列来与用户输入的问题进行匹配。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/0132a67eb03c4935b8a606119e2dffde~tplv-goo7wpa0wc-image.image) 5. 预览上传的内容,确认无误后单击**下一步**。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/112eb1144a3f44e8b4e713cbe8e0a0f0~tplv-goo7wpa0wc-image.image) 6. 等待数据上传,上传完成后可以查看到所有的常见问题。默认每一行的内容都一个独立的内容片段。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/37396e0a93b049cf9ed5b32aa7c4ef6c~tplv-goo7wpa0wc-image.image) ### 步骤三:搭建与使用智能体 完成知识库内容上传后,就可以搭建产品资料助手智能体了。 1. 在**项目开发**页面单击**创建智能体**。 2. 输入智能体名称和说明,然后单击**确定**。 完成智能体创建后,默认进入到智能体的编排页面。 3. 在**人设与回复逻辑**中输入提示词。 ```Plain Text # 角色 你是飞连产品的问答小助手。能够精确理解用户的问题,并从你的知识库中检索相关信息,进一步生成给用户的回复。 ## 技能 ###技能 1: 问题理解和检索 -理解用户的问题,并识别其关键信息。 -根据关键信息,对知识库进行检索。 ###技能 2: 回答生成 -基于检索到的信息,为用户生成准确、简洁的回答。 ##约束 -仅回答与产品相关的问题,不回答无关话题。 -尽量使用清晰简练的语言来回答用户的问题。 -整个回答过程中,始终以用户的需求为中心。 ``` 4. 找到**知识 >文本**配置区,单击**+​**添加已经创建的知识库。 5. 在右侧调试面板中,输入一个问题查看智能体回复效果。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/25d556c92dcf4976a8cb371271c7570c~tplv-goo7wpa0wc-image.image) 如果回复内容不符合预期,展开**运行完毕**文本框,查看是否是知识库内容召回(recall slice)的不正确,可以根据知识库的召回情况调整知识库内容。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/7e542dd6ebc746849b6fd01ae18cde14~tplv-goo7wpa0wc-image.image) 6. 调试成功后,可单击**发布**将智能体发布到选择的渠道中,分发给其他用户使用。 ![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/c18ad741795d46c585775736f00acacb~tplv-goo7wpa0wc-image.image)