🤖 系列:Java工程师转AI Agent 3个月学习计划
👤 作者:宸丶一 | 28岁Java程序员,正在学习 AI Agent 开发中ing...
🎯 今日目标: 人机协作、Goal/停止条件、防止"乐观停止"
💬 个人格言: 代码改不改变世界我不知道,但先让我准时下班。
📖 前言
在 Day 11 的学习中,我们掌握了多 Agent 协作的核心概念,学会了用 LangGraph 构建多 Agent 系统。
今天,我们进入 Day 12 的学习:人机协作 + Goal/停止条件。
如果说 Day 11 是"团队协作",那么 Day 12 就是"人机协作"。人机协作让 Agent 和人类一起工作,各取所长,共同完成任务。
特别的是,今天我们还结合了小米开源的 MiMo-Code 框架,学习了其中的 Goal/停止条件机制,并采用了深度思想的学习模式,通过开放性思考题来加深理解。
🎯 学习目标
- 理解人机协作的核心概念
- 掌握 Goal / 停止条件的实现
- 学习如何防止"乐观停止"
- 结合 MiMo-Code 框架学习最佳实践
📚 核心概念
1. 什么是人机协作?
定义: Agent 和人类一起工作
Java 对标: 人工审批流程
理解: 人机协作就像一个开发团队,Agent 负责自动化任务,人类负责决策和确认。
本质: 人机协作的本质是"优势互补"
| 角色 | 优势 | 劣势 |
|---|---|---|
| Agent | 速度快、不知疲倦、一致性高 | 缺乏创造力、难以处理异常 |
| 人类 | 有创造力、能处理异常、有判断力 | 速度慢、会疲劳、一致性低 |
为什么需要人机协作:
- 效率提升 — Agent 处理重复任务,人类处理复杂任务
- 质量保证 — 人类可以审核 Agent 的输出
- 风险控制 — 危险操作需要人类确认
- 用户体验 — 人类可以提供更自然的交互
2. Goal / 停止条件
Goal: 任务目标
停止条件: 任务完成的标准
裁判模型: 评估任务是否真正完成
为什么需要 Goal / 停止条件:
- 明确目标 — 让 Agent 知道要做什么
- 质量保证 — 确保任务真正完成
- 风险控制 — 防止 Agent 过早停止
- 资源管理 — 避免无限循环
为什么需要裁判模型:
- 客观评估 — Agent 可能"乐观停止",裁判模型客观评估
- 多维度评估 — 裁判模型可以从多个维度评估
- 防止误判 — 避免 Agent 自己判断自己完成
- 质量保证 — 确保任务真正完成
3. 防止"乐观停止"
什么是"乐观停止":
- Agent 可能会过早停止
- Agent 可能会"自我满足"
- Agent 可能会忽略未完成的任务
如何防止"乐观停止":
- 裁判模型评估 — 独立评估任务是否完成
- 最大尝试次数 — 限制 Agent 的停止尝试
- 多维度检查 — 从多个维度检查任务完成情况
- 用户反馈 — 收集用户反馈,判断任务是否完成
"0.99 问题":
- Agent 可能会满足于 99% 的完成度
- 但剩下的 1% 可能很重要
- 需要裁判模型来判断是否真正完成
🔄 MiMo-Code 框架学习
MiMo-Code 简介
MiMo-Code 是小米开源的 AI 编程智能体,拥有跨会话记忆。
核心特性:
- 多智能体 — build、plan、compose 三种模式
- 持久化记忆 — 基于 SQLite FTS5 的跨会话记忆
- 智能上下文管理 — 自动检查点、上下文重建
- 任务追踪 — 树状任务系统
- Goal / 停止条件 — 防止"乐观停止"
MiMo-Code 的 Goal / 停止条件
MiMo-Code 的实现:
/goal命令设置停止条件- 裁判模型评估对话内容
- 判断条件是否真正满足
学习价值:
- 学习如何设计 Goal / 停止条件
- 学习如何实现裁判模型
- 学习如何防止"乐观停止"
🧠 深度思想学习模式
为什么采用深度思想学习模式?
传统学习模式:
- 代码填空 — 重复性高,容易枯燥
- 固定答案 — 限制思维,缺乏创新
- 被动学习 — 缺乏主动思考
深度思想学习模式:
- 开放性设计 — 激发创造力
- 深度分析 — 培养分析能力
- 创新设计 — 培养创新思维
- 主动思考 — 提升学习效果
深度思想学习模式的特点
| 特点 | 说明 | 效果 |
|---|---|---|
| 开放性 | 没有标准答案 | 激发创造力 |
| 深度性 | 需要深入分析 | 培养分析能力 |
| 创新性 | 需要提出创新想法 | 培养创新思维 |
| 主动性 | 需要主动思考 | 提升学习效果 |
深度思想学习模式的实践
思考题示例:
开放性设计题:
- 设计一个 "智能客服系统"
- 设计一个 "代码审查系统"
- 设计一个 "智能写作助手"
深度分析题:
- 分析人机协作的本质
- 分析 Goal / 停止条件的作用
- 分析人机协作的未来
创新设计题:
- 创新的人机协作方式
- 创新的 Goal / 停止条件
- 创新的人机协作场景
🎲 随机题型考核
为什么采用随机题型考核?
传统考核模式:
- 固定题型 — 容易预测,缺乏挑战
- 重复练习 — 容易枯燥,缺乏兴趣
- 被动应对 — 缺乏主动思考
随机题型考核:
- 随机题型 — 增加挑战性
- 多样化练习 — 增加趣味性
- 主动应对 — 提升思考能力
随机题型考核的特点
| 特点 | 说明 | 效果 |
|---|---|---|
| 随机性 | 随机选择题型 | 增加挑战性 |
| 多样性 | 多种题型 | 增加趣味性 |
| 主动性 | 需要主动应对 | 提升思考能力 |
随机题型考核的实践
支持的题型:
- 代码填空 — 理解核心 API
- 代码重构 — 优化不好的代码
- 代码对比 — 分析两个实现的优缺点
- 场景分析 — 设计实际场景的解决方案
- 代码 Review — review 并提出改进建议
- 性能优化 — 优化性能不好的代码
- 代码翻译 — 将 Java 代码翻译成 Python
- 架构设计 — 设计系统架构
- 代码测试 — 编写测试用例
- 错误分析 — 分析错误原因
🆚 人机协作 vs 无人协作
| 特性 | 无人协作 | 人机协作 |
|---|---|---|
| 效率 | 高 | 中 |
| 质量 | 中 | 高 |
| 安全性 | 低 | 高 |
| 适用场景 | 简单任务 | 复杂任务 |
简单说:
- 无人协作 — Agent 自动完成所有任务
- 人机协作 — Agent 和人类一起工作
💻 代码示例
示例 1:人机协作系统
执行流程:
用户输入: 删除所有文件
↓
助手 Agent: 危险操作,需要人类确认
↓
人类确认: 确认执行?(yes/no)
↓
人类输入: yes
↓
继续执行: 即将执行:删除所有文件
代码:
from typing import TypedDict
from langgraph.graph import StateGraph, END
# 定义状态
class HumanInTheLoopState(TypedDict):
messages: list
current_task: str
task_result: str
needs_human_input: bool
human_input: str
needs_confirmation: bool
confirmed: bool
# 定义助手 Agent
def assistant_agent(state: HumanInTheLoopState) -> HumanInTheLoopState:
current_task = state.get("current_task", "")
if "天气" in current_task:
result = "北京今天晴,25度,微风"
needs_human_input = False
needs_confirmation = False
elif "删除" in current_task:
result = f"即将执行:{current_task}"
needs_human_input = False
needs_confirmation = True
else:
result = f"已处理:{current_task}"
needs_human_input = False
needs_confirmation = False
return {
**state,
"task_result": result,
"needs_human_input": needs_human_input,
"needs_confirmation": needs_confirmation
}
# 定义人类确认节点
def human_confirmation_node(state: HumanInTheLoopState) -> HumanInTheLoopState:
current_task = state.get("current_task", "")
print(f"任务: {current_task}")
# 模拟人类确认
confirmed = True # 模拟确认
return {
**state,
"confirmed": confirmed,
"needs_confirmation": False
}
# 创建工作流图
graph = StateGraph(HumanInTheLoopState)
graph.add_node("assistant", assistant_agent)
graph.add_node("human_confirmation", human_confirmation_node)
graph.set_entry_point("assistant")
graph.add_conditional_edges(
"assistant",
lambda state: "human_confirmation" if state.get("needs_confirmation") else "end",
{
"human_confirmation": "human_confirmation",
"end": END
}
)
graph.add_edge("human_confirmation", END)
# 编译并运行
app = graph.compile()
result = app.invoke({
"messages": [{"role": "user", "content": "删除所有文件"}],
"current_task": "删除所有文件",
"task_result": "",
"needs_human_input": False,
"human_input": "",
"needs_confirmation": False,
"confirmed": False
})
print(result["task_result"])
示例 2:Goal / 停止条件系统
执行流程:
设置 Goal: 获取北京天气
↓
工作者 Agent: 执行任务
↓
想停止?: 是
↓
裁判 Agent: 评估是否真正完成
↓
目标达成?: 是
↓
END
代码:
from typing import TypedDict
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
# 定义状态
class GoalState(TypedDict):
messages: list
current_task: str
task_result: str
goal: str
goal_achieved: bool
wants_to_stop: bool
stop_reason: str
judge_result: bool
# 定义工作者 Agent
def worker_agent(state: GoalState) -> GoalState:
current_task = state.get("current_task", "")
if "天气" in current_task:
result = "北京今天晴,25度,微风"
else:
result = f"已处理:{current_task}"
wants_to_stop = True
stop_reason = "任务已完成"
return {
**state,
"task_result": result,
"wants_to_stop": wants_to_stop,
"stop_reason": stop_reason
}
# 定义裁判 Agent
def judge_agent(state: GoalState) -> GoalState:
goal = state.get("goal", "")
task_result = state.get("task_result", "")
stop_reason = state.get("stop_reason", "")
# 调用 LLM 评估
llm = ChatOpenAI(model="mimo-v2-flash", base_url="api.xiaomimimo.com/v1")
prompt = f"""
目标:{goal}
任务结果:{task_result}
停止原因:{stop_reason}
请评估:这个任务是否真正完成了?
回答 "yes" 或 "no",并说明原因。
"""
response = llm.invoke([{"role": "user", "content": prompt}])
judge_result = "yes" in response.content.lower()
return {
**state,
"goal_achieved": judge_result,
"judge_result": judge_result
}
# 创建工作流图
graph = StateGraph(GoalState)
graph.add_node("worker", worker_agent)
graph.add_node("judge", judge_agent)
graph.set_entry_point("worker")
graph.add_conditional_edges(
"worker",
lambda state: "judge" if state.get("wants_to_stop") else "worker",
{
"judge": "judge",
"worker": "worker"
}
)
graph.add_conditional_edges(
"judge",
lambda state: "end" if state.get("judge_result") else "worker",
{
"end": END,
"worker": "worker"
}
)
# 编译并运行
app = graph.compile()
result = app.invoke({
"messages": [{"role": "user", "content": "查询北京天气"}],
"current_task": "查询北京天气",
"task_result": "",
"goal": "获取北京今天的天气信息",
"goal_achieved": False,
"wants_to_stop": False,
"stop_reason": "",
"judge_result": False
})
print(result["task_result"])
print(f"目标达成: {result['goal_achieved']}")
🎓 学习收获
1. 核心概念理解
- 人机协作 = Agent 和人类一起工作
- Goal / 停止条件 = 设置目标,裁判评估
- 防止"乐观停止" = 确保任务真正完成
- 裁判模型 = 独立评估任务是否完成
2. MiMo-Code 框架学习
- Goal / 停止条件 — 学习如何设计目标和停止条件
- 裁判模型 — 学习如何实现独立评估
- 防止"乐观停止" — 学习如何防止过早停止
3. 深度思想学习
- 开放性设计题 — 提升设计能力
- 深度分析题 — 提升分析深度
- 创新设计题 — 提升创新能力
4. 随机题型考核
- 随机性 — 增加挑战性
- 多样性 — 增加趣味性
- 主动性 — 提升思考能力
📝 总结
Day 12 的学习让我们从"团队协作"升级到"人机协作"。
核心收获:
- 人机协作的核心概念
- Goal / 停止条件的实现
- 防止"乐观停止"的机制
- MiMo-Code 框架的学习
- 深度思想学习模式的实践
- 随机题型考核的实践
学习路径:
Day 1-8: Python 基础 + API 调用
↓
Day 9: Agent 源码解析
↓
Day 10: LangGraph
↓
Day 11: 多 Agent 协作
↓
Day 12: 人机协作 + Goal/停止条件 (本文)
↓
Day 13: 持久化记忆
↓
Day 14: 任务追踪
下一步:
- Day 13:持久化记忆
- Day 14:任务追踪
- Day 15:子智能体系统
📚 参考资料
系列文章:
- Day 11:多 Agent 协作
- Day 12:人机协作 + Goal/停止条件 (本文)
- Day 13:持久化记忆
作者简介: 宸一,Java 工程师,正在学习 AI Agent 开发中ing...