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

基于 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 优化你的代码

相关文章:

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

用 AutoGen 实现智能体协作流程,假设团队里的 3 个角色,让 3 个角色相互交流后并给出不同方案,最后进行总结。下面是实现的思路,欢迎一起学习交流。  一、系统设计 1. sre_engineer_01 - 问题诊断与初步解决方案 职责&#xff1a…...

博客系统笔记总结 2( Linux 相关)

Linux 基本使用和程序部署 基本命令 文件操作 显示当前目录下的文件 ls:显示当前目录下的文件 ll:以列表的形式展示,包括隐藏文件 进入目录 && 显示当前路径 cd:进入目录(后面跟相对路径或者绝对路径&…...

计算机毕业设计SpringBoot+Vue.js电影评论网站系统(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

精美登录注册UI,登录页面设计模板

精美登录注册UI,登录页面设计模板 引言 在网页设计中,按钮是用户交互的重要元素之一。一个炫酷的按钮特效不仅能提升用户体验,还能为网页增添独特的视觉吸引力。今天,我们将通过CSS和JavaScript来实现一个“精美登录注册UI,登录页面设计模板”。该素材呈现了数据符号排版…...

《Linux系统编程篇》共享内存(Linux 进程间通信(IPC))——基础篇

文章目录 引言什么是共享内存System V 共享内存 API 引入1. shmget2. shmat3. shmdt4. shmctl5. 结构体 shmid_ds 开始实操注意 结束 今天的你有没有前进一小步呢 ——家驹(StrangeHead) 引言 那么共享内存,我们如何去使用他呢,先来听笔者啰嗦一段话吧…...

【EB-03】 AUTOSAR builder与EB RTE集成

AUTOSAR builder与EB RTE集成 1. Import Arxml files to Tresos2. Run MultiTask Script3. Add Components3.1 Run EcuExtractCreator Script4. Mapping Component to Partitions5. Event Mapping/Runnables Mapping to Tasks6. Port Connect7. Run SvcAs_Trigger Script8. Ver…...

HTML——前端基础1

目录 前端概述 前端能做的事情​编辑 两步完成一个网页程序 前端工具的选择与安装 HTML HTML5介绍 HTML5的DOCTYPE声明 HTML基本骨架 文字标签 标题之标签 标签之段落、换行、水平线 标签之图片 标签之超文本链接 标签之文本 列表标签之有序列表 列表标签之无序…...

AI回答:Linux C/C++编程学习路线

Linux C/C编程学习路线需要结合Linux系统特性和C/C语言的特点,以下是一个系统化的学习路径,适合从初学者到进阶者: 第一阶段:Linux基础 Linux操作系统基础 学习Linux基本命令:ls、cd、mkdir、rm、grep、find等。 理解…...

螺旋数字矩阵

螺旋数字矩阵 真题目录: 点击去查看 E 卷 100分题型 题目描述 疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法: 给出数字个数n和行数m(0 < n ≤ 999,0 < m ≤ 999),从左上角的1开始,按照顺时针螺旋向内写方式,依次写出2,3…n,最终形成一…...

Jupyter Notebook切换虚拟环境(Kernel管理)

我们在使用Jupyter Notebook的时候&#xff0c;打开文件发现只有一个Python3(ipykernel)&#xff0c;我们自己在conda中创建的虚拟环境为什么没有显示出来&#xff0c;今天我就来和大家一起讨论一下&#xff01; 在 Jupyter Notebook 中&#xff0c;kernel 是执行代码的核心。管…...

linux下软件安装、查找、卸载

目录 常见安装方式有三种&#xff1a; 1.源码安装。 2.rpm安装方式。 3.yum/apt工具级别安装。 对于前两种安装方式&#xff0c;因为软件可能有依赖关系&#xff08;安装的软件依赖于某些库&#xff0c;而这些库又依赖于某些库&#xff0c;这些都需要手动安装&#xff09;…...

vuetify项目添加代理跨域请求

vuetify项目添加代理转发后端接口实现跨域请求 配置一&#xff08;推荐&#xff09;配置二 在项目根目录下找到vite.config.mts文件并在里面的server下配置代理&#xff0c; 具体实现代码如下&#xff1a; 配置一&#xff08;推荐&#xff09; server: {port: 3000,// 配置代理…...

H5 火柴人科目三和GitHub获取仓库点星星的用户列表发生了艺术的碰撞

先看效果&#xff0c;代码写的比较乱&#xff0c;有待优化 效果 https://linyisonger.github.io/H5.Examples/?name./089.%E7%9C%8B%E6%98%9F%E6%98%9F%E7%9A%84%E8%88%9E%E8%80%85.html 思路 看起来很简单&#xff0c;实则也不是很难&#xff0c;就是需要思路要打开。 一…...

【Azure 架构师学习笔记】- Azure Databricks (12) -- Medallion Architecture简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (11) – UC搭建 前言 使用ADB 或者数据湖&#xff0c;基本上绕不开一个架构“Medallion”&#xff0c; 它使得数据管理更为简单有效。ADB 通过…...

基础知识|原型在什么时候用和类的区别

在 JavaScript 中&#xff0c;原型和类是两个密切相关但有所不同的概念。理解这两者之间的差异有助于更好地掌握面向对象编程&#xff08;OOP&#xff09;在 JavaScript 中的实现。 1. 原型&#xff08;Prototype&#xff09; 原型是 JavaScript 中实现继承和共享行为的核心机…...

【FFmpeg】拉流

概述 项目实践中涉及到使用ffmpeg进行推流和拉流操作&#xff0c;本文主要对一些基本操作做一个学习总结&#xff0c;后续再学习其源码架构&#xff1b;总结方法遵循实现功能配合函数具体实现 基本使用 拉流 avformat_network_init();//日志输出等级set_ffmpeg_log_level();…...

LangChain构建行业知识库实践:从架构设计到生产部署全指南

文章目录 引言:行业知识库的进化挑战一、系统架构设计1.1 核心组件拓扑1.2 模块化设计原则二、关键技术实现2.1 文档预处理流水线2.2 混合检索增强三、领域适配优化3.1 医学知识图谱融合3.2 检索结果重排序算法四、生产环境部署4.1 性能优化方案4.2 安全防护体系五、评估与调优…...

解决jupyter notebook不是内部或外部命令问题

我们打开cmd有的时候&#xff0c;输入jupyter notebook&#xff0c;发现会提示jupyter 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。遇到这个问题我们应该怎么解决呢? 没错就是添加环境变量&#xff01; Step01&#xff1a;在电脑中找到jupyter notebook的…...

MySQL----case的用法

在 MySQL 中&#xff0c;CASE 表达式是一个用于条件判断的功能&#xff0c;可以根据不同的条件返回不同的结果。CASE 表达式通常用于 SELECT 查询语句中&#xff0c;可以在 SQL 中灵活地进行条件判断和数据转换。CASE 有两种基本的语法形式&#xff1a; 简单 CASE 表达式&…...

Unity XR-XR Interaction Toolkit开发使用方法(十)组件介绍(XR Interaction Group)

目录 一、插件介绍 二、主要组件 XR Interaction Manager XR Controller XR Interactor XR Direct Interactor XR Ray Interactor XR Socket Interactor XR Gaze Interactor 三、XR Interaction Group 1、组件介绍 2、核心功能与特点 优先级与冲突管理 动态交互切…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...