news 2026/6/26 1:01:37

从零开始做一个AI Agent(六)文本切块:chunk、metadata、语义类型和 embedding 状态

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零开始做一个AI Agent(六)文本切块:chunk、metadata、语义类型和 embedding 状态

从零开始做一个 AI Agent:以 Java Web RAG 学习助手为例

本文是一套面向技术博客专栏的完整教程。它不是只讲概念,而是以当前项目为真实案例,从一个最小后端 API 出发,逐步扩展到课程资料知识库、RAG 问答、轻量级 Agent Harness、工具注册表、执行 Trace、答案校验、学习记忆和前端工作台。

示例项目定位:

面向 Java Web 课程资料的 RAG Agent 学习助手

用户可以上传课程课件、实验指导书、代码文件和配置文件。系统会解析资料、切块、建立检索索引;用户提交学习任务后,Agent 会判断任务类型、规划步骤、调用工具、生成回答、校验引用,并把执行过程展示给前端。


专栏总目录

  1. 项目总览:从普通问答到课程学习 Agent
  2. 技术栈和工程结构:FastAPI、Vue、SQLite、RAG、Agent Harness
  3. 后端基础设施:配置、数据库、模型和 Schema
  4. 资料上传:文件存储、文档记录和重建索引
  5. 文档解析:PDF、Word、PPT、Markdown、代码文件如何进入系统
  6. 文本切块:chunk、metadata、语义类型和 embedding 状态
  7. 检索系统:关键词检索、向量检索、query rewrite 和 rerank
  8. LLM 与 Embedding Provider:stub、OpenAI-compatible API 和本地模型接入
  9. Chat 问答入口:兼容普通问答,同时接入 Agent 主链路
  10. Agent Harness:一次 Agent run 的生命周期
  11. Planner、Executor 与 Tool Registry:Agent 如何规划和调用工具
  12. Agent 校验、安全边界与资料不足处理
  13. Agent 记忆:短期上下文、长期学习画像和推荐下一步
  14. 前端工作台:资料管理、Agent 任务、Trace、历史和健康状态
  15. 测试、局限和演进:从教学项目走向生产级 Agent SaaS

第 6 篇:文本切块:chunk、metadata、语义类型和 embedding 状态

6.1 为什么要 chunk

大文档不能直接进入检索和 Prompt。chunk 的作用是:

控制单段长度 保留来源信息 支持局部检索 支持局部引用 支持 embedding

6.2 切块入口

文件:

backend/app/services/chunking.py

入口函数:

defchunk_parsed_document(parsed:ParsedDocument,max_chars:int=900,overlap_chars:int=120,)->list[ChunkData]:

默认策略:

每块最大 900 字符 相邻块重叠 120 字符

重叠的意义是避免知识点刚好被切断。

6.3 ChunkData 结构

@dataclass(frozen=True)classChunkData:content:strchunk_type:strsource_title:strsource_path:strsource_page:int|Nonelanguage:str|Nonemetadata:dict[str,Any]

这些字段最终会写入chunks表。

6.4 LLM metadata enrichment

每个 chunk 会尝试调用 LLM 生成元数据:

semantic_type entities summary

允许的 semantic_type:

concept lab_step code error exam_hint configuration general

如果 LLM 不可用,系统会兜底:

代码 chunk -> semantic_type = code 其他 chunk -> semantic_type = general

这体现了项目的稳定性原则:LLM 增强可以失败,但核心入库流程不能因为 LLM 不可用就完全不可用。

6.5 文档入库状态流转

文件:

backend/app/services/ingestion.py

状态流转:

uploaded -> processing -> chunked -> indexed

失败时:

failed + error_message

入库流程会先删除旧 chunks,再写入新 chunks,避免 reindex 后出现重复数据。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 0:56:28

模板驱动型文档系统:云原生PDF自动化生成原理与实践

1. 项目概述:当“模板”成为文档生产的操作系统你有没有过这种经历:手头有一篇写得不错的行业分析,想快速做成一份体面的PDF报告发给客户;或者刚整理完一套培训资料,却卡在排版上——字体不统一、页眉页脚对不上、目录…

作者头像 李华
网站建设 2026/6/26 0:51:58

设计师的母语革命:FigmaCN如何让中文用户效率翻倍

设计师的母语革命:FigmaCN如何让中文用户效率翻倍 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 作为一名中文设计师,你是否曾因Figma的英文界面而苦恼&#xf…

作者头像 李华
网站建设 2026/6/26 0:46:01

jQuery XSS漏洞深度解析:从原理到修复的安全编码实践

1. 项目概述:一次对前端安全“老将”的深度体检最近,前端开发圈子里关于jQuery一个潜在安全风险的讨论又热了起来。作为一个从jQuery 1.x时代就开始写前端的老兵,我对这个消息一点也不意外。jQuery,这个曾经统治了Web前端开发近十…

作者头像 李华
网站建设 2026/6/26 0:42:03

Outfit字体深度解析:企业级开源字体架构设计与性能优化最佳实践

Outfit字体深度解析:企业级开源字体架构设计与性能优化最佳实践 【免费下载链接】Outfit-Fonts The most on-brand typeface 项目地址: https://gitcode.com/gh_mirrors/ou/Outfit-Fonts 作为现代品牌自动化设计的核心组件,Outfit字体通过其完整的…

作者头像 李华
网站建设 2026/6/26 0:39:36

消息队列在系统中的实践

消息队列在系统中的实践 在现代分布式系统中,消息队列(Message Queue)作为一种高效、可靠的异步通信机制,被广泛应用于解耦系统组件、削峰填谷、提高系统可扩展性等场景。无论是电商秒杀、日志处理,还是微服务间的通信…

作者头像 李华
网站建设 2026/6/26 0:34:07

GPT-4不是升级,而是认知基础设施的诞生

1. 这不是一次升级,而是一次认知范式的迁移“GPT-4”这四个字母在2023年夏天之后,已经不能再被简单理解为“ChatGPT的下一代模型”。它背后那篇由微软研究院Sebastien Bubeck团队主导、题为《Sparks of Artificial General Intelligence》(人…

作者头像 李华