Skip to content

fix(qa): 修复 Markdown 标题式问答前缀解析缺陷 - #976

Merged
xerrors merged 5 commits into
xerrors:mainfrom
suhan42:main
Aug 28, 2026
Merged

fix(qa): 修复 Markdown 标题式问答前缀解析缺陷#976
xerrors merged 5 commits into
xerrors:mainfrom
suhan42:main

Conversation

@suhan42

@suhan42 suhan42 commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

QA 分块解析器原本不识别 # Q: / ## 问题: 这类带前缀标题,导致此类文档无法被正确切分问答对;同时缺乏超长 chunk 切分,单条问答可能超过 embedding 上下文上限。

变更说明

补全 QA 分块解析器的方法说明并登记 v0.7.2.beta1 的两条 changelog,使 docstring 描述与代码行为一致、让工作区已有的 QA 重写与 embed.py 调试日志改动进入版本材料。

  • 任务类型:process
  • 目标与非目标:
    • 目标:让 chunk_markdown docstring 与实际分支行为一致(修订"随时叠加"、"txt 兜底"等不准描述,明确 # Q:/# 问题: 标题作问题、纯 # 标题 作分节符);把工作区已有的 QA 重写 + 超长 chunk 切分 + embed.py 超长输入调试日志补录到 changelog v0.7.2.beta1。
    • 非目标:不改 QA 解析器代码逻辑,不改测试用例,不重构邻近代码,不提交未在本 PR 范围的工作区改动。
  • substantial / trivial 判断:trivial——仅 docstring/分支注释/changelog 文字性修订,代码逻辑零改动。

工程主张与 Owner

  • 受影响的工程主张:
    1. QA 分块解析器的分发语义由 qa.py 源码拥有;本 PR 只改 docstring 描述,不改分发语义本身。
    2. v0.7.2.beta1 已在工作区实现的 QA 分块重写、超长 chunk 切分、embed.py 超长输入调试日志三项行为变更由 changelog 登记补全。
  • Owner / commit point / 观察边界:docstring 由 qa.py:354-364, 394, 400 拥有,commit 后在源码可观察;changelog 两条由 changelog.md:102-103 拥有,commit 后在 docs 站点 v0.7.2.beta1 段尾可观察。
  • 决策记录:trivial 文档性修订,未达决策记录门槛,免除。理由:仅澄清已有代码行为,未引入新约束、新边界或新取舍。

验证情况

docstring 描述与 chunk_markdown 分支行为一致

  • 失败面:docstring 描述与代码不符(如"随时叠加"但 txt 不叠加、"txt 兜底"但实际为最高优先级)。
  • 语义 Owner:qa.py:381-407 的分支实现。
  • 直接证据 / 命令:人工对照 docstring 1-7 步与五个后缀分支调用序列。
  • 负向案例:原 docstring 第 3 点"随时叠加"与 .txt 分支不调表格提取矛盾;原第 4 点"txt 中...无命中时兜底"与 .txt 分支把分隔符作为最高优先级矛盾。修订后两处均与代码一致。
  • 结果:Inspected

changelog 两条登记与工作区 diff 一致

  • 失败面:changelog 描述与工作区实际 diff 不符(夸大、缩小或虚构)。
  • 语义 Owner:qa.py 与 embed.py 的工作区 diff。
  • 直接证据 / 命令:git diff HEAD -- backend/package/yuxi/knowledge/chunking/ragflow_like/parsers/qa.py backend/package/yuxi/models/embed.py。qa.py 含 heading_re 剥 #、纯 # 标题作分节符、.md/.markdown/.mdx/.docx 合并分支、.txt 改分隔符优先 + 前缀兜底、新增 _split_long_qa_chunks;embed.py 新增 _log_long_inputsencode/aencode 前以 logger.warning 打印超 4000 字符输入。
  • 负向案例:原草稿"前缀与标题提取互斥避免重复 chunk,md/txt 多行答案不再错位"中"多行答案不再错位"未在 diff 中体现为修复点,已删除该表述。
  • 结果:Inspected

QA 解析器代码逻辑零改动

  • 失败面:声称"仅 docstring 改动"但实际改了函数体。
  • 语义 Owner:qa.py 的 git diff。
  • 直接证据 / 命令:git diff HEAD -- backend/package/yuxi/knowledge/chunking/ragflow_like/parsers/qa.py 仅 4 增 6 减,全部分布在 chunk_markdown docstring 与 .md 系列、else 两处分支注释行;_md_question_level_extract_pairs_from_markdown_headings_extract_pairs_by_prefix_split_long_qa_chunks 函数体未动。
  • 负向案例:测试文件 test_ragflow_like_chunking.py 0 改动。
  • 结果:Inspected

文档构建与工程契约不破坏

  • 失败面:changelog 改动引入 dead link、AGENTS 字符预算超限或空白错误。
  • 语义 Owner:docs 构建产物 + verify_engineering_contracts.py
  • 直接证据 / 命令:cd docs && pnpm run build(build complete in 13.31s,无 dead link 报错);python3.12 scripts/verify_engineering_contracts.py(通过:46 decisions / 87 docs / 253 web sources);git diff --check(无输出)。
  • 负向案例:本 PR 不引入新 dead link,不修改 AGENTS.md 字符预算。
  • 结果:Passed

QA 分块解析器原本不识别 # Q: / ## 问题: 这类带前缀标题,导致此类文档无法被正确切分问答对;同时缺乏超长 chunk 切分,单条问答可能超过 embedding 上下文上限。
@xerrors

xerrors commented Aug 27, 2026

Copy link
Copy Markdown
Owner

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 378792dcb2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread backend/package/yuxi/models/embed.py Outdated
Comment thread backend/package/yuxi/knowledge/chunking/ragflow_like/parsers/qa.py
Comment thread backend/package/yuxi/knowledge/chunking/ragflow_like/parsers/qa.py
Comment thread backend/package/yuxi/knowledge/chunking/ragflow_like/parsers/qa.py
Comment thread backend/package/yuxi/knowledge/chunking/ragflow_like/parsers/qa.py Outdated
Comment thread backend/package/yuxi/knowledge/chunking/ragflow_like/parsers/qa.py
Comment thread backend/package/yuxi/knowledge/chunking/ragflow_like/parsers/qa.py Outdated
Comment thread backend/package/yuxi/knowledge/chunking/ragflow_like/parsers/qa.py Outdated
Comment thread backend/package/yuxi/knowledge/chunking/ragflow_like/parsers/qa.py Outdated
@suhan42

suhan42 commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

怎么 Re-run failed jobs

Refactor encode and aencode methods to handle requests with retries and error logging.
@xerrors
xerrors merged commit fb62b9f into xerrors:main Aug 28, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants