面试是双向选择,不是单向审问。这篇文章记录我作为面试官 5 年的经验和反思。
📌 为什么要学习面试方法
面试的重要性
对公司:
- 招到合适的人,提升团队战斗力
- 降低试错成本(招聘失败成本很高)
- 建立雇主品牌(面试体验影响口碑)
对候选人:
- 展示能力的机会
- 了解公司和团队
- 职业规划参考
面试是双向选择,不是单向审问。这篇文章记录我作为面试官 5 年的经验和反思。
对公司:
对候选人:
洞察不是天赋,而是一种可以训练的能力。这篇文章记录我对洞察的理解和实践方法。
洞察(Insight):透过现象看本质,发现事物内在规律和深层原因的能力。
简单说:就是能看到别人看不到的东西。
| 能力 | 特点 | 深度 | 例子 |
|---|---|---|---|
| 观察 | 看到表面现象 | 浅层 | "这个页面加载很慢" |
| 分析 | 找出直接原因 | 中层 | "因为接口响应时间 3 秒" |
| 洞察 | 发现根本规律 | 深层 | "用户流失的根本原因是价值传递不清晰" |
规划不是束缚,而是导航。这篇文章记录我对规划的理解和实践方法。
规划(Planning):为了实现目标,对资源、时间、行动的系统性安排。
简单说:就是从现状到目标的路线图。
| 概念 | 特点 | 时间跨度 | 例子 |
|---|---|---|---|
| 目标 | 想要达到的结果 | 长期 | "成为测试架构师" |
| 规划 | 实现目标的路径 | 中长期 | "3 年成长计划" |
| 计划 | 具体的行动安排 | 短期 | "本周学习清单" |
算法不是天才的专利,普通人也能通过科学训练达到熟练。
很多人写业务代码久了,会有一个困惑:我需要算法吗?
答案是:不一定需要比赛级算法能力,但扎实的算法基础是区分优秀工程师和普通工程师的关键分水岭:
| 维度 | 没有算法基础 | 有算法基础 |
|---|---|---|
| 问题分析 | 凭经验凑 | 抽象为已知模型 |
| 方案设计 | 试错法 | 复杂度分析后选优 |
| 性能优化 | 靠感觉 | 量化分析瓶颈 |
| 面试求职 | 临时抱佛脚 | 游刃有余 |

把"用 Agent 帮我学习"从一句话变成可执行的工业级流程:
5 Agent × 周分级 × 极简哲学 = 70 篇文章不是目的,掌握才是。
| 维度 | 旧版(4 Agent) | 新版(5 Agent) |
|---|---|---|
| 协作 | 4 步循环 + 双适用 | 5 步:Week Review 加入 |
| 难度 | 全程一样 | 🌱 W1 → 🌿 W2-3 → 🌳 W4-6 |
| 文档 | V2/V3/V4 历史 + 9×3 思维表 | 极简:5 步 + 难度表 |

从 V1 一个脚本走天下,到 V2 引入 4 Agent 协作,我的学习系统一直在演进。
但 V2 有几个不得不承认的问题:
痛点 1:版本分歧
痛点 2:代码冗余
痛点 3:state.json 越用越大
转折点是 6-26 那一天 — DeepSeek v4-pro 介入了。它对我的整个系统做了一次"工业级"重构。我花了一周时间消化、理解每一个 commit、跑通端到端验证。
今天这篇文章,总结这次重构的核心价值。
| 维度 | V2 | V3/V4 | 提升 |
|---|---|---|---|
| 脚本文件 | 1 个 | 3 个模块(Pipeline + Runtime + State) | 关注点分离 |
| 版本分歧 | 3 个并存 | 1 个统一版本 | 消除用户困惑 |
| Prompt 注入 | inline 拼装 | 自动从 agents/<name>.md 读取 |
消除 prompt 发散 |
| 状态管理 | 1 个膨胀的 state.json | 分层(state + progress + reviews) | 永远 < 2KB |
| 落盘自动化 | 手动处理输出 | 自动落盘到对应目录 | 零遗漏 |
| 答案输入 | input() 阻塞 |
三种 Provider 切换 | 支持无人值守 + 测试 |
| 思维激活 | 7 大(Content 用 3) | 9 大全激活 | 0 闲置 |
| 错误分析 | markdown 不可分析 | 结构化字段提取 | 可聚合统计 |
| 进度可视化 | 简单打印 | 思维统计 + 薄弱点检测 + 周报状态 | 盲点自动检测 |
| 框架接入 | Hermes 专有 delegate_task |
Runtime ABC,任意 Agent SDK 都能接入 | 可扩展 |
之前所有的"跑 Agent"逻辑都直接写 rt.delegate_task(...)。这意味着整个系统只能跑在 Hermes 上。
V4 引入 AgentRuntime ABC + StubRuntime + HermesRuntime:
class AgentRuntime(ABC):
@abstractmethod
def delegate_task(self, goal, context, toolsets) -> dict: ...
@abstractmethod
def delegate_tasks(self, tasks) -> list[dict]: ...
class HermesRuntime(AgentRuntime):
"""真实实现 — 用 Hermes delegate_task"""
def delegate_task(self, goal, context, toolsets):
return delegate_task(goal=goal, context=context, toolsets=toolsets)
def delegate_tasks(self, tasks):
return delegate_task(tasks=tasks)
class StubRuntime(AgentRuntime):
"""测试实现 — 返回固定 mock 数据"""
def delegate_task(self, goal, context, toolsets):
return {"summary": f"[Mock] {goal}", "tokens": {"input": 0, "output": 0}}
def delegate_tasks(self, tasks):
return [self.delegate_task(**t) for t in tasks]
这意味着什么?
LEARNING_OS_RUNTIME=hermes|stubV2 一个 state.json 包含:
V4 分成 4 层:
codebases/<name>/
├── state.json # 只存核心摘要(永远 < 2KB)
│ ├── schema_version
│ ├── day # 当前学到第几天
│ ├── colors # 5 大组件颜色地图
│ ├── scores # 考试分数历史
│ ├── errors # 错题薄弱点历史
│ ├── weekly_reports # 已完成周复盘
│ ├── plan # 6 周结构化计划(dict)
│ └── thinking_log # 每日使用的思维方法
│
├── progress/
│ ├── day-1.json # Day 1 完整每日结果
│ ├── day-2.json
│ └── week-N-review.json # 周复盘结构化摘要
│
├── content/
│ ├── day-1.md # Day 1 学习内容
│ ├── day-2.md
│ └── src-map.md / learning-plan-6weeks.md(Day 0 输出)
│
├── exams/
│ ├── exam-day-1.md # Day 1 考试题
│ └── exam-day-2.md
│
├── errors/
│ └── error-day-N.md # Day N 错题分析存档
│
└── reviews/
└── week-N-review.md # Week N 周复盘完整存档
好处:
V2 里每次调用 Content Agent 都要这样写:
content_result = rt.delegate_task(
goal="输出 Day N 学习内容",
context=f"""
【你的角色】
1. 分析代码库
2. 抽象建模
3. 类比推理
...
【任务】
生成 markdown,包含...
"""
)
结果:每次都要重复一段长长的 inline prompt,prompt 发散风险很高 — 我第 1 天写的和第 10 天写的不一样。
V4 引入 load_agent_prompt(),自动读 agents/content-agent.md 全文并注入:
content_prompt = load_agent_prompt("content") # 读 agents/content-agent.md
content_result = rt.delegate_task(
goal="输出 Day N 学习内容",
context=f"""
【你的角色 Prompt — 必须遵守】
{content_prompt} # 自动注入完整角色定义
代码库: {codebase_name}
今日目标: {today_goal}
Day {day-1} 结果: {previous}
...
"""
)
好处:
agents/<name>.md,单一事实来源这是 V4 解决的一个隐蔽但关键的问题 — 跑题。
V2/V3 里,Content Agent 在生成 Day 5 内容时,可能会"自然漂移"到 Day 10 的主题(比如它读完代码觉得某个概念重要就直接讲了)。结果就是:你的学习顺序被打乱。
V4 引入 Meta Agent 输出的 next_day_focus 作为硬约束:
previous = get_daily_result(codebase_name, day - 1) or {}
next_focus = previous.get("next_day_focus", "")
focus_constraint = ""
if next_focus:
focus_constraint = f"""
【⚠️ 强制聚焦 — 不可偏离】
上日 Meta Agent 明确指定今日聚焦: **{next_focus}**
你必须围绕这个主题生成今日内容,不可跳到其他周/模块。
"""
机制:
next_day_focus(指定 Day N+1 应聚焦的主题)progress/day-N.json 的 next_day_focus 字段V2 状态:7 大思维被使用,2 个闲置(deduction 推论假设从未用于 Content)。
V4 状态:9 大思维全部由某个 Agent 激活。
| 思维 | 负责 Agent | 强化方式 |
|---|---|---|
| 推论假设 (Deduction) | Content | 读代码前必须做 3 个假设 |
| 实验验证 (Empirical Testing) | Exam | 所有题目必须可在 REPL 跑通 |
| 类比推理 (Analogical) | Content | 每个组件找一个已知类比 |
| 归纳总结 (Induction) | Error + Meta | 找出错误规律 + 总结本周模式 |
| 第一性原理 (First Principles) | Content | 拆到不可拆 |
| 抽象建模 (Abstraction) | Content | 提取"组件 = 字段"模型 |
| 批判思维 (Critical) | Error | 找反例 + 边界 |
| 系统思维 (Systems) | Meta | 看整体关系 |
| 反事实推理 (Counterfactual) | Exam | 至少 1 道"如果不...会怎样"题 |
关键数据:在我的 show_progress 里,9 大思维使用统计可视化:
=== 9 大思维使用统计(共 2 天)===
abstraction ██░░░░░░░░ 2/2 (content,error)
analogical ██░░░░░░░░ 2/2 (content)
first-principles ██░░░░░░░░ 2/2 (content)
empirical-testing ██░░░░░░░░ 2/2 (exam)
counterfactual ██░░░░░░░░ 2/2 (exam)
critical-thinking ██░░░░░░░░ 2/2 (error)
induction ████░░░░░░ 4/2 (meta,error) ← Meta + Error 都用
systems-thinking ██░░░░░░░░ 2/2 (meta)
deduction ██░░░░░░░░ 2/2 (content) ← V4 新激活
零闲置。
V4 + Day 1 学 AgentScope Message 基座后,实际成绩:
{
"day": 1,
"content": "Day 1: Message 基座 — Msg 字段模型 + 6 种 Block + 3 工厂函数",
"exam_score": 88,
"exam_total": 100,
"evaluation": "A",
"level": "L3 (复现) + 接近 L4",
"color_change": "🔴 → 🟡",
"thinking_used": ["abstraction", "analogical", "first-principles", "counterfactual"],
"weak_points": [
"model_validator 完整逻辑",
"Pydantic discriminator 模式",
"6 种 Block 的具体字段",
"URLSource.type 永远 = 'url' 的设计哲学"
],
"completed_at": "2026-06-25",
"next_day_focus": "Block 子类(_block.py L11-100)"
}
4 大关键指标:
V3/V4 重构最深的体会,是把"少即是多,职责分离"做到了极致:
agents/<name>.md副产物:
ClaudeRuntime 就好)V5(接下来的):
一句话:从"几个 Agent 跑一跑"到"工业级多 Agent 系统",只差一个 DeepSeek v4-pro 介入。
欢迎在评论区聊聊你的学习系统是怎么设计的。
V1 → V2 关键升级:从"4 Agent 各自独立"到"4 Agent 协作循环"
核心改进:Content Agent 从"一次性生成 6 周计划"变成"每日学习教练"——根据前日结果动态调整当日内容。
V1 的 4 Agent 是"独立工具",但...
V1 的问题:
❌ Content Agent 一次性输出 6 周计划(静态)
❌ Exam Agent 一次性出 5 道题(一次性)
❌ 没有状态管理(每天从头开始)
❌ 用户能力没有"昨日数据"反馈给"今日内容"
从"理论"到"代码":4 个独立子 Agent 协作的完整方案
之前的文章《在 Hermes 上实现多 Agent 元认知学习系统》我写得太"理想化"——
把 4 个 Agent 当成 4 个完全独立的 AI 进程。
实际上,Hermes 的 4 Agent 实现有 3 种方式:
让 AI 帮你学习 = 从 L1 看过到 L5 精通的自动化路径
我做了 11 年技术,5 年 AI 转型,14 篇论文精读 + 95+ 博客。
今天这篇博客,是我把"元认知学习系统"从"概念"变成"可运行的 Hermes 多 Agent 系统"的完整方案。
我用 4 个 Agent(Content / Exam / Error / Meta)构建了一个完整的学习闭环:
从"问过"到"会做" = 从 L1 到 L5 的进化
我做了十几年的技术工作,5 年管理,最近几年系统化 AI 转型(十几篇论文精读 + 几十篇博客 + 多个 AI 项目作品)。
这条路上我最大的感悟不是"AI 有多强",而是**"我的学习本身需要元认知"**。
我曾经以为"我看过了 = 我会了",结果: