基于 AutoGen 构建多智能体互动对话系统
本文介绍利用 AutoGen 框架开发多智能体协同应用的方法。涵盖环境安装、ConversableAgent 配置、单智能体交互及双智能体相声场景模拟。重点讲解对话控制参数如终止条件与回合限制,并探讨高级功能如函数调用与代码执行。通过实践案例展示如何平衡对话连贯性与趣味性,实现自然流畅的多轮交互,适用于自动化客服、游戏 NPC 等场景。

本文介绍利用 AutoGen 框架开发多智能体协同应用的方法。涵盖环境安装、ConversableAgent 配置、单智能体交互及双智能体相声场景模拟。重点讲解对话控制参数如终止条件与回合限制,并探讨高级功能如函数调用与代码执行。通过实践案例展示如何平衡对话连贯性与趣味性,实现自然流畅的多轮交互,适用于自动化客服、游戏 NPC 等场景。

随着大语言模型(LLM)技术的快速发展,单一的智能体已难以满足复杂任务的需求。多智能体协作系统(Multi-Agent Systems)通过模拟人类团队分工,能够处理更复杂的逻辑推理、代码生成及创意写作任务。AutoGen 是一个开源框架,旨在简化多智能体应用程序的开发。本教程将深入探讨如何利用 AutoGen 构建具备高度互动性的多智能体应用,从基础环境搭建到高级对话控制策略。
在开始之前,请确保您的开发环境已配置好 Python 3.10 及以上版本。推荐使用 Conda 创建独立虚拟环境以避免依赖冲突。
conda create -n pyautogen python=3.10
conda activate pyautogen
pip install pyautogen
若需使用特定模型 API(如阿里云通义千问),还需安装相应的 SDK 并配置环境变量。
AutoGen 的核心组件是 ConversableAgent。它代表了能够发送和接收消息的实体。每个 Agent 由强大的 LLM 支持、代码执行引擎、外部工具接口及人性化设计组件构成。
初始化 Agent 时,以下参数至关重要:
创建一个基础的聊天机器人,代码如下:
import os
from autogen import ConversableAgent
llm_config = {
"config_list": [
{"model": "qwen-max-1201", "api_key": os.getenv("QWEN_API_TOKEN"),
"temperature": 0.1, "base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1"}
],
}
agent = ConversableAgent(
name="chatbot",
llm_config=llm_config,
code_execution_config=False,
function_map=None,
human_input_mode="NEVER"
)
# 发起对话
reply = agent.generate_reply(messages=[{"content": "讲个笑话", "role": "user"}])
print(reply)
在此配置中,llm_config 定义了请求参数,支持 max_token、top_p 等 OpenAI 兼容参数。实例化后,调用 generate_reply 即可获取响应。
相声表演的精髓在于逗哏与捧哏的默契配合。在 AutoGen 中,这映射为两个智能体的交互对话。我们塑造了'岳云鹏'与'孙越'两位角色,各自携带独特性格与任务。
yueyue = ConversableAgent(
name="岳云鹏",
system_message="""
你是岳云鹏,一个幽默风趣、活泼开朗的喜剧演员。你擅长用独特的风格与用户互动,能够敏锐捕捉并模仿人类情感的微妙变化,通过自嘲和适度的讽刺来营造轻松愉快的交流氛围。
""",
llm_config=llm_config,
human_input_mode="NEVER"
)
sunyue = ConversableAgent(
name="孙越",
system_message="""
你是孙越,著名相声演员,岳云鹏的搭档,一位沉稳内敛却又机智过人的捧哏专家。你具有深厚的文化底蕴和敏锐的思维反应。你擅长在对话中不动声色地抛出精妙的点评或反问,既支撑着主要话题的展开,又能适时提供智慧的火花。
""",
llm_config=llm_config,
human_input_mode="NEVER"
)
使用 initiate_chat 方法启动虚拟表演。该方法允许指定接收方、最大回合数及初始消息。
result = yueyue.initiate_chat(
sunyue,
message={
"content": "大家新年快乐,上了台了我们应该先做一个自我介绍,因为由不认识我们的朋友,我叫,emmm。。。不能说",
"role": "user"
},
max_turns=6
)
print(result.summary)
ChatResult 对象包含对话 ID、历史记录 (chat_history)、摘要 (summary) 和成本 (cost)。若需深度总结,可将 summary_method 设为 reflection_with_llm。
未设定明确的停止规则时,智能体间的对话可能会无休止地持续。有效的控制机制对于生产环境至关重要。
通过 max_turns 参数直接限制对话轮次,是最简单的控制手段。
利用 is_termination_msg 参数,可以检测消息内容中的特定关键词来自动中止对话。
yueyue = ConversableAgent(
name="岳云鹏",
system_message="...",
is_termination_msg=lambda msg: "再见" in msg["content"],
human_input_mode="NEVER"
)
result = yueyue.initiate_chat(sunyue, message="讲个笑话给我听听然后说对我说再见")
此设置使得当检测到'再见'时,对话立即结束,节省 Token 并提升用户体验。
启用代码执行能力可以让 Agent 解决数学问题或操作文件。建议在生产环境中使用 Docker 隔离执行环境。
code_exec_config = {
"use_docker": False, # 生产环境建议开启 Docker
"timeout": 60
}
通过 function_map 绑定自定义 Python 函数,Agent 可根据意图调用外部 API 或数据库。这大大扩展了 Agent 的能力边界。
system_message 能显著提升输出质量。避免模糊指令,明确角色边界。usage_including_cached_inference 中的 token 消耗,合理设置 max_tokens 以控制成本。本文详细介绍了利用 AutoGen 框架进行多智能体协作应用程序开发的实践。从单一讲笑话智能体到双智能体相声对话系统的开发过程,我们学习了如何设置及初始化智能体以具备特定交流能力。通过精细调控对话参数,既能有效控制对话长度,避免冗余,又能确保对话内容的连贯与趣味,从而实现更加自然流畅的多轮交互。未来,结合 RAG(检索增强生成)与 Function Calling,多智能体系统将在自动化客服、游戏 NPC 及复杂任务规划等领域发挥更大价值。
在实际应用中,开发者应根据具体业务场景调整 Agent 的角色设定与交互逻辑,并持续关注框架更新以优化性能与安全性。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online