菜单

配置和上下文

相关源文件

本页面记录了 MetaGPT 的配置系统和上下文管理,它们是定制框架和在执行过程中维护状态的关键组件。配置系统允许用户指定 LLM 设置、工具配置和各种其他参数,而上下文系统提供运行时状态管理和资源访问。

概述

MetaGPT 使用一个分层配置系统,从多个来源加载设置,并使用一个上下文管理系统来维护运行时状态。这些系统使组件能够跨框架共享配置和状态。

来源: metagpt/config2.py1-183 metagpt/context.py1-128 metagpt/context_mixin.py1-102

配置系统

配置类结构

Config 类位于 metagpt/config2.py,是 MetaGPT 配置系统的基础。它继承了 CLIParams 用于命令行参数,以及 YamlModel 用于 YAML 文件解析。

来源: metagpt/config2.py30-47 metagpt/config2.py49-170

配置来源和合并

MetaGPT 从多个来源加载配置,并遵循明确的优先级顺序

  1. 环境变量
  2. 默认配置文件(仓库默认和用户自定义配置)
  3. 命令行参数
  4. 程序化覆盖

配置来源使用 merge_dict 函数进行合并,后面的来源覆盖前面的。

来源: metagpt/config2.py102-123 metagpt/config2.py173-178

配置文件结构

配置文件按不同组件分段。以下是基于 config2.example.yaml 的示例结构

来源: config/config2.example.yaml1-130

关键配置部分

配置包含不同组件的各种部分

章节目的关键属性
llmLLM 提供商配置api_typemodelapi_keybase_url
embedding向量嵌入设置api_typemodeldimensions
roles角色特定配置每个角色的 LLM 设置
exp_pool经验池设置enabledenable_readenable_writeretrieval_type
role_zeroRoleZero 内存设置enable_longterm_memorymemory_ksimilarity_top_k
proxy全局代理设置字符串 URL
searchbrowsermermaid工具配置工具特定参数
s3redis存储配置连接参数

来源: metagpt/config2.py52-98 config/config2.example.yaml1-130

上下文系统

上下文类

Context 类作为运行时状态、配置和资源的容器

Context 类提供

  • 配置实例
  • 通过 AttrDict 动态属性字典,用于存储任意键值对
  • 成本管理器,用于跟踪 token 使用情况和成本
  • LLM 实例创建和缓存
  • 序列化和反序列化方法

来源: metagpt/context.py58-128 metagpt/context.py26-46

AttrDict:动态属性存储

AttrDict 是一种特殊的类字典对象,允许使用点符号访问属性

来源: metagpt/context.py26-46 tests/metagpt/test_context.py12-28

ContextMixin:组件的上下文集成

ContextMixin 为角色和动作等组件提供了一种标准化的方式来访问上下文资源

Mixin 提供

  • 对上下文、配置和 LLM 实例的属性访问
  • 私有字段,用于存储组件特定覆盖
  • Setter 用于配置这些属性

来源: metagpt/context_mixin.py17-102

使用配置和上下文系统

初始化配置

有多种方式可以初始化配置

  1. 使用默认配置

  2. 创建一个带有自定义 LLM 的配置

  3. 从特定的 YAML 文件加载

  4. 从 CLI 初始化(在 software_company.py 中使用)

来源: metagpt/config2.py101-137 metagpt/software_company.py13-74

创建和使用上下文

通常创建和使用上下文的方式如下

来源: metagpt/context.py58-128 metagpt/software_company.py40-41

特定角色的配置

MetaGPT 允许为不同角色定义不同的配置

来源: config/config2.example.yaml23-52

与其他系统集成

经验池集成

ExperienceManager 使用配置来确定其行为和存储选项

经验池

  • 使用 exp_pool 部分的配置设置
  • 可以通过配置启用/禁用
  • 配置存储类型(BM25 或基于向量的 Chroma)
  • 控制是否使用 LLM 对结果进行排名

来源: metagpt/exp_pool/manager.py18-242 metagpt/exp_pool/decorator.py29-227 metagpt/configs/exp_pool_config.py1-26

RoleZero 的长期记忆

RoleZero 使用配置来实现其长期记忆功能

RoleZero 记忆系统

  • 使用配置来启用/禁用长期记忆
  • 为长期存储配置持久化路径
  • 为短期记忆设置记忆容量
  • 为长期记忆配置检索参数

来源: metagpt/memory/role_zero_memory.py24-201 metagpt/configs/role_zero_config.py1-12

实际示例

基本 CLI 配置

当使用 CLI 启动新项目时

配置流程如下

来源: metagpt/software_company.py77-124

将装饰器与配置感知系统结合使用

Experience Pool 使用读取配置的装饰器来缓存函数结果

装饰器

  1. 检查配置中是否启用了经验池
  2. 搜索匹配的已缓存经验
  3. 返回缓存结果或执行函数
  4. 根据配置可选地保存新经验

来源: metagpt/exp_pool/decorator.py29-94 examples/exp_pool/decorator.py1-32

结论

MetaGPT 中的配置和上下文系统为自定义和运行多代理工作流提供了灵活的基础。配置系统支持来自多个来源的分层设置,而上下文系统提供运行时状态管理和资源访问。这些系统使组件能够跨框架共享配置和状态,从而更容易构建复杂的基于代理的应用程序。

来源: metagpt/config2.py1-183 metagpt/context.py1-128