接入deepseek构建RAG企业智能问答系统
·
RAG基础流程
AI大模型回答问题的方式
AI大模型基于其训练的数据回答所有问题。如果未针对特定业务(如美团)进行专门“学习”,面对直接相关的问题时,无法给出理想的答案。
让AI大模型“学习”业务知识的两种主要方法:
- 微调(Fine-Tuning):在预训练模型基础上根据特定任务和数据集调整参数。
- RAG(Retrieval-Augmented Generation,检索增强生成):使用泛化的大模型,通过对问题和答案进行优化增强,结合已有数据给出更准确的答案。
RAG的工作过程
- Indexing索引阶段:对知识库进行处理,例如文本向量化并保存到向量数据库中。
- Retrieval检索阶段:当用户提出问题时,从向量数据库中检索相关信息,并整理成完整的prompt发送给大模型。
示例Prompt模板
你是问答机器人。
你的任务是根据下述给定的已知信息回答用户问题。
已知信息: {context} # {context}就是检索出来的文档
用户问: {question} # {question}就是用户的问题
如果已知信息不包含用户问题的答案,或者已知信息不足以回答用户的问题,请直接回复“我无法回答您的问题”。
请不要输出已知信息中不包含的信息或答案。
请用中文回答用户问题。
Index索引阶段
1. 引入依赖
创建Maven项目并引入LangChain4j核心依赖和其他必要依赖项。
<dependencies>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<!-- 其他依赖 -->
</dependencies>
2. 加载并解析文件
使用FileSystemDocumentLoader加载不同格式的知识库文件,并使用TextDocumentParser封装成Document对象。
3. 切分文件
将Document中的内容切分成独立的Segments,每个Segment代表一个问答对。
4. 文本向量化
通过文本向量化模型(如OpenAI的EmbeddingModel),将文本转换为向量,并存储于向量数据库(如Redis)。
EmbeddingStore<TextSegment> embeddingStore = RedisEmbeddingStore.builder()
.host("127.0.0.1")
.port(6379)
.dimension(1536)
.indexName("meituan-rag")
.build();
embeddingStore.addAll(embeddings, segments);
Retrieval搜索增强阶段
5. 检索相关信息
对用户问题进行文本向量化后,在向量数据库中检索关联度较高的知识,并通过ContentRetriever简化实现过程。
6. 构建Prompt提示词
整合用户问题和检索出的相关知识,形成统一的UserMessage,并发送给大模型。
ContentInjector contentInjector = new DefaultContentInjector();
UserMessage promptMessage = contentInjector.inject(contentList, UserMessage.from(question));
ChatLanguageModel model = ModelUtil.getOpenAIModel();
Response<AiMessage> generate = model.generate(promptMessage);
System.out.println(generate.content().text());
整合大模型
7. 构建AiService
使用LangChain4j提供的AiServices组件,整合各个组件,构建快速调用大模型的服务工具类。
public class MeituanRagService {
// 增强接口
interface AiCustomer {
String answer(String question);
}
public static AiCustomer create() {
// 实现代码...
}
}
更多推荐




所有评论(0)