Day 12:人机协作 + Goal/停止条件 - 从自动化到智能化

0 阅读9分钟

🤖 系列: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/停止条件机制,并采用了深度思想的学习模式,通过开放性思考题来加深理解。


🎯 学习目标

  1. 理解人机协作的核心概念
  2. 掌握 Goal / 停止条件的实现
  3. 学习如何防止"乐观停止"
  4. 结合 MiMo-Code 框架学习最佳实践

📚 核心概念

1. 什么是人机协作?

定义: Agent 和人类一起工作

Java 对标: 人工审批流程

理解: 人机协作就像一个开发团队,Agent 负责自动化任务,人类负责决策和确认。

本质: 人机协作的本质是"优势互补"

角色优势劣势
Agent速度快、不知疲倦、一致性高缺乏创造力、难以处理异常
人类有创造力、能处理异常、有判断力速度慢、会疲劳、一致性低

为什么需要人机协作:

  1. 效率提升 — Agent 处理重复任务,人类处理复杂任务
  2. 质量保证 — 人类可以审核 Agent 的输出
  3. 风险控制 — 危险操作需要人类确认
  4. 用户体验 — 人类可以提供更自然的交互

2. Goal / 停止条件

Goal: 任务目标

停止条件: 任务完成的标准

裁判模型: 评估任务是否真正完成

为什么需要 Goal / 停止条件:

  1. 明确目标 — 让 Agent 知道要做什么
  2. 质量保证 — 确保任务真正完成
  3. 风险控制 — 防止 Agent 过早停止
  4. 资源管理 — 避免无限循环

为什么需要裁判模型:

  1. 客观评估 — Agent 可能"乐观停止",裁判模型客观评估
  2. 多维度评估 — 裁判模型可以从多个维度评估
  3. 防止误判 — 避免 Agent 自己判断自己完成
  4. 质量保证 — 确保任务真正完成

3. 防止"乐观停止"

什么是"乐观停止":

  • Agent 可能会过早停止
  • Agent 可能会"自我满足"
  • Agent 可能会忽略未完成的任务

如何防止"乐观停止":

  1. 裁判模型评估 — 独立评估任务是否完成
  2. 最大尝试次数 — 限制 Agent 的停止尝试
  3. 多维度检查 — 从多个维度检查任务完成情况
  4. 用户反馈 — 收集用户反馈,判断任务是否完成

"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 的学习让我们从"团队协作"升级到"人机协作"。

核心收获:

  1. 人机协作的核心概念
  2. Goal / 停止条件的实现
  3. 防止"乐观停止"的机制
  4. MiMo-Code 框架的学习
  5. 深度思想学习模式的实践
  6. 随机题型考核的实践

学习路径:

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:子智能体系统

📚 参考资料

  1. MiMo-Code GitHub
  2. MiMo-Code 官网
  3. LangGraph 官方文档
  4. LangChain Agent 源码

系列文章:

  • Day 11:多 Agent 协作
  • Day 12:人机协作 + Goal/停止条件 (本文)
  • Day 13:持久化记忆

作者简介: 宸一,Java 工程师,正在学习 AI Agent 开发中ing...