08 Chroma 持久化 + FastAPI 封装 Chroma 持久化 FastAPI 封装安装依赖cdD:\yunyanshijie\skill_test\python_study .venv\Scripts\activate pipinstallchromadb langchain-chromaChroma 持久化为什么要换InMemoryVectorStoreChroma存储位置进程内存磁盘 chroma_db/重启后索引丢失需重新 Embedding直接加载秒级启动适用场景学习、调试接近真实部署核心 APIfromlangchain_chromaimportChromadefbuild_vectorstore(chunks,embeddings,chroma_dir:Path):chroma_dir.mkdir(parentsTrue,exist_okTrue)ifany(chroma_dir.iterdir()):# 目录非空 → 已有索引,库已存在直接加载print(从磁盘加载向量库...)returnChroma(persist_directorystr(chroma_dir),embedding_functionembeddings,collection_nameknowledge,)else:# 首次 → 建库文档切分后print(首次运行正在建索引...)returnChroma.from_documents(documentschunks,embeddingembeddings,persist_directorystr(chroma_dir),collection_nameknowledge,)FastAPI 封装架构POST /chatstartup 一次ClientFastAPIagent_corechroma_dbLangGraphDeepSeek重点向量库和 Graph 在 服务启动时初始化一次不是每个请求重建。生命周期lifespanFastAPI 推荐用 lifespan在 startup 里完成初始化fromcontextlibimportasynccontextmanager graphNoneasynccontextmanagerasyncdeflifespan(app:FastAPI):globalgraph# 在函数里要赋值模块级变量时必须写否则 Python 会当成函数局部变量graphinit_graph()# 内部调 build_vectorstore build_graphyield# 关服务 → yield 之后的代码再跑清理# shutdown 清理appFastAPI(lifespanlifespan)接口设计classChatRequest(BaseModel):message:strthread_id:strdefaultclassChatResponse(BaseModel):reply:strsources:list[str][]# 这是 RAG 的 溯源citation不只给答案还告诉用户「依据哪些文档」。路由方法作用/healthGET健康检查返回 {“status”: “ok”, “chunks”: N}/chatPOST发送消息返回回答 引用来源/chat 核心逻辑app.post(/chat,response_modelChatResponse)defchat(req:ChatRequest):config{configurable:{thread_id:req.thread_id}}resultgraph.invoke({messages:[HumanMessage(contentreq.message)],context:},configconfig,)replyresult[messages][-1].content sourcesresult.get(sources,[])# 见下方「溯源」returnChatResponse(replyreply,sourcessources)检索溯源在 AgentState 里加一个字段classAgentState(TypedDict):messages:Annotated[list,add_messages]context:strsources:list[str]# 新增retrieve 节点里sources[str(doc.metadata.get(source,unknown))fordocinresults]return{context:context,sources:sources}

相关新闻

最新新闻

补丁突然失效了:一次防撤回特征码匹配事故的完整排查手记

补丁突然失效了:一次防撤回特征码匹配事故的完整排查手记

补丁突然失效了:一次防撤回特征码匹配事故的完整排查手记 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode…

2026/8/14 17:56:39
2026苏州有哪些好的国际高中?选校路径、维度及避坑全梳理

2026苏州有哪些好的国际高中?选校路径、维度及避坑全梳理

最近不少苏州家长在问:2026年苏州有哪些好的国际高中?刚接触国际教育的家庭,常会被各种课程类型、办学模式绕得晕头转向,明明想选适合孩子的,却怕踩坑、怕选不对。今天咱们就从核心问题入手,说清选国际高中…

2026/8/14 17:56:39
poetry-dynamic-versioning与CI/CD集成:自动化版本管理完整流程

poetry-dynamic-versioning与CI/CD集成:自动化版本管理完整流程

poetry-dynamic-versioning与CI/CD集成:自动化版本管理完整流程 【免费下载链接】poetry-dynamic-versioning Plugin for Poetry to enable dynamic versioning based on VCS tags 项目地址: https://gitcode.com/gh_mirrors/po/poetry-dynamic-versioning p…

2026/8/14 17:56:39
10 分钟掌握 Czkawka 重复文件清理工具:Windows 磁盘空间优化实战指南

10 分钟掌握 Czkawka 重复文件清理工具:Windows 磁盘空间优化实战指南

10 分钟掌握 Czkawka 重复文件清理工具:Windows 磁盘空间优化实战指南 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka 某个周五晚上&am…

2026/8/14 17:56:39
2026电视直播神器:M3U直播源与播放器配置全攻略

2026电视直播神器:M3U直播源与播放器配置全攻略

这次我们来看一个2026年7月更新的电视直播神器。它不是一个传统的直播APP,而是一个整合了海量直播源、支持多种协议、主打“即点即播”和“高清稳定”的本地播放解决方案。简单说,它就是一个功能强大的直播源播放器,通过内置或用户自定义的直…

2026/8/14 17:56:39
一周总结:AI 编程入门最重要的 3 个原则

一周总结:AI 编程入门最重要的 3 个原则

文章目录一、第一周学到了什么Day 1:AI 编程是什么Day 2:开始前需要准备什么Day 3:AI 工具怎么选择Day 4:第一次让 AI 写代码Day 5:为什么代码不能直接用Day 6:新手最容易踩的 5 个误区二、原则一&#xff…

2026/8/14 17:51:39