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),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →