RAG(检索增强生成)是一种被广泛采用的方法,通过结合额外的知识来缓解大型语言模型(LLM)中的幻觉问题(自信地生成错误反应)。
RAG 系统概述
如图所示,该RAG系统由两个主要组件组成:
索引阶段构建知识库的过程涉及四个步骤:
检索和生成过程也包括四个步骤:
与直接查询 LLM 相比,该RAG系统整合了一个额外的知识库。它将用户查询与现有知识相结合,为 LLM 创建丰富的提示,使其能够提供更准确、更情境化的答案。这意味着系统RAG会用相关的实时或特定领域的信息补充用户的查询,以提高响应质量。
RAG 系统示例
langchain在这个例子中,我们将使用、Redis和构建一个 Kubernetes 知识库问答系统llama.cpp。
使用 Docker 容器环境在本地进行开发。以下docker-compose文件设置了必要的服务:
version: "3.9"
services:
redis:
image: redis/redis-stack:7.4.0-v1
container_name: redis
ports:
- "6379:6379" # Map Redis default port
- "8001:8001" # Map RedisInsight default port
llama_cpp_server:
image: ghcr.io/ggerganov/llama.cpp:server
container_name: llama_cpp_server
ports:
- "8080:8080"
volumes:
- ~/ai-models:/models # Map host path to container
environment:
LLAMA_ARG_MODEL: /models/llama3.2-1B.gguf
LLAMA_ARG_CTX_SIZE: 4096
LLAMA_ARG_HOST: "0.0.0.0"
LLAMA_ARG_PORT: 8080
代码示例如下:
代码解释:
from sentence_transformers import SentenceTransformer
sentences = ["This is an example sentence"]
model = SentenceTransformer('sentence-transformers/all-mpnet-base-v2')
embeddings = model.encode(sentences)
print(embeddings)
最终测试结果:
如上文所示,当包含额外上下文时,大型语言模型(LLM)提供的答案会有所改进。
RAG系统面临的挑战
RAG过程中的每一步都带来了独特的挑战:
结论
通过引入知识库,RAG系统增强了LLM处理专业领域和实时信息的能力,使它们在回答特定领域问题时更加准确和高效。