AutoGen简介

简介

通过多智能体协作,AutoGen 框架能够有效地解决单智能体系统在处理复杂任务时的局限性,例如缺乏反思能力、工作记忆和感知能力等。

可定制性和可扩展性:选择、配置不同的智能体和功能, 实现定制化功能,也支持扩展智能体的能力。

记忆机制

RAG

基于chroma向量数据库实现的RAG存储机制。
核心向量索引技术是基于hnswlib库实现的HNSW算法

向量数据库

AutoGen使用ChromeDB而不是其他类型的向量数据库。

特性 ChromaDB Milvus FAISS Pinecone
安装与部署 ✅ pip 即可用 ❌ 需要 docker + 服务端 ✅ 仅库 ❌ 需注册云账号
适合规模 小~中 中~大 中~大
是否需要网络 ❌ 无需 ❌ 通常需要 ❌ 无需 ✅ 必需联网
集成复杂度 ✅ 极简 ❌ 有学习成本 ✅ 简单但功能少 ✅ 高封装,需注册
本地调试 ✅ 极好 ❌ 不便 ✅ 极好 ❌ 不能本地运行

任务中心记忆

缓存

底层使用redis

缓存存储

提供了两种缓存存储机制:Redis和DiskCache。

实现

组件架构
实现了AutoGen的Component接口,支持序列化和反序列化
提供了_to_config和_from_config方法,实现配置与实例间的转换
泛型支持
支持缓存任何类型的数据
依赖注入
构造函数接受外部创建的缓存实例,使用户可以灵活配置

应用场景

缓存LLM结果
减少重复的API调用,节约成本
提供应用的响应速度
作为分布式应用的共享状态
Redis实现适合多实例/多服务器部署
支持团队协作和共享缓存
持久化存储
DiskCache提供了本地持久化存储
适合单机部署或不要共享缓存的场景

代码执行器

azure

docker

jupyter

local

工具

代码执行器

Microsoft Azure

Graphrag

AutoGen的GraphRAG是一个基于图结构的检索增强生成(RAG)工具,它将图数据库和语义搜索相结合,用于在大型文档集合上执行更智能的搜索和信息检索。GraphRAG扩展了传统RAG系统,通过将文档间的关系建模为图,实现了更复杂、更相关的信息检索。

核心组件

GraphRAG在AutoGen中提供了两种主要的搜索工具:

1. GlobalSearchTool

用于执行全局范围的搜索,关注整个文档集合的概述和社区级别的信息:

1
2
class GlobalSearchTool(BaseTool[GlobalSearchToolArgs, GlobalSearchToolReturn]):
"""Enables running GraphRAG global search queries as an AutoGen tool."""
  • 用途: 回答关于整体趋势、主题社区和高层次概念的广泛问题
  • 配置: 通过GlobalDataConfig配置数据源,使用GlobalContextConfig配置上下文参数
  • 主要组件:
    • 社区(Communities): 相关实体的集合
    • 社区报告(Reports): 关于社区的文本摘要和见解
    • Map-Reduce流程: 使用MapReduceConfig配置分批处理大型文档集

2. LocalSearchTool

用于执行专注于特定实体和关系的本地搜索:

1
2
class LocalSearchTool(BaseTool[LocalSearchToolArgs, LocalSearchToolReturn]):
"""Enables running GraphRAG local search queries as an AutoGen tool."""
  • 用途: 回答关于特定实体、实体间关系或详细事实的精确问题
  • 配置: 通过LocalDataConfig配置数据源,使用LocalContextConfig配置上下文参数
  • 主要组件:
    • 实体(Entities): 文档中的关键概念或对象
    • 关系(Relationships): 实体之间的连接
    • 文本单元(Text Units): 包含实体信息的文本段落

配置类

GraphRAG工具使用多级配置系统来自定义搜索行为:

数据配置

  • DataConfig: 基础数据配置,指定输入目录和表名
  • GlobalDataConfig: 全局搜索专用配置,添加了社区相关表格
  • LocalDataConfig: 本地搜索专用配置,添加了关系和文本单元表格

上下文配置

  • ContextConfig: 基础上下文配置,设置最大令牌数
  • GlobalContextConfig: 控制社区数据如何被使用(权重、排名等)
  • LocalContextConfig: 控制实体、关系和文本单元的使用比例

搜索和处理配置

  • MapReduceConfig: 控制全局搜索中的Map-Reduce流程
  • SearchConfig: 控制本地搜索行为

使用流程

  1. 前提条件:

    • 安装依赖: pip install -U "autogen-agentchat" "autogen-ext[graphrag]"
    • 完成GraphRAG索引过程,生成必要的数据文件
  2. 初始化工具:

    1
    2
    3
    # 从GraphRAG设置文件创建工具
    global_tool = GlobalSearchTool.from_settings(settings_path="./settings.yaml")
    local_tool = LocalSearchTool.from_settings(settings_path="./settings.yaml")
  3. 集成到AutoGen代理:

    1
    2
    3
    4
    5
    6
    assistant_agent = AssistantAgent(
    name="search_assistant",
    tools=[global_tool, local_tool],
    model_client=openai_client,
    system_message="你是一个使用GraphRAG框架的AI助手..."
    )
  4. 执行搜索:

    1
    2
    3
    4
    5
    # 全局搜索示例
    await assistant_agent.run_stream(task="整个数据集的整体情感是什么?")

    # 本地搜索示例
    await assistant_agent.run_stream(task="站长关于Becher博士说了什么?")

技术细节

  1. 向量存储: 使用LanceDBVectorStore存储实体嵌入,用于语义搜索
  2. 文本编码: 使用tiktoken进行标记化和编码
  3. 上下文构建:
    • GlobalCommunityContext: 构建基于社区的全局上下文
    • LocalSearchMixedContext: 混合实体、关系和文本单元构建本地上下文
  4. 并发处理: 全局搜索支持高并发协程执行

工作原理

  1. 数据预处理与索引:

    • 文档被分解为实体、关系和文本单元
    • 实体被分组为社区,生成社区报告
    • 所有元素被嵌入到向量空间
  2. 查询处理:

    • 分析用户查询,确定相关实体和主题
    • 根据查询类型选择适当的搜索策略
  3. 上下文构建:

    • 全局搜索: 收集相关社区及其报告
    • 本地搜索: 获取特定实体及其关系和相关文本
  4. 生成回答:

    • 将构建的上下文与用户查询一起发送给LLM
    • (对于全局搜索)使用Map-Reduce处理大型上下文

GraphRAG通过将图结构与语义搜索相结合,提供了比传统RAG系统更强大的搜索能力,尤其适合处理多文档、复杂关系的信息检索任务。

Http

特点与优势

灵活的API集成: 可以连接到任何HTTP/HTTPS服务
参数验证: 使用JSON Schema保证输入参数的合法性
路径参数支持: 可以方便地在URL路径中插入参数
异步实现: 基于httpx的异步HTTP客户端
多种HTTP方法: 支持GET、POST、PUT、DELETE、PATCH
灵活的响应处理: 可以返回原始文本或JSON对象

应用场景

访问Web API: 连接到外部服务如天气API、翻译服务等
数据检索: 从在线数据源获取信息
服务集成: 接入企业内部服务
工具扩展: 通过HTTP扩展代理的能力

Langchain

MCP

Semantic Kernel

Semantic Kernel(语义内核)是微软推出的开源SDK,旨在将大型语言模型(LLM)与传统编程语言(如C#、Pythovn、Java)无缝集成,帮助开发者构建结合AI自然语言能力和传统编程精确性的智能应用。

大模型

Cache

Olloma

OpenAI

多智能体协作(AutoGen Teams)

SelectorGroupChat

适用场景
潜在问题

并行执行

模型

任务中心记忆

AutoGen的@experimental模块是一个包含实验性功能的代码集合,目前主要包含”Task-Centric Memory”(任务中心记忆)功能。这个功能旨在解决AI代理的记忆限制问题,让AI能够从之前的交互中学习并在未来的任务中应用这些知识。

Task-Centric Memory 核心组件

  1. MemoryController

    • 主要控制器类,管理记忆的创建、存储和检索
    • 提供API用于添加记忆(memo)、检索相关记忆,以及从任务中学习
    • 负责与MemoryBank通信并处理记忆流程
  2. MemoryBank

    • 存储记忆的核心组件
    • 使用向量数据库存储”topic”到”insight”的映射
    • 管理记忆的持久化存储和检索
  3. Memo

    • 记忆的基本单位,包含两个主要字段:
      • task:可选的任务描述
      • insight:帮助解决类似任务的提示、解决方案或计划
  4. StringSimilarityMap

    • 实现语义相似度搜索功能
    • 用于找到与当前任务语义上相关的记忆
  5. Prompter

    • 负责生成各种提示以与LLM交互
    • 处理任务泛化和主题提取

工作流程

  1. 记忆创建和存储

    1
    await memory_controller.add_memo(task="What color do I like?", insight="Deep blue is my favorite color")
    • 系统将任务泛化,以便更好地匹配未来相似但不完全相同的任务
    • 从任务和洞察中提取主题(topics)
    • 这些主题被映射到记忆,并存储在向量数据库中
  2. 记忆检索

    1
    memos = await memory_controller.retrieve_relevant_memos(task="What colors do I like most?")
    • 对给定任务进行泛化处理
    • 从泛化任务中提取查询主题
    • 在向量数据库中查找与这些主题最相似的存储主题
    • 筛选出最相关的记忆,并通过LLM验证它们对当前任务的有用性
  3. 记忆使用

    • 检索到的记忆被格式化为提示,附加到发送给代理的任务描述中
    • 代理可以利用这些记忆解决当前任务
  4. 学习循环

    • 系统可以通过train_on_task方法从任务执行中学习
    • 它会多次尝试任务,发现失败模式,然后生成有用的洞察力(insights)
    • 这些洞察力被添加到记忆库中,用于未来相似任务

技术特点

  1. 任务泛化:将特定任务转化为更一般的形式,提高知识迁移能力
  2. 主题提取:从任务和洞察中提取多词主题,增强语义匹配
  3. 相似度过滤:使用向量相似度和LLM验证双层过滤,确保检索记忆的相关性
  4. 持久化存储:记忆可以保存到磁盘,在不同会话间保持

集成方式

代码提供了两种集成方式:

  1. 直接使用MemoryController

    1
    2
    3
    memory_controller = MemoryController(reset=True, client=client)
    await memory_controller.add_memo(task="...", insight="...")
    memos = await memory_controller.retrieve_relevant_memos(task="...")
  2. 创建支持记忆的代理

    1
    2
    3
    class MemoryEnabledAgent(RoutedAgent):
    def __init__(self, description, model_client, memory_controller):
    # ...代理实现

研究状态和限制

注意代码中多次标记”EXPERIMENTAL, RESEARCH IN PROGRESS”,表明这是一个实验性功能,仍在积极开发中。主要目标是解决以下问题:

  1. 帮助AI代理突破上下文窗口的限制
  2. 记住用户提供的指导、纠正和计划
  3. 从代理自身经验中学习
  4. 避免重复之前犯过的错误

应用实践

个性化

每个用户的问题/回答如何存储?
再次提问时如何构造当前问题的上下文?
如何实现借助超过大模型Context窗口的上下文实现更好的推理?

参考

Autogen_GraphRAG_Ollama


AutoGen简介
https://summerchengh.github.io/tech-blog/2025/05/22/大模型-Agent-框架-AutoGen/
Author
Your Name
Posted on
May 22, 2025
Licensed under