
对应第一个月计划第 2 周第 3 天理解 Embedding、余弦相似度和向量库完成 chunks 入库与 Top-K 检索。建议投入45 小时。当天交付本地 Chroma 索引、检索脚本和至少 6 条实验记录。![Day 10 Embedding 与本地向量检索]](https://i-blog.csdnimg.cn/direct/9058ee9a824f45e2b50a3fbc6d1c8fa2.png)一、今天完成后要达到什么程度你应当能够解释 Embedding 如何把文本映射为固定维度向量。说明向量相近代表语义可能相关不代表事实正确。理解余弦相似度的直觉及距离/分数方向差异。将 Day 09 的 chunks 与 metadata 写入本地 Chroma。对查询生成向量并返回 Top-K 文本、分数和来源。用同义改写、精确关键词和资料外问题观察语义检索边界。二、必须掌握的知识点1. EmbeddingEmbedding 模型把文本转换成向量如何申请年假 → [0.12, -0.08, ..., 0.31]含义相近的文本通常在向量空间中更接近。向量不能直接还原为可靠事实也不是 LLM 的回答。2. 一致性要求文档与查询必须使用兼容的 Embedding 模型。更换模型或维度后通常要重建索引。记录模型名、维度和索引版本。不应把不同模型产生的向量放在同一可比较空间。3. 相似度与距离余弦相似度关注向量夹角cosine(a, b) (a · b) / (||a|| × ||b||)不同库可能返回“相似度”或“距离”。不要假设值越大越好先查接口定义并用已知样本验证。4. 向量库记录每条记录至少包括id稳定 chunk IDdocumentchunk 正文embedding文本向量metadata来源、页码、标题、版本和权限。5. Top-KTop-K指返回排名最靠前的 K 个候选K 太小可能漏掉正确证据K 太大增加噪声、延迟和上下文成本排名靠前不代表内容一定支持答案。6. 检索评测至少关注正确 chunk 是否进入 Top-K排名位置来源是否可回溯是否出现重复或无关块资料外问题是否仍返回“看似相关”的弱结果。三、一步步完成今天的任务第 0 步检查 Day 09 产物约 15 分钟确认chunks.jsonl每行可解析为 JSON有text和metadatachunk_id唯一来源和页码/章节可定位不含敏感信息。第 1 步创建项目约 20 分钟mkdirvector-search-labcdvector-search-lab uv init uvaddchromadb openai python-dotenvmkdir-pdata chroma_dbtouchindex_chunks.py search.py experiment-record.md .env.example将 Day 09 的chunks.jsonl复制到data/。第 2 步配置 Embedding 服务约 20 分钟在本地.env设置服务商要求的变量并确保.env被 Git 忽略EMBEDDING_API_KEY EMBEDDING_BASE_URL EMBEDDING_MODEL如果选择本地 Embedding 模型也要记录模型名、版本和维度。第 3 步做向量直觉实验约 35 分钟分别生成以下文本的向量A员工如何申请年假 B休假申请要走什么流程 C服务器如何安装数据库计算 A-B 与 A-C 的余弦相似度。预期 A-B 更接近但结果必须以实际模型为准。通过标准能解释为什么高相似度仍不能证明答案正确。第 4 步建立本地 Chroma 索引约 45 分钟index_chunks.py应完成读取并校验 JSONL批量生成 Embedding使用稳定 ID 写入 collection一并保存正文和 metadata将索引持久化到chroma_db/打印成功、跳过和失败数量。避免重复运行产生重复记录明确使用 upsert 还是重建。第 5 步实现 Top-K 查询约 40 分钟search.py接收问题并输出排名 分数或距离 chunk_id 标题 来源 正文摘要初始设置top_k3。同时保留原始值不要在没有依据时把距离伪装成百分比相关度。第 6 步完成 6 条检索实验约 40 分钟测试集至少包含与原文措辞相同的问题同义改写专有名词或编号需要跨段理解的问题容易混淆的相邻主题文档中不存在的问题。在experiment-record.md记录预期 chunk、实际 Top-K、排名、噪声和原因。第 7 步比较 K 值约 25 分钟在同一测试集上比较K1、3、5正确证据是否被召回重复和噪声如何变化返回文本总长度如何变化。不要根据单个问题确定全局 K。第 8 步故障与更新实验约 25 分钟至少验证更换 Embedding 模型后旧索引不能直接混用删除文档时能根据 source 或 ID 清除旧 chunks空查询或超长查询有明确错误API 失败不会留下半完成且无法识别的索引状态。第 9 步复盘与口头验收约 20 分钟回答Embedding 与生成模型有什么不同为什么查询和文档要使用同一向量空间余弦相似度高说明什么、不说明什么Top-K 为什么不是越大越好metadata 在向量检索中有什么作用为什么资料外问题也可能返回候选四、当天验收清单已将 Day 09 chunks 写入本地向量库。可重复构建或更新索引不产生失控重复。Top-K 输出保留 ID、来源、正文和分数/距离。已完成至少 6 条查询和 K 值对比。能说明分数方向和 Embedding 模型一致性。已记录索引模型、维度和版本。.env、真实密钥和向量库运行数据未被误提交。完成后Day 10 即为通过Day 11 将加入 BM25、融合、过滤、查询改写和重排。