Python 现代开发学习笔记

18-01 比较分块结果

本章题解 · 全部练习

题目

将块长度依次改成 80、120、200,打印块内容与来源;用同一组问题比较正确证据是否完整进入前两项,说明选择哪组参数的依据。

推导与做法

固定同一语料与同一问题,只改变 chunk_size=80、120、200,保持 overlap=20。每组都保存实际块数、前两块内容、来源和分数。

选择时先看完整操作是否落在证据里:例如“切片是视图”和“需要 copy”是否一起保留;再比较无关文本量与块数。较大块可能保住上下文,也可能稀释检索分数,不能只按最高分选。题解输出三组完整材料,沿材料读出选择理由。

过程图

%% 每个节点保留输入、执行位置或执行后的实际状态。 flowchart TD S0["同一语料分别按80、120、200分块"] S1["每组重新编码与建立索引"] S0 --> S1 S2["同一问题取归属过滤后的前两块"] S1 --> S2 S3["展开来源与正文,检查完整事实是否被保留"] S2 --> S3 classDef default fill:#EEF0FB,stroke:#4657B5,color:#24324A linkStyle default stroke:#4657B5

实现与运行

查看带注释实现。本题与相关处理函数放在同一章节代码文件中;启动工具负责定位相邻项目和选择题号。

在配套目录的 LangChain与AgentRuntime/study_agent 中运行。先按项目 README 执行 uv sync --locked。本章先执行 uv sync --locked --all-extras。18-06 还需执行 uv pip install -e "../../FastAPI/api_project",接入前面 API 声明的依赖;之后使用 --no-sync 保留这份组合环境。

# 使用项目解释器运行本题,题号决定执行哪一组演示。
uv run --no-sync python "../../学习索引/参考实现/代码/ch18.py" 18-01

程序按题号输出处理后的值、查询结果或状态。先和前面的手算比较,再修改一项输入重跑。

查看本题运行结果
# 与上面的手算状态和题目数值逐项比较。
[
  {
    "chunk_size": 80,
    "chunks": 12,
    "top2": [
      {
        "source": "numpy.md",
        "text": "NumPy 切片与拷贝",
        "score": 0.5
      },
      {
        "source": "numpy.md",
        "text": "NumPy 的基本切片通常得到视图,视图和原数组共享数据。修改切片中的元素可能改变原数组。希望保留原数组时,先调用 copy(),再修改新数组。",
        "score": 0.3553711577967667
      }
    ]
  },
  {
    "chunk_size": 120,
    "chunks": 8,
    "top2": [
      {
        "source": "numpy.md",
        "text": "NumPy 切片与拷贝\n\nNumPy 的基本切片通常得到视图,视图和原数组共享数据。修改切片中的元素可能改变原数组。希望保留原数组时,先调用 copy(),再修改新数组。",
        "score": 0.4545454545454546
      },
      {
        "source": "alice-plan.md",
        "text": "Alice 的阅读计划\n\nAlice 本周准备先复习 NumPy 切片与 copy,再把学习记录保存到 SQLite。",
        "score": 0.21875
      }
    ]
  },
  {
    "chunk_size": 200,
    "chunks": 5,
    "top2": [
      {
        "source": "numpy.md",
        "text": "NumPy 切片与拷贝\n\nNumPy 的基本切片通常得到视图,视图和原数组共享数据。修改切片中的元素可能改变原数组。希望保留原数组时,先调用 copy(),再修改新数组。\n\n排查共享问题时,可以用 np.shares_memory 检查两个数组是否共享内存。先分别记录修改前后的数组值,再解释变化来自哪个对象。",
        "score": 0.36997003669797196
      },
      {
        "source": "alice-plan.md",
        "text": "Alice 的阅读计划\n\nAlice 本周准备先复习 NumPy 切片与 copy,再把学习记录保存到 SQLite。",
        "score": 0.21875
      }
    ]
  }
]

笔记正文与全部题解 · Ctrl / ⌘ K