【RAG 项目实战 02】 Chainlit 持久化对话历史

【RAG 项目实战 02】Chainlit 持久化对话历史


NLP Github 项目:


01 创建账号

1、登录 Literal AI
2、创建一个项目

3、在设置页面复制API Key

02 创建密码

1、 使用 chainlit create-secret 命令创建密钥,并复制到 .env

2、添加密码验证

from typing import Optional
import chainlit as cl

@cl.password_auth_callback
def auth_callback(username: str, password: str):
    # Fetch the user matching username from your database
    # and compare the hashed password with the value stored in the database
    if (username, password) == ("admin", "admin"):
        return cl.User(
            identifier="admin", metadata={"role": "admin", "provider": "credentials"}
        )
    else:
        return None

【动手学 RAG】系列文章:

<think>好的,我现在需要处理用户关于RAG项目实战经验或教程的请求。首先,用户明确提到了想要实战经验和示例代码,可能他们已经对RAG有一定的了解,但需要具体的实现指导。接下来,我得回忆一下RAG的基本流程,确保回答覆盖关键步骤:数据准备、文档切分、向量化、检索与生成。 然后,用户提供的引用中有提到LangChain和SpringBoot整合的例子,还有关于Embedding的重要性。这些引用应该被合理利用,以增强回答的可信度。我需要确保在回答中提到这些内容,并正确添加引用标识。 接下来,考虑用户可能需要具体的代码示例。引用3和4提到了LangChain和SpringBoot的实战,所以应该优先选择这两个框架的示例。例如,使用LangChain的RetrievalQA链,或者展示如何用SpringBoot整合LangChain4j。此外,还需要注意代码的格式,用三个反引号包裹,并标明语言。 另外,用户可能对RAG的优化和实际应用场景感兴趣,所以相关问题部分需要涵盖这些方面,比如性能优化、处理长文本、与其他技术对比等。同时,要确保问题具有启发性,帮助用户深入理解。 还要检查是否符合系统级指令:行内公式用$...$,独立公式用$$...$$,中文回答,生成相关问题,引用正确。例如,在提到Embedding技术时,可能需要数学表达,比如向量相似度计算$cos(\theta)$,但用户的问题中没有涉及数学内容,可能不需要加入公式。不过还是需要留意是否有必要的地方。 最后,确保回答结构清晰,分步骤讲解,每个部分都有相应的代码示例和解释,并自然融入引用。例如,在数据准备阶段引用4提到的Embedding技术,在代码示例部分引用3和4的实战指南。同时,相关问题要覆盖用户可能进一步探索的方向,如优化方法、评估指标、框架选择等。 现在,整理这些思路,形成结构化的回答,包括四个实战步骤、两个代码示例(LangChain和SpringBoot),以及相关问题。确保每个部分都简洁明了,符合用户需求,并且引用正确。</think>以下是为您整理的RAG项目实战经验及实现方法,包含关键步骤和代码示例: ### 一、RAG项目实战核心步骤 1. **数据准备与向量化** - 将PDF/HTML等文档转换为纯文本 - 使用文本切分器(如`RecursiveCharacterTextSplitter`)分割为500-1000字符的片段 - 通过Embedding模型(如HuggingFace的`sentence-transformers/all-MiniLM-L6-v2`)生成向量[^4] 2. **向量数据库构建** ```python from langchain.vectorstores import Chroma from langchain.embeddings import HuggingFaceEmbeddings embeddings = HuggingFaceEmbeddings() vector_db = Chroma.from_documents(documents, embeddings, persist_directory="./rag_db") ``` 3. **检索增强实现** ```python retriever = vector_db.as_retriever(search_kwargs={"k": 3}) ``` 4. **与大模型集成** ```python from langchain.chains import RetrievalQA qa_chain = RetrievalQA.from_chain_type( llm=ChatOpenAI(), chain_type="stuff", retriever=retriever ) print(qa_chain.run("RAG的核心技术是什么?")) # 输出:Embedding和检索增强技术[^4] ``` ### 二、SpringBoot整合实现方案 参考SpringBoot+LangChain4j的RAG实现: ```java // 初始化Embedding模型 EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel(); // 创建向量存储 EmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore<>(); // 构建RAG链 RetrievalAugmentor augmentor = DefaultRetrievalAugmentor.builder() .embeddingStore(embeddingStore) .embeddingModel(embeddingModel) .build(); Assistant assistant = AiServices.builder(Assistant.class) .chatLanguageModel(chatModel) .retrievalAugmentor(augmentor) .build(); ``` ### 三、关键优化技巧 1. **混合检索策略**:结合语义搜索与关键词匹配 2. **重排序技术**:使用`bge-reranker-base`等模型优化结果 3. **上下文压缩**:通过`ContextualCompressionRetriever`减少prompt长度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值