基于博文 Advanced RAG Techniques: an Illustrated Overview 的学习和练习的记录。
中文内容可以查看博主@宝玉的译文 高级 RAG 技术:图解概览 [译]
RAG 介绍
RAG 全称为 Retrieval Augmented Generation(检索增强生成)。是基于LLM构建系统的一种架构。
RAG 基本上可以理解为:搜索 + LLM prompting
。根据用户的查询语句,系统会先使用搜索算法获取到相关内容作为上下文,然后将用户查询语句和获取到的上下文一起注入到 prompt 中,然后将 prompt 提供给 LLM 来生成回答内容。
个人理解,RAG 主要解决了 LLM 以下限制:
- 有限的上下文窗口
- 私有数据的访问
- LLM 训练数据的时效性
RAG 初步实现
RAG 初步实现可以简单分解为以下步骤:
- 将待检索文本分割成块
- 使用 Transformer Encoder 模型将文本嵌入为向量(embedding),并将向量存储
- 构建一个 prompt,可以让模型根据搜索到的内容对用户提出的问题进行回答
使用时:
- 使用相同的 Transformer Encoder 模型,将用户的查询文本转换成向量
- 使用查询的向量从向量存储中找到 top-k 的结果
- 将用户提的问题和查询到的文本块一起作为上下文整合到 prompt 中
prompt 如下所示:
def question_answering(context, query):
prompt = f"""
Give the answer to the user query delimited by triple backticks ```{query}```\
using the information given in context delimited by triple backticks ```{context}```.\
If there is no relevant information in the provided context, try to answer yourself,
but tell user that you did not have any relevant context to base your answer on.
Be concise and output the answer of size less than 80 tokens.
"""
response = get_completion(instruction, prompt, model="gpt-3.5-turbo")
answer = response.choices[0].message["content"]
return answer
扩展内容
Prompt 工程
Prompt 工程是优化 RAG pipeline 最经济的方法。Prompt 工程相关拓展内容有:
LLM
- OpenAI,Claude from Anthropic
- 小而强大的模型:Mixtral form Mistral, Phi-2 from Microsoft
- 其他开源模型 Llama2, OpenLLaMA, Falcon
动手练习
RAG 初步实现:
- 基于 langchain 实现
- 模型使用 ChatGLM 开放API
具体详情查看 notebook: RAG 基本实现
其他资源
博主@宝玉对吴恩达课程视频进行了翻译,视频合集 LangChain: 构建与数据对话的聊天机器人