构建简单RAG
什么是RAG?
RAG是一种 混合AI Agent架构 ,它将传统的信息检索系统与现代的生成式AI模型结合起来,以提高AI回答问题的准确性和可靠性。
工作原理
RAG的工作流程主要包括三个步骤:
- 检索(Retrieval) :当用户提出问题时,系统首先从知识库或文档集合中检索相关信息
- 增强(Augmentation) :将检索到的相关信息与用户的问题一起作为上下文
- 生成(Generation) :基于检索到的信息和用户问题,生成AI模型生成回答
主要优势
- 减少幻觉 :通过基于真实文档生成回答,减少AI编造信息的情况
- 知识更新 :可以轻松更新知识库,无需重新训练整个模型
- 可解释性 :可以追溯回答的来源,提高透明度
- 成本效益 :相比大规模预训练,维护知识库成本更低
上下文
上下文是RAG模型中的核心,它包含用户问题、检索到的文档和生成的答案。
# 导入 PromptTemplate:用于定义单条提示模板
# 导入 FewShotPromptTemplate:用于基于多个示例构建少样本提示模板
from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate
# Define examples for the few-shot prompt
examples = [
{
"question": "谁的寿命更长,史蒂夫·乔布斯还是爱因斯坦?",
"answer": """这个问题是否需要追加问题:是。
追加问题:史蒂夫·乔布斯享年多少岁?
中间答案:史蒂夫·乔布斯享年56岁。
追加问题:爱因斯坦享年多少岁?
中间答案:爱因斯坦享年76岁。
最终答案:爱因斯坦
""",
},
{
"question": "Naver的创始人是什么时候出生的?",
"answer": """这个问题是否需要追加问题:是。
追加问题:谁是Naver的创始人?
中间答案:Naver是由李海珍创立的。
追加问题:李海珍是什么时候出生的?
中间答案:李海珍出生于1967年6月22日。
最终答案:1967年6月22日
""",
},
{
"question": "栗谷李珥的母亲出生时,谁是在位的国王?",
"answer": """这个问题是否需要追加问题:是。
追加问题:谁是栗谷李珥的母亲?
中间答案:栗谷李珥的母亲是申师任堂。
追加问题:申师任堂是什么时候出生的?
中间答案:申师任堂出生于1504年。
追加问题:1504年朝鲜的国王是谁?
中间答案:1504年朝鲜的国王是燕山君。
最终答案:燕山君
""",
},
{
"question": "《老男孩》和《寄生虫》的导演是来自同一个国家吗?",
"answer": """这个问题是否需要追加问题:是。
追加问题:谁是《老男孩》的导演?
中间答案:《老男孩》的导演是朴赞郁。
追加问题:朴赞郁来自哪个国家?
中间答案:朴赞郁来自韩国。
追加问题:谁是《寄生虫》的导演?
中间答案:《寄生虫》的导演是奉俊昊。
追加问题:奉俊昊来自哪个国家?
中间答案:奉俊昊来自韩国。
最终答案:是
""",
},
]
观察
example_prompt = PromptTemplate.from_template(
"Question:\n{question}\nAnswer:\n{answer}"
)
print(example_prompt.format(**examples[0]))
few_shot_prompt = FewShotPromptTemplate(
examples=examples,
example_prompt=example_prompt,
suffix="Question:\n{question}\nAnswer:",
input_variables=["question"],
)
# Example question
question = "当谷歌成立时,比尔盖茨多大年纪?"

最低0.47元/天 解锁文章
1370

被折叠的 条评论
为什么被折叠?



