浏览《RAG 实操手册》的更多内容,深入洞察分析当下的 RAG 解决方案

包含各类形状与符号的流程图,其中有蓝色对话框、问号等。
概述

答案生成是 RAG 解决方案的核心组件,它利用从目标企业数据源或文本语料库中检索到的信息,生成对用户查询的回复。

注意事项

模型参数

开源 LLM 名称后的数字代表模型的参数规模。例如,Granite 3.0 8B Instruct 是一款拥有 8B 词元参数的模型。您可以将参数理解为指挥家,它主导模型如何处理、理解输入数据并生成输出结果。参数可体现为权重或偏置,影响特定输入特征对生成输出的重要程度。

参数规模越大,模型的复杂度与适应性通常越高(这一点在不同架构中并非绝对成立,但在 Transformer 架构中基本适用)。参数规模更大的大语言模型能从数据中识别出更复杂的模式,从而生成更丰富、更精准的输出结果。但如同生活中的许多事物一样,这也需要权衡取舍。参数规模激增会带来更高的计算需求、更大的内存占用,还会增加过拟合的潜在风险。

模型类型:指令型、代码指令型与聊天型

聊天模式专为对话场景设计,而指令模式则针对特定领域的自然语言处理任务打造。

在聊天模式下进行微调,可帮助 LLM 生成更自然、连贯的回复,确保回复内容贴合用户需求且具有互动性。在指令模式下进行微调,可帮助 LLM 更好地遵循各类指令,生成准确且适配任务的输出结果。

模型设置

LLM 提供了多项设置,可用于配置回复的生成方式。

  • “temperature”(温度)设置用于控制模型回复的随机性。简而言之,temperature 值越低,模型的回复就越确定、越一致。对于 RAG 解决方案,建议设置极低的 temperature 值,理想值为 0。
  • “max_tokens / max_new_tokens”用于限制模型回复中使用的词元数量(1 个单词大致相当于 1.5 个词元)。解决方案开发人员需通过试验找到合适的数值,在答案完整性与信息冗余之间取得平衡;对于问答类 RAG 解决方案,100 通常是较为合理的限值。
  • 采样策略决定模型如何选择回复中的下一个词元。RAG 解决方案应采用贪婪采样策略,确保对提示的回复保持一致。

提示工程

首先,我们来探讨一些提示规则,从根源上提升生成效果。

规则 1:从简入手

请勿先编写冗长的提示,再进行测试。

例如,请勿从如下冗长的提示开始:

-   您在标普 1000 指数成分股中的一家大型电子公司财务部工作。您需要汇总季度股东大会会议记录,梳理关键议题、趋势与观点倾向。

请以带编号的项目符号列表形式回复。

确保每一项都是完整的句子。
请勿生成幻觉内容。仅使用记录中包含的信息进行回复。

待汇总的记录如下:

而应从如下简单提示开始:

- 总结以下会议记录中的关键主题:

规则 2:仅做增量调整

请勿对模型参数进行大幅修改。

在大多数情况下:

  • Temperature(温度)和重复惩罚参数的微小调整会带来明显影响。
  • 大幅调整往往会掩盖小幅调整可能带来的成效。

遵循最佳工程实践原则:

  • 每次仅调整一个参数。单独验证每一项调整的效果。
  • 撤销未达到预期效果的调整。恢复至先前的参数值。
  • 任何偏离默认值的调整都应具备合理的解释。

规则 3:交叉验证

尝试找出提示的漏洞。请勿仅测试一次提示就宣称成功。针对提示运行数十次测试。

  • 在客户发现问题之前,先尝试找出提示的漏洞。

构建测试数据集,并持续补充示例。每次概念验证 (POC) 发布后,需重新测试,确保提示持续有效。

规则 4:复杂提取无法通过单一提示完成

无需担心,您可通过 watsonx.ai 并行处理多个提示。

包含 6 个提示、3 个板块的财务报告分析流程图。

规则 5:提示链

将任务拆分为更小的子任务。

加州葡萄酒乡度假规划流程示意图。

规则 6:任务分类(或提示架构)

将流程中的每个步骤拆分至多个提示及对应的专用模型中执行。

多 LLM 助手处理流程示意图,涵盖从用户请求到企业数据调用的全流程。

规则 7:granite.13b.chat.v

聊天模型所需的提示设计,与指令模型有所不同。

包含系统提示与通用提示的模型专属指令格式屏幕截图。
情境学习通用提示屏幕截图。
适配 RAG 模型专属格式的提示。

规则 8:轻松探索模型,享受过程

说真的,我们从探索实践中学到的东西,和从工作中学到的一样多。尝试使用最新的 LLM,让它们处理日常工作之外的任务,进行挑战。

选择 LLM 有能力完成的任务。

  • 写一首关于鸟类的 4 句诗。
  • 聊天挑战:好的,现在聊聊狗
  • 用不超过 5 句话,告诉我一个关于名叫 Midori 的鸟的有趣故事。
  • 聊天挑战:将鸟的名字改为 Charlie,加入蓝色元素,并将故事调整为 7 句话。
  • 用仅 10 个单词回答以下问题:“为什么天空是蓝色的?”
  • 聊天挑战:很棒,请告诉我一个看似合理但实际错误的原因。

添加多级交互,尝试构建链式提示。

系统提示与用户提示

编辑系统提示与编辑用户提示同等重要。系统提示会对回复质量、语气等产生巨大影响。系统提示用于设定交互的上下文,指导模型行为并确保一致性,而用户提示则决定对话的具体内容。具备编辑系统提示的能力对提升性能至关重要。

系统提示

系统提示提供底层指令,在整个交互过程中指导 AI 的行为。这些指令会明确模型的角色、语气与伦理边界。使用分隔符可帮助模型避免提示注入攻击。分隔符用于指定用户输入在提示中的插入位置,帮助模型识别用户输入的起始与结束边界。分隔符还能有效防范提示注入攻击。分隔符可以是任意符号,例如:``**、**"""**、**<>**、**`

以下是 Granite 模型的系统提示示例:

<|system|>\n您是 Granite Chat,一款由 IBM 开发的 AI 语言模型。您是一位谨慎的助手。您会严格遵循指令。您乐于助人、无害且遵循伦理准则,倡导积极行为。您会始终用“您好!我是 IBM 开发的 Granite Chat。今天我能为您提供什么帮助?”回应问候(例如嗨、你好、日安、早上好、下午好、晚上好、晚间好、近来如何、很高兴认识你、咋啦等等)。请勿额外发言或主动开启对话。{instruction}\n{session_history}<|user|>\n{query}\n<|assistant|>\n

用户提示

用户提示是用户为了从模型获取所需回复而提供的具体指令或查询。用户提示应清晰简洁,确保模型理解任务需求。

IBM 工具

Prompt Lab

Prompt Lab 是 IBM 推出的一个平台,可让您使用基础模型,并通过提示工程构建提示。在 Prompt Lab 中,用户可以使用聊天、自由形式或结构化模式,在提示编辑器中与基础模型交互。多个选项让您能够设计出最佳模型配置,以支持一系列自然语言处理 (NLP) 类型的任务,包括问答、内容生成和摘要、文本分类和提取。

如需了解 Prompt Lab 的入门指南及其他相关信息,请参阅 Prompt Lab 官方网站

InstructLab

提升 RAG 解决方案准确性的一种新兴策略是使用针对数据语料库微调的生成模型。此举可从多方面提升端到端的准确性。其中最显著的一点是,生成阶段的能力可改进甚至纠正检索结果。它还能提供更多企业专属的相关答案,因为它可根据企业业务内容进行定制微调。

如需了解 InstructLab 的入门指南及其他相关信息,请参阅 InstructLab 官方代码库

Granite

Granite 3.0 包含多款模型,例如 Granite 3.0 8B Instruct、2B Instruct、8B Base 和 2B Base;这些模型已在涵盖 12 种自然语言与 116 种编程语言的超 12 万亿词元数据上完成训练。在学术与企业基准测试中,这些模型的表现与头部提供商的同规模模型相当,甚至更优;在语言理解、代码生成、文档摘要等任务中展现出强劲的性能。

Granite 3.0 核心优势

透明度与安全性

IBM 对透明度与安全性的重视,体现在 Granite 3.0 技术报告中对训练数据集、筛选与整理流程的详细披露。这些模型基于宽松的 Apache 2.0 许可发布,为企业客户及更广泛的 AI 社区提供了灵活性与自主使用权。此外,Granite Guardian 3.0 模型具备全面的风险与有害内容检测能力,性能优于市场上其他安全模型。

高效性与成本效益

Granite 3.0 模型经优化设计,具备出色的成本效益,助力企业以极低成本实现前沿模型的性能表现。InstructLab 采用协作式开源模式,可针对特定任务微调小语言模型,与大模型相比,成本可降低 3 倍至 23 倍。混合专家 (MoE) 架构模型(如 Granite 3.0 3B-A800M 和 1B-A400M)实现了高推理效率,且性能损耗极低,是低延迟应用程序与基于 CPU 部署的理想选择。

多模态能力与未来更新

截至 2024 年底,Granite 3.0 模型预计将支持扩展至 128K 的上下文窗口,并具备多模态文档理解能力,涵盖图像输入、文本输出类任务。这一扩展将进一步提升其在各类企业用例中的实用性。

生态系统集成

Granite 3.0 模型可通过多个平台获取,包括 IBM 的 watsonx.ai、Hugging Face、Google Cloud 的 Vertex AI、NVIDIA NIM 微服务、Ollama 与 Replicate,为开发人员提供了丰富的部署选择,确保与现有工作流无缝集成。综上,IBM 的 Granite 3.0 模型为企业级 AI 提供了强大、透明且高性价比的解决方案,融合了顶尖性能、可靠的安全特性与广泛的生态系统支持。

如需了解 Granite 的入门使用及其他相关信息,请参阅 Granite 官方网站

小贴士与建议

优化提示策略

提交给 LLM 的提示内容与结构会极大影响其生成回复的质量与准确性。

六种提示类型

提示可分为六大类型:

仅关键字型

仅关键字查询的含义一目了然:这类提示由与当前主题相关的关键词组成。例如,提示:

在高海拔地区烘焙巧克力蛋糕的最佳时间是多少?

可以简化为以下关键词:

高海拔巧克力蛋糕烘焙时间

仅关键字型提示通常会生成更宽泛、更聚焦主题的回复,且与检索到的增强文本具有高度相关性。对于需要宽泛、信息丰富回复的解决方案(如操作员助理聊天机器人),这一效果较为理想;但对于需要简洁、对话式回复的解决方案,这类提示可能会生成过多冗余信息。

比较型

比较型提示要求 LLM 对提示中的一个或多个主题或概念进行对比分析。例如:

规则和角色分配有什么区别?

当生成模型与支持语料库包含所有相关概念的信息,且具备明确的对比维度或支持材料说明如何有效对比这些概念时,比较型提示会非常实用。如果缺少这些条件,比较型提示可能会生成无意义或无效的回复。

聚合型

聚合型提示要求模型在单个提示中整合两个及以上概念或查询。例如:

如何创建权限与权限组?

由于问题本身存在固有歧义,聚合式提示对大语言模型而言难度通常更高。

  • 是指并行执行多个概念以最小化处理时长吗?
  • 是指相互强化的互补概念吗?
  • 其意图是说明如何通过连续步骤执行操作吗?

为了消除这种歧义,通常建议将聚合式提示拆分为多个单主题提示,或提供附加上下文,明确说明所需的回复形式。

歧义型

歧义型提示指可被多种方式解读的提示。例如:

什么是角色?

该提示可能生成多种相关回复:表演场景下的角色、IT 安全解决方案场景下的角色,或组织场景下的角色。歧义型提示带来的不确定性,使其不适用于绝大多数解决方案;需要对其进行修改以补充细节与上下文,让 LLM 聚焦于目标主题。

偏离型

在 RAG 解决方案场景中,偏离型提示是指在支撑文档语料库中无对应答案的提示。这会导致 LLM 基于自身内置知识生成幻觉内容或即兴回复,或基于语料库中低相关性检索结果生成无关回复。

尽管在所有用例中(如对话式聊天机器人)无法完全避免偏离性回复,但解决方案开发人员可通过选择列表限制用户输入,以此降低该情况的发生。如通过“我可以为您解答以下问题……”搭配一系列预定义主题按钮,或在用户指引与模型回复中使用描述性、指令性语言,引导用户给出合规回复。

间接型

间接型提示是指关键词未直接出现在语料库中,但存在对应同义词的提示。间接型提示对解决方案开发人员而言颇具挑战,其可靠性取决于提示关键词的同义词数量,以及这些同义词能否引导生成无歧义的查询。

建议开发人员搭建黑名单查询过滤机制,为关键词补充消歧细节,或用无歧义的同义词、短语替换易出错的关键词。

良好提示实践

创建“良好”提示既是技术也是艺术,遵循诸多公认实践方法,可优化提示效果并获得更优输出。

一个良好提示具备以下特征:

  • 与目标领域相关,包含充足的细节与上下文,让目标输出的内容、语气清晰具体。

  • 贴合目标受众需求。面向企业财务分析师的回复,与面向零售银行客户的回复,在语气、结构、内容上均存在显著差异。优质提示会包含角色说明(如“您是一名中级金融分析师,生成一份报告……”),或明确标注回复受众(如“……为不了解金融术语的零售银行客户撰写”)。

  • 专为特定用例设计。设计优质提示时,需结合特定用例,注明生成回复的使用场景与方式(如“……回复将发表在旅游行业杂志,供旅游运营商参考”),这会直接影响回复的语气、语言与风格。

了解更多信息

获取 IBM 最新的技术模式、解决方案架构与架构出版物。

  1. 访问 IBM 架构中心
内容添加者:

Vicky KuoChris KirbyLuke MajorAtin ChandelBrant LiEvan Wheldon

更新日期:2024 年 11 月 15 日