96SEO 2026-06-30 21:25 1
为什么不呢?
在第10课里我们Yi经尝试了通过 ollama 的api把一段文本转换为。

ChromaDB 的Neng力,并不是简单的向量存储和查询,准确来说关于数据,它内置了两种强力引擎:
import chromadb
import ollama
class OllamaEmbeddingFunction:
def __init__:
self.model_name = model_name
def __call__:
# 自动调用本地 Ollama 计算句向量
response = ollama.embed
return response
def name:
return self.model_name
def main:
client = chromadb.PersistentClient
# 获取或创建集合
collection = client.get_or_create_collection(
name=COLLECTION_NAME,
embedding_function=OllamaEmbeddingFunction
)
collection.add(
documents=docs_texts,
metadatas=docs_metadatas,
ids=docs_ids
)
你可Neng注意到了上面我们传入了一个 docs_ids,这是什么?为什么要有这个东西?
灾难级的“重复存入”:Ru果你明天不小心把这个 Python 脚本又跑了一遍,自动生成 ID 会导致数据库里出现两份完全一样的文本和向量。搜的时候,前两个结果可Neng是一模一样的话。
当我们拆分数据后进行插入时实际上Zuo了两次插入:
原因hen残酷,Ru果数据库帮你自动生成了 ID,会导致两个致命问题:
但它也有个非常容易踩坑的点:它采用 “写入时推断 ”。
你只需要 pip install chromadb。然后在代码里写一句 chromadb.PersistentClient。它就会在你的项目目录下建一个普通文件夹,把所有数据存在里面。没有服务进程,不需要配置端口,随时打包带走。
利用 Metadata 中埋好的 source 标签,在入库前,一键清空该文档在库里的所有旧数据,然后重新完整插入。
这样,当你重新训练后 入库时为了防止重复落库或者数据污染,Zui稳妥和简单的Zuo法是:
但实际上我们并不是按照这个思路编写代码的,因为我们这次要用到的向量数据库 chromadb,它天然就是为这些场景而生的,所以我们的实际编码思路应该是:
第二次:用 bge-small 算出来的 维向量数组,没有存在 SQLite 里而是被塞进了一个用 C++ 写的底层图索引库——hnswlib。
等到查询时通过分层方式,先查询SQLite再查询hnswlib,NengZuo到极致提速。
比如第一句话多说了几个字,导致第一章后续所有切片dou跟着偏移变化了。
无法geng新和删除:Ru果你的文档改了一个错别字,你想geng新向量库。因为你不知道 ChromaDB 当初给这段话分配了什么 ID,你就没法精准替换它。
RAG中的一些小问题
说实话,有时候咱就是说不想用那些复杂的配置,简单就好。
不需要docker,不需要端口,不需要关心一大堆环境问题,就是这么简单优雅。
按照常规编程思路来说我们的思路通常是这样的:
docs_ids.append))
六、先删后插
当你的原始文档geng新了切分后的块会发生剧烈的“雪崩移位”。
为什么百度不收录我的文章呢?
哈哈,这个问题啊,其实有hen多原因的,你懂的,有时候可Neng是因为内容不够优质,或者是关键词优化没Zuo好。
比如说你的内容Ru果太单薄,或者geng新频率太低,dou可Neng会影响收录的。
所以咱得好好优化一下多输出高质量内容,并且保持一定的geng新频率,这样应该就会好hen多吧。
所以处于工程上的考量,ChromaDB 把 ID 的控制权交给了开发者,开发者必须在insert时主动传入 ids。
尝试执行以下命令:
collection.delete
# 执行写入
collection.add(
documents=docs_texts,
metadatas=docs_metadatas,
ids=docs_ids
)
七、测试代码
你Ke以在 demo 工程获取到生成向量库的代码。
Ru果你对id稳定有比较大的诉求,那就选方案2,Ru果没有,只是用它Zuodemo或者Zuo文档检索,Ke以先用方案1,简单高效。
它不需要你提前像写 SQL 那样定义表结构、定义 维度、定义余弦相似度算法。你往里扔什么模型算出来的向量,它就自动锁死什么格式。
思路上完全正确!
其核心代码如下所示:
目前Zui主流的Zuo法有两种:
没错,这节课的目标是:利用上面的工具,生成句向量,并且存起来。
市面上有非常多的向量数据库,比如老牌的 Milvus、云端的 Pinecone、或者 Qdrant。但我们选择了 ChromaDB,原因只有两个字:优雅。
在使用 chromadb 之前,我们需要了解它一个相比于传统关系型数据库差异Zui大的点:
敬请期待!
本节课我们完成了向量化和入库。
下节课,我们将完成RAGZui后的拼图:查询!
回顾前面的内容吧!咱们一步步来的,对吧?!
好,我们先回顾一下前两节课的核心内容:
第一次:存入一段带有 Metadata 的数据以及它的原始文本时这部分数据是被存放在本地的 SQLite 关系型数据库里的。
python .\lesson_09\split_and_save.py
即可kan到切分、向量化、入库成功。
当你发起一次带条件的查询时SQLite 先干活,挑出符合 Metadata 条件的文档 ID 集合;然后把这个集合扔给 hnswlib,说:“兄弟,别全库搜了只在这几个 ID 对应的图节点里帮我找出离问题向量Zui近的 个!”这就保证了既有 % 的条件准确率,又有毫秒级的向量搜索速度。 嗯,对,就这样!hen简单吧~哈,不信你试试kan哈~
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback