新闻详情

新闻详情

首页 / 资讯中心 / 详情

Qwen-Agent 是怎么把 100 页 PDF 读给 AI 的?文档分块与存储 3 个机制全解析

发布时间:2026/9/10 17:53:41来源:尧图网络
Qwen-Agent 是怎么把 100 页 PDF 读给 AI 的?文档分块与存储 3 个机制全解析
Qwen-Agent 是怎么把 100 页 PDF 读给 AI 的文档分块与存储 3 个机制全解析【免费下载链接】Qwen-AgentAgent framework and applications built upon Qwen3.0, featuring Function Calling, MCP, Code Interpreter, RAG, Chrome extension, etc.项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen-Agent把一份 200 页的 PDF 丢给 Qwen-Agent 做多文档问答模型经常只看到前几页内容。问题出在文档分块上块太大超上下文块太小断语境同一文件还会被反复解析。下面拆开 Qwen-Agent 的 DocParser Storage 这两个工具看它怎么把文件变成可检索的文本块。完整数据流从文件上传到分块召回主线是一条链路解析 → 数 token → 分块 → 缓存 → 检索。两个工具分工doc_parser.py 负责切storage.py 负责存。分块和检索都先查缓存同一个文件问第二次不会重新解析。什么时候分块token 阈值决定切不切它解决白干活问题小文档塞得下没必要再切。先数全篇 token再跟阈值比if total_token max_ref_token: content [Chunk(contentget_plain_doc(doc), ...)] # 整篇文档当 1 个 chunk else: content self.split_doc_to_chunk(doc, url, titletitle, parser_page_sizeparser_page_size)max_ref_token默认 20000。全文不到 2 万 token 就不切超了才走分块算法。这个阈值是个粗粒度开关只看体量不看结构图省事设成一个数字你可以通过环境变量QWEN_AGENT_DEFAULT_MAX_REF_TOKEN调大匹配更大的模型上下文。chunk 怎么切先段落、再句子、最后按 token 硬切它解决长文档怎么均匀切开、又不把语境切断的问题。算法是三级降级整段塞段落超过当前 chunk 剩余 token 就不强塞单段太长就按句子切中文用。英文用.逐句装单句还装不下用 tokenizer 直接按 token 截断。_sentences re.split(r\. |。, txt) # 段落先拆成句子每个 chunk 最多parser_page_size个 token默认 500。注意 chunk 内容开头带[page: N]页码标记回答时能溯源到第几页。chunk 重叠为什么设 150 字符按段落边界切开时上一块的末尾句子可能正是下一块理解的前提。_get_last_part从上一块末尾往前取末尾段落不足 150 字符就整段拿来段落太长就按句回溯凑满 150 字符的完整句子塞进下一块开头def _get_last_part(self, chunk: list) - str: available_len 150 for i in range(len(chunk) - 1, -1, -1): # 从块尾往前回填到 150 字符为止且不切半句话取舍是重叠内容会重复占 token。但相比语境断裂的代价值得。150 字符上限也防止重叠吃掉整个 chunk 的预算。缓存键怎么拼URL 哈希 分块参数它解决同一个文件被反复解析的问题。缓存键由两部分拼成cached_name_chunking f{hash_sha256(url)}_{str(parser_page_size)} try: record json.loads(self.db.get(cached_name_chunking)) return record # 命中缓存直接跳过解析 except KeyNotExistsError: doc self.doc_extractor.call({url: url}) # 没命中才现场解析URL 的 SHA-256 哈希当文件名再拼上parser_page_size。为什么拼参数同一份文件按 500 和按 1000 切出来的块不一样参数进键两套结果互不覆盖。存储本身很朴素一个 key 对应一个文本文件默认落在workspace/tools/storage/目录肉眼可查不用接数据库。跑起来多文档问答 3 行启动pip install -U qwen-agent[rag,gui] python examples/parallel_doc_qa.py脚本在 examples/parallel_doc_qa.py。进网页后上传文件提问agent 先把文件拆开做并行子问答再用 retrieval 工具召回相关 chunk 汇总答案。想改代码先git clone https://gitcode.com/GitHub_Trending/qw/Qwen-Agent到本地再动手。调参清单parser_page_size默认 500→ 文档长句多、希望块内语境更完整时 → 调大到 800~1000 → chunk 数变少检索命中整段更稳。max_ref_token默认 20000→ 模型上下文大、小文档想绕过分块时 → 调大 → 整篇成一个 chunk检索和回答更快。QWEN_AGENT_DEFAULT_WORKSPACE→ 知识库文件多、磁盘慢时 → 指向更快的磁盘 → 缓存读写更快。分、切、缓存这三件事是 Qwen-Agent 文档知识库的地基。想看召回排序怎么做去 search_tools/ 目录。【免费下载链接】Qwen-AgentAgent framework and applications built upon Qwen3.0, featuring Function Calling, MCP, Code Interpreter, RAG, Chrome extension, etc.项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen-Agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

TypeScript Record 类型实战指南:在 Refine 中构建类型安全的 API 数据映射与 React 组件注册表 2026/9/10 18:38:47

TypeScript Record 类型实战指南:在 Refine 中构建类型安全的 API 数据映射与 React 组件注册表

TypeScript Record 类型实战指南:在 Refine 中构建类型安全的 API 数据映射与 React 组件注册表 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https…

阅读更多 →
年度复盘与计划实操指南:从四象限打分到目标拆解 2026/9/10 18:38:47

年度复盘与计划实操指南:从四象限打分到目标拆解

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

阅读更多 →
桌面Agent不是高级宏:语义理解驱动的智能自动化 2026/9/10 18:38:47

桌面Agent不是高级宏:语义理解驱动的智能自动化

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

阅读更多 →
Thinglinks开源物联网平台架构与工业协议实践 2026/9/10 18:38:47

Thinglinks开源物联网平台架构与工业协议实践

1. Thinglinks-iot开源物联网平台概述 第一次接触Thinglinks是在去年一个工业设备远程监控项目中,当时我们需要一个能快速对接Modbus、OPC UA协议的轻量级物联网平台。经过多轮技术选型,最终选择了这个基于Spring Cloud Alibaba构建的开源方案。它不仅完…

阅读更多 →
Disjointness of two types implies that neither is a subtype of the other 2026/9/10 18:38:47

Disjointness of two types implies that neither is a subtype of the other

Disjointness of two types implies that neither is a subtype of the other 【免费下载链接】ruff An extremely fast Python linter and code formatter, written in Rust. 项目地址: https://gitcode.com/GitHub_Trending/ru/ruff This is a regression test for ht…

阅读更多 →
xhEditor PDF导入集成:实现文本高亮与注释的完整方案 2026/9/10 18:35:47

xhEditor PDF导入集成:实现文本高亮与注释的完整方案

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞