当前位置: 首页 > article >正文

基于 DeepSeek+AutoGen 的智能体协作系统

用 AutoGen 实现智能体协作流程,假设团队里的 3 个角色,让 3 个角色相互交流后并给出不同方案,最后进行总结。下面是实现的思路,欢迎一起学习交流。 

 

一、系统设计

Image

  1. 1. sre_engineer_01 - 问题诊断与初步解决方案

    • 职责:负责对系统问题进行初步诊断,分析问题症状,提供初步的排查步骤和解决方案。
    • 能力:擅长手动执行命令,快速排查问题,提供临时解决方案。
  2. 2. sre_engineer_02 - 自动化实现与监控集成

    • 职责:负责将初步解决方案转化为自动化脚本,并集成到监控系统中。
    • 能力:擅长编写 Python 代码,实现自动化运维和监控集成。
  3. 3. sre_reflection - 方案优化与改进

    • 职责:对现有方案进行反思和改进,提出优化建议。
    • 能力:具备系统思维和创新能力,擅长从多维度优化方案。

 

二、实现细节
1. 框架选择

选择微软的 AutoGen 框架作为实现基础。AutoGen 提供了强大的多智能体协作能力,支持智能体之间的信息传递和任务分配。框架的核心组件包括: 

Image

  • UserProxyAgent:用户代理,负责发起任务。
  • AssistantAgent:智能体,负责执行任务并提供反馈。
  • GroupChat:多智能体协作的核心组件,管理智能体之间的消息传递和协作流程。

 

2. 代码实现

以下是关键代码片段: 

import argparse
import os
import autogen  # type: ignore
from typing importAny

# 设置环境变量,指定是否使用Docker
os.environ.setdefault("AUTOGEN_USE_DOCKER", "False")

# 配置DeepSeek模型参数
llm_config_deepseek = {
    "model": "deepseek-v3", # 此处以 deepseek-v3 为例,可按需更换模型名称。
    "api_key": os.getenv("DASHSCOPE_API_KEY"),
    "base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
    "temperature": 0.5,
    "stream": False
}

# 初始化器:负责任务分配和流程初始化
initializer = autogen.UserProxyAgent(
    name="initializer",
    system_message="""你是一个流程初始化器,负责将任务分配给合适的SRE工程师,并确保任务流程顺利进行。""",
)

# SRE工程师1:负责问题诊断和初步解决方案
sre_engineer_01 = autogen.AssistantAgent(
    name="sre_engineer_01",
    llm_config=llm_config_deepseek,
    system_message="""你是一位专注于问题解决的 SRE 资深工程师,具备以下特质:

    技术专长:
    - 精通 Linux/Unix 系统管理和故障排查
    - 熟悉容器技术和 Kubernetes 生态系统
    - 深入理解分布式系统和微服务架构
    - 掌握主流监控、日志和追踪工具
    - 具备网络、存储、数据库等基础设施维护经验

    行为准则:
    - 专注于问题诊断和初步解决方案
    - 提供详细的排查步骤和解决方案
    - 输出完整的命令或代码
    - 保持思路清晰,避免冗余信息
    """,
)

# SRE工程师2:负责自动化实现和监控集成
sre_engineer_02 = autogen.AssistantAgent(
    name="sre_engineer_02",
    llm_config=llm_config_deepseek,
    system_message="""你是一位专注于自动化实现的 SRE 资深工程师,具备以下特质:

    技术专长:
    - 精通自动化运维工具和脚本开发
    - 熟悉监控系统集成和报警策略配置
    - 掌握CI/CD pipeline设计与实现
    - 深入理解自动化运维最佳实践

    行为准则:
    - 负责将初步解决方案转化为自动化脚本
    - 集成监控和报警系统
    - 确保方案的可维护性和可扩展性
    - 输出完整的自动化实现方案
    """,
)

# SRE反思工程师:负责方案优化和改进
sre_reflection = autogen.AssistantAgent(
    name="sre_reflection",
    llm_config=llm_config_deepseek,
    system_message="""你是一位专注于方案优化的 SRE 资深工程师,具备以下特质:

    技术专长:
    - 深入理解系统可靠性工程
    - 熟悉容量规划和性能优化
    - 掌握故障恢复和应急响应机制
    - 精通系统改进和迭代方法

    行为准则:
    - 对现有方案进行多维度评估
    - 提出优化建议和改进方案
    - 确保方案的高可用性和可维护性
    - 输出完整的优化建议报告
    """,
)

# 定义协作流程图
graph_dict = {
    initializer: [sre_engineer_01],
    sre_engineer_01: [sre_engineer_02],
    sre_engineer_02: [sre_reflection],
    sre_reflection: [],  # 最终节点,任务结束
}

# 创建所有代理
agents = [
    initializer,
    sre_engineer_01,
    sre_engineer_02,
    sre_reflection,
]

# 初始化组聊天
group_chat = autogen.GroupChat(
    agents=agents,
    messages=[],
    max_round=10,
    allowed_or_disallowed_speaker_transitions=graph_dict,
    speaker_transitions_type="allowed",
)

# 创建管理器
manager = autogen.GroupChatManager(groupchat=group_chat, llm_config=llm_config_deepseek)

defmain():
    # 解析命令行参数
    parser = argparse.ArgumentParser(description="Process some integers.")
    parser.add_argument('--message', type=str, default="磁盘100%,服务器上找不到对应的文件,排查思路?", help='The message to initiate the chat')
    args = parser.parse_args()

    # 发起任务
    initializer.initiate_chat(
        manager,
        message=args.message,
        clear_history=False,
    )

if __name__ == "__main__":
    main()
3. 协作流程

通过graph_dict定义了智能体之间的协作流程。任务从initializer开始,依次传递给sre_engineer_01、sre_engineer_02,最后由sre_reflection输出优化后的方案。 

Image

三、实际运行效果

以“磁盘 100%,服务器上找不到对应的文件,排查思路?”为例,整个协作流程如下: 

  1. 1. 问题发起:用户通过initializer发起任务。

  2. 2. 问题诊断:sre_engineer_01分析问题症状,提供初步的排查步骤和解决方案。

  3. 3. 自动化实现:sre_engineer_02将初步解决方案转化为自动化脚本,并集成到监控系统中。

  4. 4. 方案优化:sre_reflection对方案进行多维度评估,提出改进建议。

Image

四、总结

仅仅尝试了一下 AutoGen 的功能,细节上没有打磨,比如没有处理好流式返回值,所以过程并非流式返回。 


往期精彩

AI 时代,如何用 Python 脚本轻松搞定 PDF 需求?

DeepSeek 与 Ollama:本地运行 AI 模型的完美组合

免费使用 DeepSeek 全尺寸模型API,各享 100 万免费 tokens

清华大学:普通人如何抓住 DeepSeek 红利?(65 页 PDF)

深度揭秘:如何用一句话让 DeepSeek 优化你的代码


http://www.kler.cn/a/556097.html

相关文章:

  • 游戏引擎学习第111天
  • 算法1-4 数楼梯
  • C++栈与队列:数据结构的“单行道”与“流水线
  • k8s ssl 漏洞修复
  • 深入剖析 Vue 的计算属性与侦听属性:差异、应用及最佳实践
  • CDGA|企业数据治理实战:从疏通“信息河”到打造优质“数据湖”
  • TCP三次握手 四次挥手:一场“确认眼神”与“礼貌告别”的对话
  • DeepSeek 助力 Vue 开发:打造丝滑的缩略图列表(Thumbnail List)
  • 【数据库系统概论】第6章 (三)数据依赖的公理系统
  • 深度解析应用层协议-----HTTP与MQTT(涵盖Paho库)
  • 【UCB CS 61B SP24】Lecture 4 - Lists 2: SLLists学习笔记
  • Linux----线程
  • SpringBoot核心框架之AOP详解
  • 拆解微软CEO纳德拉战略蓝图:AI、量子计算、游戏革命如何改写未来规则!
  • 【WRF模拟】全过程总结:更换不同研究时段改动总结
  • 宝塔mysql8.0设置数据库区分大小写
  • 宝塔怎么搭建LiveHelperChat?PHP开源在线客服安装教程
  • Lua C API :lua_insert 函数详解
  • WPS携手DeepSeek:开启智能办公新时代
  • Linux基础开发工具的使用(apt、vim、gcc、g++、gdb、make、makefile)