AutoGen Human-in-the-Loop(人类在环)实战与进阶:多智能体协作与Web交互全流程(附代码)

引言:AI自动化的极限与人类参与的价值

在大模型(LLM)驱动的AI应用开发中,完全自动化虽然高效,但在代码评审、内容审核、企业审批等复杂场景下,AI往往难以独立胜任。人类在环(Human-in-the-Loop, HITL)机制,让AI与人类协作,兼顾效率与安全,成为智能体系统落地的关键能力。


1. Human-in-the-Loop核心概念

  • 定义:在多智能体团队运行过程中,允许人类实时或阶段性介入、反馈和控制。
  • 适用场景:需要人工审核、确认、补充信息或决策的复杂任务,如代码评审、内容审核、智能问答、企业审批流等。
  • 关键角色
    • UserProxyAgent(用户代理):代表人类参与团队对话
    • AssistantAgent(AI助手):负责自动化任务

在这里插入图片描述

2. 典型交互方式

2.1 运行中交互(同步反馈)

  • 通过 UserProxyAgent,团队运行时主动请求用户输入。
  • 适合审批、确认、补充信息等即时反馈场景。

代码示例:控制台人类在环

from autogen_agentchat.agents import AssistantAgent, UserProxyAgent
from autogen_agentchat.conditions import TextMentionTermination
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.ui import Console
from autogen_ext.models.openai import OpenAIChatCompletionClient

model_client = OpenAIChatCompletionClient(model="gpt-4o-mini")
assistant = AssistantAgent("assistant", model_client=model_client)
user_proxy = UserProxyAgent("user_proxy", input_func=input)  # 控制台输入

termination = TextMentionTermination("APPROVE")
team = RoundRobinGroupChat([assistant, user_proxy], termination_condition=termination)

await Console(team.run_stream(task="Write a 4-line poem about the ocean."))
await model_client.close()
  • 运行时,团队会在需要用户反馈时暂停,等待用户输入(如“APPROVE”)。

2.2 运行后交互(异步反馈)

  • 团队运行结束后,用户/应用基于结果反馈,再次运行团队。
  • 适合多轮对话、任务分批处理、持久化会话等场景。

代码示例:max_turns 控制多轮反馈

from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.ui import Console
from autogen_ext.models.openai import OpenAIChatCompletionClient

model_client = OpenAIChatCompletionClient(model="gpt-4o-mini")
assistant = AssistantAgent("assistant", model_client=model_client)
team = RoundRobinGroupChat([assistant], max_turns=1)

task = "Write a 4-line poem about the ocean."
while True:
    await Console(team.run_stream(task=task))
    task = input("Enter your feedback (type 'exit' to leave): ")
    if task.lower().strip() == "exit":
        break
await model_client.close()

3. 进阶用法:WebSocket/前端集成

在实际业务中,用户输入往往来自Web前端、App等。AutoGen的 UserProxyAgent支持自定义 input_func,可对接WebSocket、API、UI等多端输入。

代码片段:FastAPI+WebSocket集成

@app.websocket("/ws/chat")
async def chat(websocket: WebSocket):
    await websocket.accept()

    async def _user_input(prompt: str, cancellation_token: CancellationToken | None) -> str:
        data = await websocket.receive_json() # 等待前端消息
        message = TextMessage.model_validate(data)
        return message.content

    user_proxy = UserProxyAgent("user_proxy", input_func=_user_input)
    # 创建团队并运行
    # ...
  • 场景拓展:可用于企业审批流、在线问答、AI助手与用户实时协作等。

4. 典型实战案例

  • 控制台人类在环:AI写诗,用户审核approve
  • WebSocket人类在环:前端输入、AI响应、用户反馈
  • 多Agent协作+人类决策:如AI自动生成方案,人类最终拍板

5. 常见问题与解决方案(FAQ)

  • UserProxyAgent阻塞问题:适合短交互,长时间阻塞建议用异步反馈。
  • 如何自定义input_func对接不同前端:可用WebSocket、API、UI等多种方式。
  • 团队状态持久化与恢复:每次run后可保存状态,支持断点续聊。
  • 终止条件与人工反馈的配合:合理设置TextMentionTermination等终止条件,确保团队在需要时暂停。

6. 总结与资源推荐

  • Human-in-the-Loop机制让AutoGen团队支持灵活的人类介入,适合需要人工审核、补充、决策的复杂场景。
  • 推荐优先用UserProxyAgent实现运行中交互,或结合max_turns/终止条件实现阶段性人工反馈。
  • 支持多种输入方式,便于与Web、UI等系统集成。
  • 推荐阅读:AutoGen官方文档
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐