4.2 人机协作 (Human-in-the-Loop)


4.2 人机协作 (Human-in-the-Loop)

本节约处在第四章第二站,也是本章的拐点。多智能体的卖点是"自动",但生产里最值钱的往往是"在关键处让人拍板"。CrewAI 把人当成系统的一环,而不是系统的替代者——具体落点是让某些 Task 在交付前先征求人工确认。

先把"人在环的两种位置"画出来,

先把"人在环的两种位置"画出来,避免以为人机协作只是弹个框:

先把"人在环的两种位置"画出来,

最基础的用法:在 Task 上设 human_input=True,运行到这一步会停下来要人输入。

from crewai import Agent, Task, Crew, Process writer = Agent(role="撰稿", goal="写初稿", backstory="通顺", verbose=True) draft_task = Task( description="写 {topic} 的新闻稿初稿", expected_output="初稿全文", agent=writer, human_input=True, # 关键:交付前先让人看 ) crew = Crew(agents=[writer], tasks=[draft_task], process=Process.sequential) # crew.kickoff(inputs={"topic": "新品发布"})

运行到 draft_task 时

运行到 draft_task 时,框架会打印草稿并等待你在终端确认或补充要求,确认后才算这步完成、进入后续。适合"发出去就难撤回"的环节:对外发文、对外邮件、付费操作前。

但要注意:human_input=True 是阻塞式交互,依赖运行环境有人盯着。这和服务化部署(无人值守)天然冲突。所以我们给的边界是:本地调试、半自动工作流可用;完全无人值守的生产链路,别用它,改走"异步审核"模式——先把产出落库标待审,再由独立的人工审核任务消费。

更工程的写法是用一个"审核 Task"代替阻塞的人机交互,把人和系统解耦:

from crewai import Agent, Task, Crew, Process writer = Agent(role="撰稿", goal="写初稿", backstory="通顺", verbose=True) reviewer = Agent(role="审核", goal="标记可否发布", backstory="保守", verbose=True) draft = Task(description="写 {topic} 初稿", expected_output="初稿全文", agent=writer) review = Task( description="判断初稿能否发布,不能则列修改点", expected_output="通过 或 修改清单", agent=reviewer, context=[draft], ) crew = Crew(agents=[writer, reviewer], tasks=[draft, review], process=Process.sequential) # 跑完把 review 的产出推给人工审核队列,人再决定发布

这样人在"队列侧"工作,系统不阻塞,既能享受人工把关,又不破坏自动化的吞吐。我们更推荐这种模式上生产。

还有一个场景:人提供的是"外部知识"而非"确认"。比如法律合规要点只有人知道,模型查不到。这时把人做成一种特殊 Tool(人工工具),让 Agent 在需要时调用、等人填:

from crewai.tools import tool @tool("咨询合规专家") def ask_compliance(question: str) -> str: """遇到不确定的合规问题调用,返回人工给出的意见。""" # 真实实现里这里会把问题推给人工队列并等待回填 return input(f"【合规专家】{question}\n你的意见:") compliance_agent = Agent(role="合规助理", goal="规避违规", backstory="谨慎", tools=[ask_compliance], verbose=True)

用 Tool 封装人的好处是:调用点、参数、返回都结构化,能进日志、能重放,比 human_input=True 更适合审计。

收尾提醒:人机协作的核心不是"让

收尾提醒:人机协作的核心不是"让人替模型干",而是"在不可逆或高风险的节点用人做闸门"。阻塞式 human_input 适合半自动,生产请用审核队列或人工 Tool 解耦。下一站讲动态任务生成——那是另一种"系统自己补步骤"的能力,与人在环互补:人在环是外部卡点,动态任务是内部弹性。

在关键环节把人请进来

Human-in-the-Loop 不是装饰,而是把不可信的自动化决策点交给人确认。CrewAI 通过 task 的 human_input 机制,在任务产出后暂停等待人工反馈再继续。

介入点 适合场景 收益
任务产出后 高风险结论(如投资建议) 防错、留痕
工具调用前 写操作、花钱操作 防误操作
流程分支处 二选一影响大 人做价值判断

⚠️ 常见坑:把 human_input 开在每一个任务上,人会疲于点击,反而拖慢且流于形式。我们只在"错了代价高"的节点开,其余全自动。

from crewai import Agent, Task reviewer = Agent(role="合规审核", goal="把关合规", backstory="谨慎", verbose=True) t_review = Task( description="审核这篇对外发布稿", expected_output="通过或驳回及理由", agent=reviewer, human_input=True, # 产出后暂停等人工确认 ) print(t_review.human_input)

💡 关键直觉:人机协作的本质是把"价值判断"和"信息搬运"分开——机器搬信息、人做判断。凡是涉及责任、合规、不可逆操作的节点,都值得留一个人工闸门。闸门不是越多越好,而是越准越好。

# 只有高风险任务才要人确认,低风险全自动 low = Task(description="整理摘要", expected_output="摘要", agent=reviewer) high = Task(description="生成对外口径", expected_output="口径", agent=reviewer, human_input=True) assert low.human_input is False and high.human_input is True

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U