You need to enable JavaScript to run this app.
导航
场景开发
最近更新时间:2025.04.21 17:27:15首次发布时间:2025.04.21 17:27:15
我的收藏
有用
有用
无用
无用

RAG (Retrieval-Augmented Generation,检索增强生成)的核心思想是让大语言模型在生成回答或文本时能够动态地从外部知识库中检索相关信息。这种方法能够提高模型生成内容的准确性、可靠性和透明度,同时减少“幻觉”。
本文主要介绍 RAG 场景开发的 4 个步骤:意图分析、知识检索、重排序和知识问答。

前提

场景创建完成后是待启动状态,需要启动场景,待场景为运行中状态时可以进行场景开发。

操作步骤

  1. 登录云搜索服务控制台
  2. 在顶部导航栏,选择目标项目和地域。
  3. 在左侧导航栏选择 AI 搜索,查找并单击目标服务名称。
  4. 在左侧导航栏选择场景开发 > RAG 场景,然后查找目标场景卡片,再单击卡片中的场景开发

意图分析

说明

意图分析默认为关闭状态,关闭状态下将使用系统默认配置,开启可进行自定义配置。

通过大语言模型的能力对问题进行意图的分析,通过 “意图输出格式”、“指令调优”、“Few-shot 规则”,获取到问题中的关键特征。

配置项

说明

推理服务

选择已经创建完成的大语言模型推理服务,如果需要新的推理服务,可参考创建推理服务

模型

选择推理服务下关联的大语言模型。

API Key

选择已经创建的 API Key,如果需要新的 API Key,可参见创建 API Key

意图输出格式

通过设置关键词的提取思路,引导大模型精准检索外部知识库中的目标关键词。
示例:

  • 关键词:请求量
  • 提取思路:根据问题描述中的请求 QPS 计算请求量级别,请求量级别取值为较低、较高、中等

指令调优

通过设置调优规则来指导大模型抽取出正确的关键词,在运行时,会先判断指令调优关键词是否被命中(关键词是否在问题中出现),如果命中则会按照“指令要求”的内容对意图输出格式进行调优。
示例:

  • 关键词:请求量、读写量、QPS
  • 指令要求:如果指定 QPS 为 0~1000 则请求量为较低,如果 QPS 为 1001~5000 则请求量为中等,如果 QPS 为 5001 以上则请求量为较高,并添加到请求量中

Few-shot 规则

通过提供少量标注示例,引导大模型在有限数据下实现意图泛化、检索策略优化及生成内容结构化。

意图分析效果测试
在页面右侧输入 Query 可以进行效果测试。效果测试会展示意图分析的结果,以及命中的调优规则和 Few-shot 规则。
例如意图分析的调优规则为:
Image
Image
那么效果测试的展示内容如下:
Image
Image

知识检索

说明

知识检索默认为关闭状态,开启可进行自定义配置。

针对意图分析中获取到问题的关键词,支持通过 DSL 配置为这些关键词设置检索规则,同时还支持通过设置不同的权重,调整关键词在召回阶段的分数。

配置项

说明

DSL 算子

支持 TERMS、KNN、MATCH、INTERVALS、CUSTOM、RANGE 算子类型。

匹配类型

支持 MUST、SHOULD、MUST NOT 三种类型。

索引字段

选择需要应用的索引字段,支持多选。

说明

快速配置的索引内置两个字段,分别为 content 和 content_knn。

  • content:适用于除 KNN 之外的所有算子
  • content_knn:适用于 KNN 算子

参数配置

根据 DSL 算子的不同,参数配置也不同:

查询条件

  • 算子的通用使用方式:
    • 支持 Mustache 表达式作为查询输入,该表达式可引用输入问题(query) 和意图结果(intention)
      • 示例:
        • {{intention.key1}} # 意图识别的结果,其中 “key1” 为意图识别的关键字
        • {{query}} # 用户输入的问题
    • 支持直接输入常量
    • 支持使用内置函数,比如将意图结果经过内置函数处理后,生成结果数据作为算子的查询输入
  • 算子的差异化使用方式:
    • TERMS:会将查询输入转成 list
    • MATCH:会将查询输入转成 str
    • KNN:会将查询输入,自动进行 Embedding 计算得到向量,然后将结果向量进行相似度搜索
    • RANGE:不支持查询输入,通过参数来设置 lt/gt/lte/gte 的取值
    • CUSTOM:查询输入是自定义的 DSL

内置函数说明

函数

说明

any2str

将任意的内容转成 str,如果输入是 list 则以空格拼接,其他场景兜底使用 str(value)。
示例:{{#any2str}}{{intention.关键字}}{{/any2str}}

any2vec

将任意的内容转成 vector(基于 Embedding 服务),如果输入不是 str 则先使用 any2str 转换成 str,之后再转成 vector(对于处理异常,最好跳过 knn)。
示例:{{#any2vec}}{{query}}{{/any2vec}}

any2list

将任意的内容转成 list,如果输入不是 list 则先调用 any2str 转成 str,然后返回 [str]。
示例:{{#any2list}}{{intention.关键字}}{{/any2list}}

range_money

意图结果的金额规范化。
示例:{{#range_money}}{"get_left":"False","patterns":[],"query":"{{intention.关键字}}"}{{/range_money}}
参数说明

  • get_left:必选,True 表示取区间 [left, right] 的左值即 left;反之 False 取值为 right
  • query:必选,函数处理的查询内容
  • patterns:可选,精确定位到查询内容中的(金额/日期)前缀
{{#range_money}}{"get_left":"False","patterns":["花费"],"query":"花费50元以下"}{{/range_money}}  # 返回 50
{{#range_money}}{"get_left":"True","patterns":["销售额"],"query":"销售额在100元到200元之间"}{{/range_money}}  # 返回 100

range_date

意图结果的日期规范化。
示例:{{#range_date}}{"get_left":"False","patterns":[],"query":"{{intention.关键字}}"}{{/range_date}}
参数说明

  • get_left:必选,True 表示取区间 [left, right] 的左值即 left;反之 False 取值为 right
  • query:必选,函数处理的查询内容
  • patterns:可选,精确定位到查询内容中的(金额/日期)前缀
# 假设当前时间为2025/05/01
{{#range_date}}{"get_left":"True","patterns":[],"query":"去年10月1号至今"}{{/range_date}}  # 返回 2024/10/01
{{#range_date}}{"get_left":"True","patterns":[],"query":"今年2月1号到现在"}{{/range_date}}  # 返回 2025/02/01
{{#range_date}}{"get_left":"True","patterns":[],"query":"今年1号至今"}{{/range_date}}  # 返回 2025/01/01

any2number

将给定的值转换为数字(包括整数、小数、分数等各类数字)。
示例: {{#any2number}}{{query}}{{/any2number}}

{{#any2number}}123{{/any2number}}  # 返回 123
{{#any2number}}3.14{{/any2number}}  # 返回 3.14
{{#any2number}}一百二十三{{/any2number}}  # 返回 123
{{#any2number}}abc{{/any2number}}  # 返回 0

召回数量
设置知识检索阶段返回的文档数量。

说明

建议召回数量调大一些,这样可以获取到更多的召回数据,方便后续进行重排序和知识问答。

知识检索效果测试
在页面右侧输入 Query 可以进行效果测试。效果测试会展示召回结果和 DSL 语句。
Image
Image

重排序

说明

重排序默认为关闭状态,开启可进行自定义配置。

将知识检索阶段的召回结果输入到重排序模型,进行语义级重排序,输出得分最高的 Top_N 的文档。

配置项

说明

推理服务

选择已经创建完成的重排模型推理服务,如果需要新的推理服务,可参考创建推理服务

模型

选择推理服务下关联的重排序模型。

返回数量

设置重排序后保留的文档数量。

查询模版

Rerank 模型在 rerank 操作时接受的 query 参数,配置查询模版后,可以在 rerank 操作前根据模版渲染出 query 信息(可以使用 {{intention.xxx}} 引用意图分析的输出内容,也可以用 {{query}} 直接引用原始问题,支持 mustache 语法)。可选配置,如未配置则默认使用问题本身作为 query。

文档模版

Rerank 模型在 rerank 操作时接受的 document list 参数,配置文档模版后,可以在 rerank 操作前根据模版渲染出 document list 信息(可以使用 {{document.xxx}} 引用知识检索阶段获取到的 document 信息,可以使用 {{intention.xxx}} 引用意图分析的输出内容,也可以用 {{query}} 直接引用原始问题,支持 mustache 语法)。可选配置,如未配置则默认使用知识检索阶段输出的 document json 序列化结果作为 rerank 的 document list 参数。

重排序效果测试
在页面右侧输入 Query 可以进行效果测试。效果测试会展示重排序后的结果。
Image

知识问答

在知识问答环节,经过重排序模块筛选的相关文档和用户问题作为输入数据,被输送至大语言模型。大语言模型基于此对输入数据进行语义分析,将检索文档的知识与用户问题的语义信息相融合,构建符合自然语言逻辑的文本,输出高质量、有针对性的结果,从而有效解答用户的问题。

配置项

说明

推理服务

选择已经创建完成的大语言模型推理服务,如果需要新的推理服务,可参考创建推理服务

模型

选择推理服务下关联的大语言模型。

API Key

选择已经创建的 API Key,如果需要新的 API Key,可参见创建 API Key

Prompt

系统提供了默认 prompt,也可以根据实际对话需要,给出更加具体的回答要求。
默认 prompt 为 “你是一个智能问答 AI 机器人”。

拼接邻近文本片数量

为召回重排后的结果拼接邻近文本片,合理设置拼接相邻文本片的数量,既能保证信息的完整性,又能提升语义的连贯性。这样能够让模型获取更丰富的信息,进而生成更连贯、高质量的文本。
数量可选范围 0-5。

多轮对话

基于历史对话对本轮问题进行改写,使其具备更完整的语义信息,检索更准确。

注意

多轮对话会增加检索时长和额外的 Tokens 消耗。

知识问答效果测试
Image
场景开发配置完成,点击左上角进行保存