RAG 概述

RAG (Retrieval-Augmented Generation) 检索增强生成,是一种将信息检索与文本生成相结合的技术。

RAG 工作流程

RAG 通过三个核心阶段运作:

  1. 检索 (Retrieval):搜索知识库
  2. 增强 (Augmentation):对文档进行排序和过滤
  3. 生成 (Generation):LLM 生成响应

RAG 的优势

  • 减少大型语言模型的幻觉问题
  • 使生成内容更加准确和可靠

应用场景

  • 客户服务
  • 研究助手
  • 企业知识管理

ChatPromptTemplate

  • 构建聊天提示模板的核心类
  • 支持可重用模板、动态变量插入、多角色对话
  • 可与 LLMChain、Memory、Agents 和 OutputParsers 集成

安装依赖

pip install --upgrade --quiet langchain-core langchain-community langchain-openai
pip install langchain docarray tiktoken

代码示例

from langchain_community.vectorstores import DocArrayInMemorySearch
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
from langchain_openai.chat_models import ChatOpenAI
from langchain_openai.embeddings import OpenAIEmbeddings

vectorstore = DocArrayInMemorySearch.from_texts(
    ["harrison worked at kensho", "bears like to eat honey"],
    embedding=OpenAIEmbeddings(),
)
retriever = vectorstore.as_retriever()

template = """Answer the question based only on the following context:
{context}

Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
model = ChatOpenAI(model="gpt-3.5-turbo")
output_parser = StrOutputParser()

setup_and_retrieval = RunnableParallel(
    {"context": retriever, "question": RunnablePassthrough()}
)
chain = setup_and_retrieval | prompt | model | output_parser

message = chain.invoke("where did harrison work?")
print(message)

运行结果

Harrison worked at Kensho.