RAG - LLM + Prompt Engineering
RAG 生成流程
- 经过 RAG 索引流程(外部知识的解析和向量化)和 RAG 检索流程(语义相似性的匹配及混合检索),进入到 RAG 生成流程
- 在 RAG 生成流程中,需要组合指令,即携带查询问题及检索到的相关信息输入的 LLM,由 LLM 理解并生成最终的回复
- RAG 的本质是通过 LLM 提供外部知识来增强其理解和回答领域问题的能力
- LLM 在 RAG 系统中起到了大脑的作用
- 在面对复杂且多样化的 RAG 任务时,LLM 的性能直接决定了系统的整体效果
- 提示词工程是生成流程中的另一个关键环节
- 通过有效的指令的设计和组合,可以帮助 LLM 更好地理解输入内容,从而生成更加精确和相关的回答
- 精心设计的问题提示词,往往能提升生成效果
LLM
发展
RAG 目前更关注通用大模型
原理
- Google 于 2017 年发布论文 Attention Is All You Need,引入了 Transformer 模型
- Transformer 模型是深度学习领域的一个突破性架构,LLM 的成功得益于对 Transformer 模型的应用
- 与传统的 RNN(循环神经网络) 相比,Transformer 模型不依赖于序列顺序
- 通过自注意力(Self-Attention)机制来捕捉序列中各元素之间的关系
- Transformer 由多个堆叠的编码层(Encoder)和解码层(Decoder)组成
- 每一层包括自注意力层、前馈层和归一化层
- 这些层协同工作,逐步捕捉输入数据信息特征,从而预测输出,实现强大的语言理解和生成能力
- Transformer 模型的核心创新 - 位置编码 + 自注意力机制
- 位置编码
- 帮助模型理解输入数据的顺序信息
- 自注意力机制
- 允许模型根据输入的全局上下文,为每个 Token 分配不同的注意力权重
- 从而更准确地理解词与词之间的关联性
- 位置编码
- Transformer 特别适用于语言模型
- 语言模型需要精确捕捉上下文中的细微差别,生成符合语义逻辑的文本
编码器负责理解输入信息的顺序和语义,而解码器则输出概率最高的 Token
- LLM 的突破始于 OpenAI 于 2022 年底发布的 ChatGPT
- 核心优势
- 庞大的参数规模 + 基于 PB 级别数据的训练所带来的卓越语言理解和生成能力 + 显著的涌现能力
- LLM 不仅在传统的 NLP 处理任务中展现了卓越表现,还具备解决复杂问题和进行逻辑推理等高级认知能力
- 基于 Transformer 模型预测下一个 Token 的原理
- LLM 在分析海量的语料库后,能够在逻辑上精准补全不完整的句子,甚至生成新的句子
- 赋予了 LLM 生成连贯且上下文相关的文本的能力,适用于文本生成、翻译、问答系统等多个领域
选型
测评
SuperCLUE:中文通用大模型综合性测评基准
- 在 RAG 场景中,LLM 的检索能力表现是核心
- SuperCLUE 针对 RAG 应用场景进行了独立测试,具体评估了检索和生成过程中的表现
维度
开源 vs 闭源
- 开源模型适用于数据敏感性高或者有严格合规要求的场景,通过自托管实现对数据的完全掌控,确保隐私与安全
- 闭源模型适用于数据敏感度较低的应用场景,其维护和服务相对完善,降低运维复杂度
模型参数规模
- 大参数模型在复杂任务中的推理和生成能力较强,但并非所有应用场景都需要高精度模型
- 小参数模型(7B)在满足简单逻辑任务时,具备更优的响应速度、成本控制和资源利用效率
国内部署 vs 国外部署
- 稳定性、网络延迟、充值付费等
- 数据合规
推荐
闭源
- 通义千问、文心一言、腾讯混元、字节豆包、Kimi Chat
- 参数量较高,在 RAG 场景的实际表现差异较少,主要取决于成本
开源
系列 | 特点 |
---|---|
Qwen | 在长上下文处理上表现出色,非常适合需要深度语义理解的 RAG 任务 |
Baichuan | 在数学和编码任务中表现卓越,在安全性方面经过深入评估 |
ChatGLM | 适用于长文本检索和生成 |
Prompt Engineering
概念
- Prompt Engineering 是为生成式 AI 模型设计输入以获得最佳输出的实践
- 输入即 Prompt,而编写 Prompt 的过程即 Prompt Engineering
- 核心理念 - 通过提供更优质的输入,让生成式 AI 模型(如 LLM)生成更符合需求的结果
- Prompt Engineering 通过开发和优化 Prompt 来有效利用 LLM 的潜力
- Prompt 工程师的任务不仅仅是设计提示
- 而是通深入理解模型的功能和局限性,创造能够与模型输入产生最佳互动的 Prompt
元素
Prompt 组成元素
元素 | 描述 |
---|---|
Instruction | 指示模型要执行的特定任务或者操作 |
Context | 为模型提供额外信息或背景,帮助引导模型生成更准确的响应 |
Input Data | 希望模型回答的问题或者感兴趣的输入内容 |
Output Indicator | 指示模型的输出类型或格式 |
技巧
RAG 中的 Prompt Engineering 技巧 - 高效低成本地提升输出质量
具体指令
- 向 LLM 提供具体清晰的指令,能够提高输出的准确性
- 模糊的指令往往导致模型生成不理想的结果
1 | 请根据上传的银行业报告,简洁总结当前的市场趋势,重点分析政策变化对行业的影响,输出为以下Markdown格式: |
示例学习
- 通过给模型提供多个参考示例,模型可以进行模式识别,进而模仿、思考并生成类似的答案
- 无需对模型进行进一步训练,有效提升模型的输出质量
1 | 以下是两个关于银行业的分析示例,请按照这种格式对新的报告进行分析: |
默认回复
- 当模型无法从文档中获取足够信息时,通过设定默认回复策略,避免模型产生幻觉(虚假答案)
- 确保模型仅基于文档中的事实进行回答
1 | 如果文档中没有足够的事实回答问题,请返回{无法从文档中获得相关内容},而不是进行推测。 |
角色设定
- 为模型设定特定的角色身份,可以帮助模型更好地理解任务要求和角色责任,输出更加一致的内容
1 | 你的角色: 知识库专家 |
解释理由
- 在编写 Prompt 时,向模型解释为什么某些任务需要特定的处理方式
- 可以帮助模型更好地理解任务背景,从而提高输出的质量和相关性
1 | 请生成一份简明扼要的银行业报告摘要,不要逐字重复段落内容。原因:读者可以访问完整文档,如果需要可以详细阅读全文。 |
基础说明
- 为模型提供文档的背景信息和文本来源可以奠定任务基础,让模型更好地进行任务推理和回答
1 | 以下是关于银行业政策变化的相关规则,它们将用于回答有关政策对银行业影响的问题。 |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.