第三单元——第七课:把向量库保存到磁盘
之前每次运行都会重新计算bookstore.txt的文档向量。这次用 Chroma 保存索引首次运行建立之后运行直接读取。LangChain 的 Chroma 文档先在虚拟环境中安装python -m pip install -U langchain-chroma保存为unit3_lesson7_persistent_index.pyimport time from pathlib import Path import chromadb from langchain_chroma import Chroma from langchain_core.documents import Document from langchain_huggingface import HuggingFaceEmbeddings from langchain_text_splitters import RecursiveCharacterTextSplitter start time.perf_counter() folder Path(__file__).parent database_path folder / bookstore_chroma collection_name bookstore_lessons # 本地模型仍需加载用来把新问题转换成向量 embeddings HuggingFaceEmbeddings( model_nameBAAI/bge-small-zh-v1.5, model_kwargs{device: cpu, local_files_only: True}, encode_kwargs{normalize_embeddings: True}, ) client chromadb.PersistentClient(pathstr(database_path)) collection client.get_or_create_collection(collection_name) vector_store Chroma( clientclient, collection_namecollection_name, embedding_functionembeddings, ) # 只有空索引才读取文件、切分并计算文档向量 if collection.count() 0: file_path folder / bookstore.txt document Document( page_contentfile_path.read_text(encodingutf-8), metadata{source: file_path.name}, ) splitter RecursiveCharacterTextSplitter( chunk_size120, chunk_overlap20, add_start_indexTrue, separators[\n\n, \n, 。, , ], ) chunks splitter.split_documents([document]) vector_store.add_documents(chunks) print(f首次建立索引{len(chunks)} 个片段) else: print(f复用已有索引{collection.count()} 个片段) question 会员买书有什么优惠 results vector_store.similarity_search(question, k1) print(检索结果) for doc in results: print(doc.page_content) print(来源, doc.metadata[source]) print(起始位置, doc.metadata[start_index]) print(f总耗时{time.perf_counter() - start:.2f} 秒)连续运行两次python unit3_lesson7_persistent_index.py python unit3_lesson7_persistent_index.py第一次应显示“首次建立索引”第二次显示“复用已有索引”。磁盘上会出现bookstore_chroma文件夹。这里节省的是重复计算文档向量的时间。本地 Embedding 模型每次启动仍需加载而且问题本身仍需转换成向量由于示例文档很短两次总耗时可能差别不大。本课代码只在索引为空时写入。如果之后修改了bookstore.txt旧索引不会自动更新这正是下一课要解决的问题。课后问题bookstore_chroma 是通过执行哪行代码后创建的回答主要是这一行创建bookstore_chroma文件夹client chromadb.PersistentClient(pathstr(database_path))前一行database_path folder / bookstore_chroma只是指定路径PersistentClient初始化时会在该位置建立持久化数据库。首次运行中的vector_store.add_documents(chunks)则把文档片段和向量写入数据库。

相关新闻

UniMate数据许可合规指南:Mixamo、Objaverse与Truebones的3大授权陷阱

UniMate数据许可合规指南:Mixamo、Objaverse与Truebones的3大授权陷阱

UniMate数据许可合规指南:Mixamo、Objaverse与Truebones的3大授权陷阱 【免费下载链接】UniMate [SIGGRAPH Asia 2026] UniMate: One Unified Model to Animate Diverse Skeletons 项目地址: https://gitcode.com/GitHub_Trending/un/UniMate 如果你准备训练…

2026/10/5 4:54:42 阅读更多 →
10.4作业

10.4作业

2026/10/5 4:54:42 阅读更多 →
预处理详解(三):命令行定义、条件编译与文件包含实战

预处理详解(三):命令行定义、条件编译与文件包含实战

《预处理详解(三)》这个系列写到第三篇,前两篇我们聊了宏定义的细节和展开规则,评论区很多朋友已经在催更了。命令行定义、条件编译、文件包含这三样东西,放在一起讲是有道理的——它们在实际工程里几乎总是配合出现&a…

2026/10/5 4:53:42 阅读更多 →

最新新闻

IT6801显示控制器驱动开发:Datasheet、寄存器与移植实战

IT6801显示控制器驱动开发:Datasheet、寄存器与移植实战

简介:面向ITE6801/IT6801显示控制器的全套资料,主要服务嵌入式显示驱动开发工程师与C/C底层编程人员,重点解决屏幕初始化、寄存器配置、时序调试与驱动移植问题。压缩包共15个文件、约10.37MB,主体为9份PDF数据手册和编程指南&…

2026/10/5 5:20:52 阅读更多 →
Java工程师转型AI Agent实战:从LangChain4j到生产级并发与RAG落地

Java工程师转型AI Agent实战:从LangChain4j到生产级并发与RAG落地

1. Java 工程师转型 AI Agent 的底层逻辑与路径选择1.1 为什么 Java 工程师转 AI Agent 有天然优势很多 Java 工程师一提到 AI Agent,第一反应是“这是 Python 的天下,我是不是得从头学一门语言”。我刚开始接触这个方向时也有同样的焦虑,但实…

2026/10/5 5:20:52 阅读更多 →
二维数组子数组筛选全解析:C#与C语言实现及边界避坑

二维数组子数组筛选全解析:C#与C语言实现及边界避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:20:52 阅读更多 →
一张图加一段音频生成数字人:从原理到实操的完整指南

一张图加一段音频生成数字人:从原理到实操的完整指南

数字人这个方向我前前后后折腾了快两年,从最早用现成SaaS工具套模板,到后来自己搭管线跑模型,踩过的坑能写满一个笔记本。最近半年,圈子里讨论最多的就是“一张图加一段音频直接出片”的方案——不需要3D建模,不需要动…

2026/10/5 5:20:51 阅读更多 →
单文件HTML跨年祝福页制作指南:倒计时、烟花与部署

单文件HTML跨年祝福页制作指南:倒计时、烟花与部署

简介:HTML跨年主题网页源码包,面向网页设计与前端初学者,可用于制作春节、跨年庆祝页面。包内包含完整的前端文件,涵盖烟花特效、新年倒计时、祝福弹窗、背景音乐切换及响应式布局等常见节日页面功能,适合直接运行查看…

2026/10/5 5:20:51 阅读更多 →
航班飞行网图分析实战:基于Spark GraphX的图计算应用

航班飞行网图分析实战:基于Spark GraphX的图计算应用

做航班数据分析这几年,我越来越觉得把航班数据当普通关系表来算,其实有点浪费。航线的本质就是一张巨大的图——机场是顶点,航班是边,旅客中转天然就是在图上做路径遍历。刚接触 Spark 的时候我也习惯性用 DataFrame 做 join 和 g…

2026/10/5 5:19:51 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →