接入deepseek构建RAG企业智能问答系统

RAG基础流程

AI大模型回答问题的方式

AI大模型基于其训练的数据回答所有问题。如果未针对特定业务(如美团)进行专门“学习”,面对直接相关的问题时,无法给出理想的答案。

让AI大模型“学习”业务知识的两种主要方法:
  1. 微调(Fine-Tuning):在预训练模型基础上根据特定任务和数据集调整参数。
  2. RAG(Retrieval-Augmented Generation,检索增强生成):使用泛化的大模型,通过对问题和答案进行优化增强,结合已有数据给出更准确的答案。

RAG的工作过程

  1. Indexing索引阶段:对知识库进行处理,例如文本向量化并保存到向量数据库中。
  2. Retrieval检索阶段:当用户提出问题时,从向量数据库中检索相关信息,并整理成完整的prompt发送给大模型。
示例Prompt模板
你是问答机器人。
你的任务是根据下述给定的已知信息回答用户问题。
已知信息: {context} # {context}就是检索出来的文档 
用户问: {question} # {question}就是用户的问题 
如果已知信息不包含用户问题的答案,或者已知信息不足以回答用户的问题,请直接回复“我无法回答您的问题”。
请不要输出已知信息中不包含的信息或答案。
请用中文回答用户问题。

Index索引阶段

1. 引入依赖

创建Maven项目并引入LangChain4j核心依赖和其他必要依赖项。

<dependencies>
    <dependency>
        <groupId>dev.langchain4jgroupId>
        <artifactId>langchain4jartifactId>
        <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() {
        // 实现代码...
    }
}

你可能感兴趣的:(prometheus,kubernetes,javascript)