Agent 速成笔记 · 第 16 章 毕业设计:构建属于你的多智能体应用
Agent 速成笔记 · 第 16 章 毕业设计:构建属于你的多智能体应用
源:Datawhale《Hello-Agents》第 16 章 | 定位:综合实战与全书收口 | 一句话:把前 15 章学到的范式、工具、记忆、协议、评估收进一个可运行、可评审、可展示的开源项目里。
0. 一章速览(30 秒)
- 一句话:毕业设计的形式是「往 Hello-Agents 的共创项目仓库提一个开源项目」——一份可运行的 Notebook 或 Python 脚本 + 完整依赖 + 清晰 README,走 Fork → 分支 → Pull Request → 社区 review → 合并主仓库的完整协作流程。
- 本章解决什么问题:前面每章都在交付零件(范式、工具、记忆、通信协议、训练、评估),本章解决的是装配问题——选什么题、按什么标准设计、装哪些零件、交付哪些东西、凭什么算通过验收。
- 必须记住的 5 个点:
- 项目目录名固定为
{GitHub用户名}-{项目名称}(例:jjyaoao-CodeReviewAgent),PR 标题固定为[毕业设计] 项目名称 - 简短描述——这两条是硬格式,不是建议; - 选题三原则:解决真实问题、在有限时间和资源内能做完、能清晰展示技术能力;"为了技术而技术"被明确排除;
- 技术栈不是越多越好:范式、记忆、RAG、通信协议、强化学习都是按问题需要逐项加装的选配件,本章从未要求你把 15 章的功能全开;
- 质量下限由一份 9 条测试清单 和两处硬约束把住:项目总大小不超过 5MB,视频、大型数据集、模型文件一律不进主仓库;
- 评审是真实环节:社区成员会 review 你的代码并提改进建议,你要能改、能回帖、能说明改了什么。
- 项目目录名固定为
1. 毕业设计的意义与交付形式(16.1)
1.1 为什么要做毕业设计
- 是什么:一次「把学过的知识选择性整合进一个完整项目」的综合练习。原文强调的关键词是「选择性」——不是把 HelloAgents 的所有组件堆上去。
- 真正的难点在哪:学过理论、会调 API 并不等于会做系统。本章直接点出三个待回答的问题:如何把知识应用到实际问题中?如何设计一个完整的系统?如何处理各种边界情况和异常?——注意第三问,它决定了一个作品是"能演示的 demo"还是"能被别人跑起来的项目"。
- 能力清单(毕设真正要产出的东西):
- 独立设计并实现一个完整的智能体应用;
- 熟练使用 HelloAgents 框架的各种功能;
- 掌握 Git 与 GitHub 的基本操作;
- 会写清晰的项目文档;
- 参与开源社区的协作开发;
- 最终得到一个可以展示的技术作品。
- 工程要点:动手实践是本章反复出现的判断——「学习技术最好的方式不是看教程,而是动手实践」。这也决定了选题要偏"能跑、能演示",而不是偏"能讲清原理"。
1.2 交付形式:四条硬要求
毕业设计以开源项目形式提交到 Hello-Agents 的共创项目仓库(Co-creation-projects 目录)。
| 项 | 要求 | 关键细节 |
|---|---|---|
| 项目命名 | {你的GitHub用户名}-{项目名称} |
示例:jjyaoao-CodeReviewAgent |
| 项目内容 | Notebook 或脚本 + 依赖 + README | 可运行的 .ipynb 或 Python 脚本、requirements.txt、README.md;可选演示视频、截图、数据集 |
| 提交方式 | GitHub Pull Request | 先 Fork 上游仓库,再从特性分支发起 PR |
| 评审流程 | 社区 review → 改进 → 合并 | 社区成员会 review 代码并提改进建议,通过后合并到主仓库 |
- 为什么格式要这么死:共创仓库是多人共用的单一目录,命名规范、依赖清单、文档格式统一之后,评审成本才可控。这也是后面"大文件硬约束"的同一个理由。
2. 选题:原则、方向与示例(16.2)
2.1 三条选题原则
一个好的毕业设计项目应当同时满足三点:
- 有实用性:解决真实的问题,而不是为了技术而技术;
- 可完成:在有限的时间和资源内做得完(这条是排除项:需要大规模训练、需要昂贵数据源、需要长期运营的题目直接出局);
- 能展示技术能力:项目的形态要让人一眼看出你用了哪些智能体技术。
容易踩的坑:把"用上 RL"或"用上五个 Agent"当成选题目标。判据应反过来——先看问题需要什么,再决定装什么。
2.2 五个推荐选题方向
原文给出五个方向、每个方向 4 个候选题目,可以任选其一,也可以自提新想法。
| 方向 | 候选题目 |
|---|---|
| 生产力工具 | 智能代码审查助手、智能文档生成器、智能会议助手、智能邮件助手 |
| 学习辅助 | 智能学习伙伴、智能论文助手、智能编程导师、智能语言学习助手 |
| 创意娱乐 | 智能故事生成器、智能游戏 NPC、智能音乐推荐、智能菜谱助手 |
| 数据分析 | 智能数据分析师、智能股票分析、智能舆情监控、智能竞品分析 |
| 生活服务 | 智能健康助手、智能理财助手、智能购物助手、智能家居控制 |
方向与前文的对应关系(串联归纳,非原文结论):创意娱乐类的"智能游戏 NPC"与第 15 章赛博小镇同源(角色化 NPC + 好感度一类的状态系统);数据分析类的"舆情监控/竞品分析"与第 14 章自动化深度研究智能体的 TODO 驱动研究范式同源(收集 → 汇总 → 报告);"智能家居控制"这类需要跨进程/跨工具生态的题目,天然适合挂接第 10 章的通信协议与第 13 章的 MCP 工具集成。也就是说,前 15 章的三个实战项目已经为你示范了三种题型,选相近方向等于自带参考实现。
2.3 选题示例剖析:CodeReviewAgent
原文用"智能代码审查助手"完整走了一遍"从问题到成果"的推导,这是最值得照抄的模板:
- 问题分析:代码审查很重要,但人工审查耗时且容易遗漏;现有静态分析工具只能发现语法错误,无法理解代码逻辑,因此需要一个能理解代码语义、提供深度分析的智能助手。
—— 注意这个论证结构:现有工具的能力缺口在哪,恰恰是 LLM 的用武之地。这就是"为什么必须用智能体,而不能写个脚本"的答案。 - 核心功能(五条):代码质量分析(代码风格、命名规范、注释完整性)、潜在 bug 检测(逻辑错误、边界条件问题、资源泄漏)、性能优化建议(识别性能瓶颈、提出优化方案)、安全漏洞扫描(SQL 注入、XSS 等安全问题)、最佳实践推荐(结合语言特性与设计模式)。
- 预期成果:一个可运行的 Jupyter Notebook 展示完整审查流程;支持 Python、JavaScript 等主流语言;产出结构化 Markdown 格式的审查报告;报告里有具体的代码示例与改进建议。
可复用的规律:输出格式要在选题阶段就定死(这里是 Markdown 报告)。输出格式一旦确定,工具的参数设计、README 的"使用示例"、
outputs/目录里的样例文件全都自然落位。
3. 从需求到架构:一套可复用的设计流程
本节是串联:本章只给出了"交付什么、按什么标准验收",把 13~15 章三个完整项目(智能旅行助手、自动化深度研究智能体、赛博小镇)的推进方式抽象成流程,就是下面这套动作。
3.1 五步设计流程
- 问题定义:谁在什么场景遇到什么痛点?现有工具为什么不够?——照 2.3 的论证结构写成 2~3 句话,写不出来说明题目没想清楚。
- 能力清单拆分:把功能逐条判定归属——能用确定性代码做的,绝不交给 LLM(统计函数个数、检查行长超 79 字符、缩进是否为 4 的倍数,这些用
ast和字符串检查就是几行 Python);只有"理解语义、给建议、做归纳"这类真正需要推理的部分才交给模型。 - 定架构形态:单 Agent 还是多 Agent,要不要挂记忆/RAG/通信协议,按 3.2 的清单逐项决策。
- 定接口与数据:工具名、参数名与类型(
name/type/description/required)要写清楚,因为这段描述会直接进入提示词,决定模型会不会正确调用;输出结构(如 Markdown 报告)同步冻结。 - 定演示叙事:Notebook 的阅读顺序本身是设计的一部分——先一段基础功能,再一段复杂场景,必要时再加一段性能评估。
3.2 技术选型决策清单(什么时候装什么)
| 决策项 | 装它的信号 | 缓装/不装的信号 |
|---|---|---|
| 单 Agent | 任务能在一个上下文里走完,步骤数可控,无角色分工 | 出现"必须并行"或"必须互相挑错"的需求 |
| 多 Agent | 子任务可分离且角色不同(如旅行计划中的多角色协作、赛博小镇的多个 NPC) | 只是想让代码看起来复杂;通信开销、上下文膨胀、调试难度会同步上涨 |
| 工具系统 | 需要外部信息或外部动作(读文件、查库、跑静态分析) | 纯文本生成类任务 |
| 记忆 / RAG | 需要记住用户偏好、跨会话状态,或要检索私有知识库 | 单轮、无状态、知识全在提示词里的任务 |
| 通信协议 | 工具需要复用外部生态、要跨进程/跨服务调用 | 工具全是本项目自写的本地函数 |
| 上下文工程 | 工具返回很长、多轮之后上下文明显膨胀 | 短对话、少量工具调用 |
| Agentic-RL | 你能构造出可验证的奖励 + 可反复交互的环境与算力 | 没有评分器、没法自动判定成败、算力受限(绝大多数毕设属于此类) |
| 性能评估 | 报告里要给指标(准确率、响应时间等),需要拿数据说话 | 纯演示型项目也应至少给出响应时间与样例成功率 |
- 判断口径的统一原则:每一项加装都必须能回答"去掉它会怎样"。如果去掉后效果没有可观察的差异,那它就是装饰,应该在文档里删掉而不是留在代码里。
4. 项目实施:阶段划分与里程碑
本节同样是串联——阶段名对应 16.4 的开发指南与 16.5 的提交流程,里程碑的判定标准来自本章的测试清单与格式要求。
| 阶段 | 目标 | 里程碑(可验证的完成信号) |
|---|---|---|
| 0 选题与范围冻结 | 把痛点、用户、成功标准写成一页纸 | 能用两三句话讲清"谁的什么痛点、现有工具为什么不行" |
| 1 最小闭环 | 单 Agent + 一两个工具先把主流程跑通 | Notebook 能从头执行到尾不报错,产出第一份结果 |
| 2 能力加装 | 按 3.2 清单逐项加,一次只加一项 | 每加一项都有前后可对比的效果记录 |
| 3 工程化 | 拆目录、写异常处理、补注释 | 9 条测试清单全部打勾 |
| 4 文档与演示 | README、依赖、样例输出、截图或视频 | 别人只拿仓库就能复现你的结果 |
| 5 开源协作 | 提 PR 并响应 review | 建议已改、已回帖、PR 通过合并 |
- 阶段 1 最容易被跳过,也最不该跳过:毕设最常见的失败模式是先花大量时间搭多 Agent 架构,最后没有一个完整跑通的演示。先闭环,再加装。
- 阶段 3 的"异常处理"是原文测试清单里的独立一条("处理了常见的异常情况")。参照示例项目的做法:工具函数里对空输入直接返回错误信息,对语法错误做捕获并返回可读提示,而不是让整条链路崩掉。
5. 交付物清单与质量标准
5.1 目录结构
你的用户名-项目名称/
├── README.md # 项目说明文档
├── requirements.txt # Python 依赖列表
├── main.ipynb # 主程序(含快速演示与完整功能)
├── .env.example # 环境变量示例
├── .gitignore # 忽略大文件
├── data/ # 数据文件(仅示例数据)
└── outputs/ # 输出结果与截图
当代码量变大时,可再拆出 src/,内部按 agents/、tools/、utils/ 三层组织——这与第 7 章 HelloAgents 的 core / agents / tools 分层是同一种思路:按职责分目录,接口保持统一。
5.2 四类交付物与质量线
| 交付物 | 必须包含 | 质量线 |
|---|---|---|
| 代码 | main.ipynb 或 Python 脚本,必要时含 src/ |
能正常运行不报错;有适当注释;异常情况有处理;文件和目录命名规范 |
| 依赖清单 | requirements.txt |
列出全部依赖;核心依赖 hello-agents[all]>=0.2.7,可视化可选 matplotlib>=3.7.0、plotly>=5.14.0,Web 可选 fastapi>=0.109.0、uvicorn>=0.27.0 |
| 项目文档 | README.md |
说明清晰、有可照做的使用示例、有亮点与未来计划 |
| 演示与报告 | outputs/ 下的报告与截图;视频走外链 |
输出结果符合预期;大文件不入库 |
5.3 README 的固定章节
一份合格的 README 按这个顺序写:项目名称与一句话描述 → 项目简介(解决什么问题、有什么特色、适用于什么场景)→ 核心功能清单 → 技术栈(HelloAgents 框架、所用智能体范式、工具与 API、其他依赖)→ 快速开始(环境要求如 Python 3.10+、安装依赖、配置 API 密钥、运行项目)→ 使用示例(带代码与运行结果)→ 项目亮点 → 性能评估(准确率、响应时间等)→ 未来计划 → 贡献指南 → 许可证(示例用 MIT)→ 作者信息 → 致谢。
- 为什么技术栈一栏很关键:它把"我用了哪个范式"直接写在了门面上。示例项目的技术栈写的是:HelloAgents 框架(SimpleAgent + ToolRegistry)、Python AST 模块(代码解析)、ModelScope API(Qwen2.5-72B 模型)——这种粒度正好:说清楚用了什么,不堆名词。
5.4 Notebook 的七段结构(骨架)
第 1 段 项目介绍:名称、简介、作者信息、日期(Markdown 单元格)
第 2 段 环境配置:安装依赖、导入 SimpleAgent / HelloAgentsLLM / BaseTool、load_dotenv()
第 3 段 工具定义:继承 BaseTool,声明 name / description,实现 run(query)->str
第 4 段 智能体构建:创建 LLM -> 创建 Agent(system_prompt=...) -> agent.add_tool(...)
第 5 段 功能演示:示例1 基础功能、示例2 复杂场景,各打印输入与结果
第 6 段 性能评估(可选):跑评估代码并给出指标
第 7 段 总结与展望:实现的功能、遇到的挑战及解决方案、未来改进方向
这段骨架在干什么:把"能读懂"变成一种结构约束——评审者按 1→7 的顺序读,就自动获得背景、环境、实现、演示、评估、反思六段信息,不必在散乱单元格里找人。
5.5 最小实现的代码骨架
class CodeAnalysisTool(Tool):
def __init__(self):
super().__init__(name="code_analysis",
description="分析Python代码的结构、复杂度和潜在问题")
def run(self, parameters):
code = parameters.get("code", "")
if not code:
return "错误:代码不能为空"
try:
tree = ast.parse(code)
functions = [n for n in ast.walk(tree) if isinstance(n, ast.FunctionDef)]
classes = [n for n in ast.walk(tree) if isinstance(n, ast.ClassDef)]
return str({"函数数量": len(functions), "类数量": len(classes),
"代码行数": len(code.split('\n')),
"函数列表": [f.name for f in functions]})
except SyntaxError as e:
return f"语法错误:{str(e)}"
def get_parameters(self):
return [ToolParameter(name="code", type="string",
description="要分析的Python代码", required=True)]
registry = ToolRegistry()
registry.register_tool(CodeAnalysisTool())
registry.register_tool(StyleCheckTool())
agent = SimpleAgent(name="代码审查助手", llm=HelloAgentsLLM(),
system_prompt=SYSTEM_PROMPT, tool_registry=registry)
review_result = agent.run(f"请审查以下Python代码:\n\n```python\n{sample_code}\n```")
这段在干什么:它示范了毕设项目的标准装配方式——确定性工作做成工具(ast 解析统计、PEP 8 风格检查),推理与表达交给 Agent,工具的 description 与 get_parameters() 共同构成模型看到的能力说明,最后由 system prompt 把"先调什么工具、报告包含哪几部分、输出 Markdown"三件事约束住。
示例中的风格检查工具只做两件具体判断:行长是否超过 79 字符、缩进是否为 0/4/8/12 空格的规范倍数——这就是"能用代码做的绝不交给 LLM"的落地样子。
5.6 提交前测试清单(验收自查)
- 代码能够正常运行,没有报错
- README 文档完整,说明清晰
requirements.txt包含所有依赖- 有清晰的使用示例
- 代码有适当的注释
- 输出结果符合预期
- 处理了常见的异常情况
- 项目结构清晰,文件命名规范
- 大文件已妥善处理
5.7 大文件规范(硬约束)
| 约束 | 数值 / 规则 |
|---|---|
| 项目总大小 | 不超过 5MB |
| 禁止直接提交 | 视频文件、大型数据集、模型文件 |
| 处理方案 | 外链(推荐)、独立资源仓库、只放示例数据 |
- 方案一:外部链接(推荐)。数据集可放百度网盘、Google Drive、Kaggle、HuggingFace Datasets;视频放 B 站、YouTube、腾讯视频;模型放 HuggingFace Models、ModelScope;图片走 GitHub Issues 或图床,并在 README 中给出链接与提取码。
- 方案二:独立资源仓库。资源多时单独建
项目名称-resources仓库,README 里写清克隆与拷贝路径。 - 方案三:只放示例数据。主仓库里保留小规模样例(如
data/sample.csv100 条),完整数据集(如 10 万条)走外链并在文档中说明。 - 为什么这么严:主仓库要保持轻量化。一个仓库被几个几百 MB 的文件污染后,所有协作者的克隆成本都会变高——这是开源协作中最典型的"一个人的方便,所有人的代价"。
5.8 提交 Pull Request 的规范
- 提交流程:
git status检查改动 →git add→git commit -m "feat: 添加XXX毕业设计项目"→git push origin feature/你的项目名称。 - 提交类型(commit type):
feat新增功能或项目(毕设用这个)、fix修复 bug、docs文档更新、style格式调整、refactor重构、test测试、chore其他(如依赖更新)。 - PR 标题格式:
[毕业设计] 项目名称 - 简短描述,例如[毕业设计] CodeReviewAgent - 智能代码审查助手、[毕业设计] StudyBuddy - AI学习伙伴、[毕业设计] DataAnalyst - 智能数据分析师。 - PR 要填的字段:项目信息(名称、作者、项目类型)、项目简介(2~3 句)、核心功能清单、技术亮点(用了什么范式、实现了什么、优化了什么)、演示效果(截图或 GIF,可选)、自检清单(代码可运行、README 完整、依赖完整、有使用示例、有注释)、其他说明。
- 分支选择:Base repository 为
datawhalechina/hello-agents、Base branch 为main、Head repository 为你的 Fork、Compare branch 为feature/你的项目名称。 - 响应 review:在 PR 页面查看评论 → 按建议改代码 →
git commit -m "fix: 根据review意见修改XXX"→ 再次 push → 在 GitHub 上回复说明你的修改。
6. 常见问题与避坑
- 为了技术而技术:用上了多 Agent、RAG、RL,但解决的是一个三行脚本就能解决的问题。题目必须顶得住"为什么必须用智能体"这一问。
- 跳过最小闭环,直接上大架构:多 Agent 的调试复杂度远高于单 Agent,先跑通单 Agent 主流程再加装。
- 大文件混进主仓库:超过 5MB 的项目、视频、数据集、模型文件都属于禁项;提交前用测试清单核一遍。
- README 写成散文:评审者按 5.3 的章节顺序找信息,缺"安装依赖/配置密钥/运行项目"就没人能复现你的成果。
- API 密钥泄漏:把真实密钥写进 Notebook 并提交是高频事故。示例项目提供的正确做法是:给出
.env.example,把LLM_API_KEY、LLM_BASE_URL、LLM_MODEL_ID、LLM_TIMEOUT(示例为 60)等参数走环境变量或.env文件;main.ipynb中的os.environ[...]写法只是示例占位。 - 输出没有落盘:只
print结果是不够的,把报告写进outputs/(如outputs/review_report.md)才能作为交付物被检查。 - 只提 PR 不看评论:评审意见不改、不回帖,项目就停在半路;PR 不是一次性动作。
- 选题过大:需要持续获取付费数据源、需要训练模型、需要长期运营的题目,在有限时间资源内做不完。
- 依赖不全:
requirements.txt漏项会让别人的第一次运行直接失败,这也是测试清单里单列一条的原因。
7. 未来方向与前沿趋势(16.7)
原文章末把"毕设完成"定位成新的起点,并给出四条可继续推进的路径。它们同时也是智能体领域的延伸方向:
| 方向 | 具体内容 |
|---|---|
| 继续深入理论 | 更多智能体范式与算法、提示工程与上下文工程、多智能体协作机制 |
| 扩展技术栈 | 学 Web 开发做完整应用、学数据库做数据持久化、学部署把应用上线 |
| 打磨项目 | 添加更多功能、优化性能与用户体验、完善测试与文档 |
| 参与社区 | 帮助其他学习者、参与 Hello-Agents 框架开发、分享经验与心得 |
- 与前文技术的接口(串联归纳):理论学习这条线直接对应第 4 章的经典范式、第 9 章的上下文工程、第 10~11 章的通信协议与 Agentic-RL;"学部署、学数据库、做完整应用"这条线已经在第 13~15 章被示范过三次——旅行助手(多智能体 + MCP 工具集成 + 前端)、深度研究智能体(TODO 驱动 + 服务层 + 前端交互)、赛博小镇(NPC 智能体 + 好感度系统 + 后端服务 + Godot 场景与前后端通信),三者都是"从需求出发设计系统架构,再向下补工程能力"的样例。
- 趋势层面的判断(原文原话):AI 技术日新月异,智能体领域充满无限可能;希望保持好奇心持续学习新技术、用 AI 解决实际问题创造价值、把经验与成果分享给社区、不断打磨作品。原文的最强一句收在这:最好的学习方式就是动手实践。
8. 高频考点 & 易错点速查
- 项目命名格式
{GitHub用户名}-{项目名称}、PR 标题格式[毕业设计] 项目名称 - 简短描述——两个格式必考。 - 交付物三件套:可运行的
.ipynb/ Python 脚本、requirements.txt、README.md;演示视频与数据集是可选且不入主仓库。 - 选题三原则:有实用性(不是为技术而技术)、有限时间资源内可完成、能清晰展示技术能力。
- 五个选题方向及其定位:生产力工具、学习辅助、创意娱乐、数据分析、生活服务。
- 大文件约束:项目总大小 ≤ 5MB;禁提交视频、大型数据集、模型文件;三种处理方案中"外部链接"是推荐项。
- commit type 七类(
feat/fix/docs/style/refactor/test/chore),毕设用feat。 - 交付质量由"9 条测试清单 + 社区 review"共同把关,PR 提交后必须响应 review 意见。
- 易混点:框架提供的便利 ≠ 项目需要的能力——HelloAgents 支持多种范式、记忆、RAG、协议、RL,但毕设要求的是按问题选用,而非全量使用。
9. 与前后章节的衔接
本章是全书收口:输入来自第 1~15 章的全部零件——第 4 章与第 7 章的范式与框架(SimpleAgent、ReActAgent、PlanAndSolveAgent、ReflectionAgent、FunctionCallAgent、ToolRegistry)、第 8 章的记忆与检索、第 9 章的上下文工程、第 10 章的通信协议、第 11 章的 Agentic-RL、第 12 章的评估指标,以及第 13~15 章三个完整项目提供的三套架构范例。输出是一个属于你自己的、可被别人跑起来的开源作品。至此没有后续章节:读完本章,剩下的动作只有一件——选一个题目,把最小闭环先跑通。

浙公网安备 33010602011771号