news 2026/8/6 3:39:50

大模型学习·第44天:Chroma向量数据库与RAG链式组装

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大模型学习·第44天:Chroma向量数据库与RAG链式组装

一、Chroma 向量数据库

InMemoryVectorStore存在内存中,重启程序就没了。Chroma是轻量级外部向量数据库,数据持久化到磁盘,重启后依然可用。

pipinstalllangchain-chroma chromadb
fromlangchain_chromaimportChroma vector_store=Chroma(collection_name="text",# 类似数据库表名embedding_function=DashScopeEmbeddings(),persist_directory="./chroma_db"# 数据持久化到本地文件夹)# 增删检索,和 InMemoryVectorStore 完全一样vector_store.add_documents(documents=docs,ids=["id1","id2"])vector_store.delete(["id1","id2"])result=vector_store.similarity_search("查询",k=3,filter={"source":"黑马程序员"})

对比InMemoryVectorStore适合学习和临时测试,Chroma适合需要持久化的项目。两者接口完全一致,切换只需改创建代码。filter参数支持按metadata字段过滤。

二、RAG 完整流程:检索 + 构建提示词 + 生成

# 1. 准备向量库数据vector_store.add_texts(["减肥就是要少吃多练","控制卡路里摄入并运动起来","跑步是很好的运动"])# 2. 用户提问 → 检索相关文档result=vector_store.similarity_search("怎么减肥?",k=2)# 3. 拼接参考资料reference_text="["+"".join([doc.page_contentfordocinresult])+"]"# 4. 构建提示词模板prompt=ChatPromptTemplate.from_messages([("system","以参考资料为主,简洁专业回答。参考资料:{context}"),("user","用户提问:{input}")])# 5. 链式调用chain=prompt|model|StrOutputParser()res=chain.invoke({"input":input_text,"context":reference_text})

RAG 本质:用户提问 → 向量检索匹配资料 → 资料 + 问题一同填入提示词 → 模型基于资料生成答案。整个流程的核心就是在向模型提问之前,先检索知识库确保信息精准。

三、RunnablePassthrough:自动传递数据

RunnablePassthrough在链中起到"透传"作用——接收什么就原样传下去,主要用于在链式调用中传递用户原始输入,同时并行调用检索器获取上下文。

fromlangchain_core.runnablesimportRunnablePassthrough retriever=vector_store.as_retriever(search_kwargs={"k":2})chain=({"input":RunnablePassthrough(),"context":retriever|format_func}|prompt|model|StrOutputParser())res=chain.invoke("怎么减肥?")

数据流详解

  • RunnablePassthrough()把用户提问原样传入{"input": ..., "context": ...}
  • retriever输入是用户提问(字符串),输出是list[Document]
  • format_funclist[Document]转成拼接好的字符串
  • prompt接收{"input": str, "context": str},输出完整提示词

核心优势:不需要手动调用invoke传参,链会自动把数据流转到正确的位置。

四、as_retriever 方法

vector_store.as_retriever()把向量存储转成检索器(Runnable接口子类),可以直接加入链。参数search_kwargs={"k": 2}指定检索返回前2个最相似文档。

今日核心总结

  1. Chroma:轻量级持久化向量数据库,与InMemoryVectorStore接口一致,切换只需改创建代码
  2. RAG 流程:用户提问 → 向量检索 → 拼接参考资料 → 填入提示词 → 模型生成答案
  3. as_retriever:把向量存储转为检索器对象,可直接加入 Chain
  4. RunnablePassthrough:透传用户输入,配合检索器并行获取上下文
  5. 数据流:retriever 输入 str 输出list[Document]→ format_func 转为 str → prompt 接收 dict → 模型生成
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 3:33:18

OpenCore Legacy Patcher终极指南:让旧Mac免费升级最新macOS

OpenCore Legacy Patcher终极指南:让旧Mac免费升级最新macOS 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 想要让您的旧款Mac焕发新生&#xff…

作者头像 李华
网站建设 2026/8/6 3:31:03

开关电容电路:用开关与电容实现高精度模拟信号处理

1. 从模拟电路的“死胡同”说起:为什么我们需要开关电容电路?如果你在模拟电路领域摸爬滚打过一段时间,尤其是在处理信号处理、滤波或者数据转换这类任务时,大概率会遇到一个经典的困境:如何精确地实现一个特定时间常数…

作者头像 李华
网站建设 2026/8/6 3:30:31

基于ReAct框架的微信AI智能体开发:从原理到实践

1. 项目概述:当AI“小龙虾”爬进你的微信最近,一个名叫QClaw的项目在技术圈里小火了一把。简单来说,它让你能在微信里“养”一只AI“小龙虾”(Claw有“钳子”之意,形象地比喻其抓取能力)。这听起来像是个无…

作者头像 李华
网站建设 2026/8/6 3:30:11

从OCR到AI Agent:构建本地化智能文档处理流水线实战

1. 从“瞎看”到“真香”:一个AI项目的认知跃迁最近在折腾一个项目,核心目标很简单:让机器能“看懂”图片里的文字,并且能基于这些文字做点“聪明”的判断。听起来是不是有点像OCR?没错,但又不完全是。市面…

作者头像 李华