⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

D5:课程总结

Easy Data x AI 课程 · 术篇 · 第五期

走完术篇的旅程,回头看看你做了什么、学到了什么、以及这一切背后的那条主线。

开场:你已经走了多远

D1 你第一次用代码调用大模型,让它从"只能说"变成"能做事"。

D2 你搭建了一个能同时处理向量、全文和关系数据的数据层。

D3 你把 D1 和 D2 连起来,构建了一个知识库问答系统,并亲眼看到了检索策略对最终效果的影响。

D4 你给 Agent 加了记忆,体验了"有记忆"和"没记忆"的 Agent 在对话中的天壤之别。

四期课程,四个动手实验,一条主线贯穿始终。

这一期,我们不引入新技术——我们站远一点,把这四期的内容串起来,看清楚它们在解决同一个问题的不同层面。

第一部分:D1 回顾——Tool Use 是一切的起点

大模型只能"说"

D1 的核心认知是:大模型本身只能生成文本,它无法主动查数据库、调 API、执行代码。它的能力边界就是"说"。

Tool Use 打破了这个边界。你在代码里定义工具(函数),告诉模型"你可以调用这些工具",模型在推理时会声明"我需要调用某个工具",你的代码去执行,结果传回来,模型继续推理。

这个"声明→执行→传回"的循环,就是 Agent 与外部世界交互的核心机制。

从单次调用到 Agent 循环

D1 的代码演进路径是:

d1_1  基础调用      → 一问一答
d1_2  多轮对话      → 手动维护消息历史
d1_4  Tool Use Mock → 手动编排工具调用(假数据)
d1_5  Tool Use Real → 手动编排 + 真实检索
d1_6  Agent 循环    → 自动化的"推理→行动→观察"多轮循环

d1_4/d1_5 里你手动写的那些 if/else 逻辑,在 d1_6 里被框架一行代码替代了。这不是偷懒——这是理解了底层机制之后,才能正确使用上层抽象。

D1 留下的判断

Agent 不是"更聪明的 ChatGPT",而是一个具有"感知→推理→行动"循环能力的系统。它的能力上限,取决于它能调用什么工具、工具能拿到什么数据。

第二部分:D2 回顾——数据层决定能力上限

为什么传统数据库不够用

AI 应用需要语义检索——用户问"有没有关于数据库性能优化的内容",不是在做关键词匹配,而是在做语义理解。传统数据库的全文搜索做不到这一点。

但纯向量搜索也有问题:遇到专有名词、版本号、错误码时,语义相似不等于内容正确。用户问"OceanBase 4.2 的 BUG-12345 怎么解决",纯向量搜索可能给你一个"语义相近但版本完全不对"的结果。

混合检索是完整方案

D2 的核心结论:向量检索 + 全文检索 + 关系过滤,三种能力缺一不可。

  • 向量检索:处理语义模糊的查询
  • 全文检索:精确匹配专有名词、版本号、错误码
  • 关系过滤:按结构化字段(时间、分类、来源)缩小范围

seekdb 在一个引擎里原生支持三种能力,不需要三个系统拼凑。

D2 留下的判断

AI 应用的数据层,不是"存数据的地方",而是"决定 Agent 能拿到什么信息"的地方。数据层的质量,直接决定 Agent 回答的质量。

第三部分:D3 回顾——亲眼看到数据层的影响

对比实验是最好的说明

D3 最重要的不是代码,而是那个对比实验:同样的查询,纯向量检索和混合检索的结果差距是肉眼可见的

特别是包含专有名词、版本号、错误码的查询——混合检索把正确答案排在第一位,纯向量搜索则可能给你一个"语义相近但完全错误"的结果。

这个实验验证了 P2 讲的核心判断:"AI 答得不好"的大多数根因在数据层,不在模型层。

Agentic RAG 的结构

D3 把 D1 的 Tool Use 和 D2 的数据层连接起来:

python
# Agent 通过 Tool Use 调用 seekdb 混合检索
tools = [hybrid_search_tool]

# 用户提问 → Agent 推理 → 调用检索工具 → 拿到结果 → 生成回答
response = agent.run(user_query, tools=tools)

这个结构是后续所有模块的基础。D4 的记忆系统,也是在这个结构上叠加的。

D3 留下的判断

换更强的模型之前,先检查你的检索策略。大多数时候,问题出在数据层,不在模型层。

第四部分:D4 回顾——记忆系统是数据问题

失忆的 Agent

没有记忆的 Agent,每次对话都是全新的开始。你告诉它"我是 Python 开发者,喜欢简洁的回答",下次打开程序,它什么都不记得了。

这不是模型的问题——模型本身没有持久化存储。这是一个数据问题:用户信息需要被存储、检索、管理。

三种长期记忆的工程实现

D4 把 P3 的产品概念落地成了工程实现:

记忆类型存储内容工程实现
语义记忆用户事实与偏好从对话中提炼关键事实,存入向量数据库,语义检索召回
情景记忆过去的成功经验存储历史案例,作为 few-shot 示例注入 Prompt
程序记忆行为规则System Prompt,Agent 可自我修改

三种记忆都在 Agent 推理循环之前注入到 Prompt 中——让 Agent 在开始推理时就已经"认识"这个用户。

记、忘、想起的数据挑战

  • :不是存原文,而是提炼关键事实(LLM 完成)
  • 想起:语义检索,和 RAG 是同一个机制
  • :艾宾浩斯遗忘曲线——旧记忆随时间降权,被使用时权重回升

PowerMem 在 LOCOMO 基准测试中准确率 78.7%,比"把所有历史对话塞进上下文"的暴力方案(52.9%)高出近 50%。把所有信息都"记住",效果反而不如有选择地记忆。

D4 留下的判断

记忆系统看起来是 AI 问题,拆到底是数据问题——怎么存、怎么查、怎么过期。

第五部分:一条主线贯穿始终

退一步看这四个模块:

D1  Tool Use     → Agent 与数据的连接方式
D2  seekdb       → 数据本身的存储与检索
D3  Agentic RAG  → 用数据回答问题
D4  Memory       → 用数据记住用户

每一个模块,做的事情都不一样。但它们底层解决的是同一件事:

Agent 的每一项能力,拆到底都是数据的存储与检索。数据层的质量,决定了 Agent 能力的上限。

这是 F2 画的那张地图中一开始就写下的判断。走完四个模块之后,你不再需要"相信"这个判断——你已经用代码和实验亲手验证了它。

我们的思考

从 D1 到 D4,有一件事反复出现:当 Agent 表现不好,第一反应不应该是"换个更强的模型",而应该是"检查数据层"。

D3 的对比实验证明了这一点——同一个模型,换了检索策略,效果天壤之别。D4 的记忆实验也证明了这一点——同一个模型,加了记忆系统,对话体验完全不同。

模型是固定的,数据是你能控制的。投资数据层,是 ROI 最高的工程决策。

如果你在这门课中只带走一个工程判断,带走这个:

与其为 Agent 的每一项能力分别搭建数据基础设施,不如先投资一个统一的、高质量的数据层。数据层做对了,Agent 的每一项能力都受益。数据层做错了,任何一项能力都会被拖累。

这节课要留下的印象

D1 到 D4 做的事情各不相同,但解决的是同一个问题:让 Agent 拿到更好的数据。Tool Use 是连接方式,seekdb 是存储基础,混合检索是召回策略,记忆系统是数据的生命周期管理。

课后行动

  1. 回顾四个 Notebook:从 D1 到 D4,你跑通了四个动手实验。花半小时回顾一遍,重点思考:

    • 哪些模块的内容可以直接用在你当前的项目中?
    • 你的项目中,Agent 最薄弱的环节是什么——是检索不准(D2-D3)、还是没有记忆(D4)、还是工具调用不稳定(D1)?
    • 最薄弱的环节,对应的是数据层的什么问题?
  2. 做一个对比实验:在你自己的知识库上,分别用纯向量检索和混合检索跑同一组查询,记录结果差异。特别关注包含专有名词、版本号的查询。

  3. 给你的 Agent 加记忆:选一个你在用的 Agent 应用,用 PowerMem 给它加上跨会话记忆。观察加了记忆之后,对话体验有什么变化。


欢迎各位老师在 https://github.com/datawhalechina/easy-data-x-ai 参与课程共建。

也欢迎各位老师加入 Data x AI 交流群~

Built with VitePress | GitHub 仓库