从零开始做一个 AI Agent(附录十一)项目中的相关注解

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

🎯本文是一套面向技术博客专栏的完整教程。它不是只讲概念,而是以当前项目为真实案例,从一个最小后端 API 出发,逐步扩展到课程资料知识库、RAG 问答、轻量级 Agent Harness、工具注册表、执行 Trace、答案校验、学习记忆和前端工作台。
🎯用户可以上传课程课件、实验指导书、代码文件和配置文件。系统会解析资料、切块、建立检索索引;用户提交学习任务后,Agent 会判断任务类型、规划步骤、调用工具、生成回答、校验引用,并把执行过程展示给前端。

在这里插入图片描述

项目中的相关注解

@dataclass(frozen=True)

@dataclass(frozen=True) 是 Python 里的一个装饰器,用来快速定义“数据对象”,并且让这个对象创建后不能再被修改。

拆开看:

from dataclasses import dataclass

@dataclass(frozen=True)
class RetrievedChunk:
    chunk_id: int
    document_id: int
    content: str
    score: float

等价于:Python 自动帮你生成 __init____repr____eq__ 等方法。

你就可以这样创建对象:

chunk = RetrievedChunk(
    chunk_id=1,
    document_id=10,
    content="LoginServlet 负责处理登录请求",
    score=0.8,
)

不用自己手写:

class RetrievedChunk:
    def __init__(self, chunk_id, document_id, content, score):
        self.chunk_id = chunk_id
        self.document_id = document_id
        self.content = content
        self.score = score

frozen=True 的意思是:对象创建之后字段不能改。

例如:

chunk.score = 0.9

会报错:

dataclasses.FrozenInstanceError

所以:

@dataclass(frozen=True)

可以理解成:

定义一个轻量级数据结构,并且让它不可变

在你当前项目里:

@dataclass(frozen=True)
class RetrievedChunk:
    chunk_id: int
    document_id: int
    content: str
    source_title: str | None
    source_path: str | None
    source_page: int | None
    language: str | None
    score: float

它表示“检索出来的资料片段”。

frozen=True 的好处是:

  • 防止后续代码误改检索结果
  • 让数据对象更可靠
  • 表示这个对象只是一个结果载体,不应该被业务逻辑继续修改

一句话:

@dataclass(frozen=True) = 自动生成数据类常用方法 + 创建后禁止修改字段。

本系列总目录

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
16. 技术细节复现
17. 附录一:SQLite与SQLAlchemy
18. 附录二:接入大模型
19. 附录三:配置ollama本地大模型/deepseek线上大模型
20. 附录四:Agent Harness API详解
21. 附录五:Agent 工具注册表详解
22. 附录六:工程化 Agent思维
23. 附录七:安装embedding模型详解
24. 附录八:本项目为啥不用LangChain
25. 附录九:UI界面详解
26. 附录十:整体核心流程详解
27. 附录十一:项目中的相关注解
28. 附录十二:手把手带你运行项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_codemonster

你的鼓励将是我最大的创作动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值