CAMEL 框架类型系统全解析:从 camel.types 枚举到 OpenAI 类型再导出
【免费下载链接】camel🐫 CAMEL: The first and the best multi-agent framework. Finding the Scaling Law of Agents. https://www.camel-ai.org项目地址: https://gitcode.com/GitHub_Trending/ca/camel
本篇技术指南围绕 docs/camel.types.rst 所声明的camel.types包展开,系统讲解 CAMEL 多智能体框架中统一类型体系的组织方式、核心枚举的取值与语义,以及它如何被模型工厂、Agent、检索与向量存储等模块消费。读完本文,你将掌握 CAMEL 中模型类型、平台类型、角色类型、任务类型等关键枚举的选用方法,并理解UnifiedModelType与 OpenAI SDK 类型再导出的设计动机,能够在自己的智能体代码中正确地引用与组合这些类型。
camel.types 包概览:一个由 RST 文档页声明的类型枢纽
camel.types是 CAMEL 框架的类型中枢,其官方文档页通过 Sphinxautomodule指令自动抽取源码 docstring 生成,声明的两个核心子模块为:
camel.types.enums:框架内全部核心枚举的定义所在,源码位于 camel/types/enums.py,全文 2300+ 行,定义了 20 个枚举类;camel.types.openai_types:对openaiSDK 中 Chat 相关类型与工具调用类型的统一再导出,源码位于 camel/types/openai_types.py;
同时camel.types包本身(camel/types/init.py)还汇集了UnifiedModelType、MCP 注册表配置与 Agent 工具调用记录等类型,并通过__all__提供统一导入入口。从包结构看,该包还包括 camel/types/mcp_registries.py、camel/types/unified_model_type.py 以及 camel/types/agents/tool_calling_record.py 等补充模块。
这一布局的价值在于:框架所有模块(模型、消息、存储、检索、Agent)共享同一套类型定义,避免了字符串魔法值散落各处,也让 IDE 自动补全与静态类型检查贯穿整个框架。
camel.types.enums:框架的核心枚举体系
RoleType:对话中的角色语义
RoleType 定义了多智能体交互中的角色枚举:
| 枚举成员 | 值 | 含义 |
|---|---|---|
ASSISTANT | assistant | 扮演助手(智能体) |
USER | user | 扮演用户 |
SYSTEM | system | 系统提示 |
CRITIC | critic | 评审/批评者角色 |
EMBODIMENT | embodiment | 具身(环境交互)角色 |
DEFAULT | default | 默认角色 |
CRITIC与EMBODIMENT体现了 CAMEL 多角色协作的设计:CriticAgent等评审类智能体即基于该角色体系运行,相关实现可参见 camel/agents/critic_agent.py。
ModelType 与 UnifiedModelType:模型标识的统一抽象
ModelType 继承自UnifiedModelType与Enum,是框架中规模最大、更新最频繁的枚举,覆盖 OpenAI(GPT-4o、GPT-4.1 系列、o1/o3/o4、GPT-5 系列)、AWS Bedrock(Claude 系列、DeepSeek R1、Llama 3.x)、ZhipuAI GLM-5 系列、Qwen、DeepSeek、Mistral、Gemini 等众多厂商模型,每个成员的值即发送给服务商的模型字符串标识。
其默认值支持环境变量覆盖:
DEFAULT = os.getenv("DEFAULT_MODEL_TYPE", "gpt-4.1-mini-2025-04-14")也就是说,未显式指定模型时,CAMEL 默认使用gpt-4.1-mini-2025-04-14,开发者可通过设置环境变量DEFAULT_MODEL_TYPE全局改写默认模型。
UnifiedModelType的设计意图(camel/types/unified_model_type.py):它继承自str,让ModelType成员与普通字符串可以无缝混用——无论是枚举成员还是自定义模型名,都能作为模型标识传入。其内部通过类级缓存(_cache+_lock)保证同一模型名只创建一个实例,并对外暴露一系列is_*能力查询属性(is_openai、is_anthropic、is_gemini等)以及token_limit、support_native_tool_calling等能力探针。需要特别说明的是:从源码看,UnifiedModelType基类中这些属性大多返回保守默认值(如未知模型token_limit回退到999_999_999、support_native_tool_calling返回False),真正精确的能力判断由各具体ModelType成员在继承类中覆写,这一设计让框架对"枚举之外的自定义模型"也保持可用。
ModelPlatformType:平台分发的路由键
ModelPlatformType 枚举了 CAMEL 支持的全部模型服务平台,包括OPENAI、AWS_BEDROCK、AWS_BEDROCK_CONVERSE、AZURE、ANTHROPIC、GROQ、OLLAMA、VLLM、SGLANG、LITELLM、GEMINI、ZHIPU、MOONSHOT、QWEN、DEEPSEEK、TOGETHER、OPENAI_COMPATIBLE_MODEL、STUB等 40+ 平台,并同样支持环境变量默认值:
DEFAULT = os.getenv("DEFAULT_MODEL_PLATFORM_TYPE", "openai")该枚举是 camel/models/model_factory.py 中工厂映射表的关键:ModelPlatformType.OLLAMA → OllamaModel、ModelPlatformType.VLLM → VLLMModel、ModelPlatformType.AWS_BEDROCK_CONVERSE → AWSBedrockConverseModel等,工厂依据平台枚举实例化对应模型类。此外它还提供from_name类方法(按字符串反查枚举成员)与大量is_*平台判定属性,供运行时快速判断平台族(例如is_aws_bedrock同时涵盖AWS_BEDROCK与AWS_BEDROCK_CONVERSE两个成员)。
EmbeddingModelType 与 GeminiEmbeddingTaskType:嵌入模型与任务类型
EmbeddingModelType 涵盖 OpenAI(text-embedding-ada-002、text-embedding-3-small/large)、Jina(jina-embeddings-v3、jina-clip-v2、jina-colbert-v2、jina-embeddings-v2-base-code)、Mistral(mistral-embed)与 Gemini(gemini-embedding-exp-03-07)的嵌入模型,并通过属性方法暴露两类元信息:
is_openai/is_jina/is_mistral/is_gemini:判断模型厂商归属;output_dim:返回嵌入向量的输出维度,例如text-embedding-3-large为 3072、jina-embeddings-v3为 1024、jina-colbert-v2为 128。
在初始化向量数据库与构建检索流程时,output_dim直接决定集合(Collection)的维度配置,是 camel/embeddings 与 camel/retrievers 模块协同工作的关键参数。
GeminiEmbeddingTaskType 对应 Gemini API 的嵌入任务类型,取值包括SEMANTIC_SIMILARITY、CLASSIFICATION、CLUSTERING、RETRIEVAL_DOCUMENT、RETRIEVAL_QUERY、QUESTION_ANSWERING、FACT_VERIFICATION、CODE_RETRIEVAL_QUERY,用于调用 Gemini 嵌入接口时声明嵌入用途,具体实现可对照 camel/embeddings/gemini_embedding.py。
TaskType:任务模板路由
TaskType 声明了框架预置的任务种类:AI_SOCIETY、CODE、MISALIGNMENT、TRANSLATION、EVALUATION、SOLUTION_EXTRACTION、ROLE_DESCRIPTION、GENERATE_TEXT_EMBEDDING_DATA、OBJECT_RECOGNITION、IMAGE_CRAFT、MULTI_CONDITION_IMAGE_CRAFT、DEFAULT、VIDEO_DESCRIPTION。这些枚举值对应 camel/prompts 中的提示词模板目录,用于在构造角色扮演任务时快速选定提示模板族。
StorageType / VectorDistance / TerminationMode:存储与终止策略
- StorageType:
MILVUS、QDRANT、TIDB,标识底层向量/关系存储后端; - VectorDistance:
DOT(点积)、COSINE(余弦相似度)、EUCLIDEAN(欧氏距离),用于指定向量数据库的距离度量,配置后即决定相似度检索的排序语义; - TerminationMode:
ANY与ALL,对应终止条件"任一满足即停"或"全部满足才停",被 camel/terminators 模块消费,用于控制对话/任务循环的退出策略。
OpenAI 相关枚举:后端角色、图片类型与视觉细节
- OpenAIBackendRole:
ASSISTANT、SYSTEM、DEVELOPER、USER、FUNCTION、TOOL,对应 OpenAI Chat Completions API 的消息角色; - OpenAIImageType:
PNG、JPEG、JPG、WEBP、GIF,其元类OpenAIImageTypeMeta覆写了__contains__,使"jpg" in OpenAIImageType这类判断在非法取值时优雅返回False而非抛异常; - OpenAIVisionDetailType:
AUTO、LOW、HIGH,对应视觉模型图片解析的细节级别,供 camel/toolkits/image_analysis_toolkit.py 等视觉工具链使用。
OpenAPIName / AudioModelType / VoiceType / JinaRerankerModelType / HuggingFaceRepoType
- OpenAPIName:
COURSERA、KLARNA、SPEAK、NASA_APOD、BIZTOC、CREATE_QR_CODE、OUTSCHOOL、WEB_SCRAPER、NASA_APOD等,对应 camel/toolkits/open_api_specs 中内置的 OpenAPI 规格集; - AudioModelType:
tts-1、tts-1-hd,配合 VoiceType(alloy、echo、fable、onyx、nova、shimmer)构成文本转语音能力的两元组合,供 camel/models/base_audio_model.py 相关实现使用; - JinaRerankerModelType:包含
jina-reranker-v2-base-multilingual(默认,支持 100+ 语言)、jina-reranker-v1-base-en、jina-reranker-v1-tiny-en、jina-reranker-v1-turbo-en、jina-colbert-v2、jina-reranker-v3(131K 上下文窗口),配合 camel/retrievers/jina_rerank_retriever.py 使用; - HuggingFaceRepoType:
dataset、model、space,用于标注 Hugging Face 仓库类型,被 camel/datahubs/huggingface.py 等数据加载模块引用。
camel.types.openai_types:OpenAI SDK 类型的统一再导出
camel/types/openai_types.py 本身不含业务逻辑,而是将openaiSDK 中与对话、工具调用强相关的类型集中再导出,形成框架内统一的类型引用面:
- 对话消息结构:
ChatCompletion、ChatCompletionChunk、ChatCompletionMessage、Choice、CompletionUsage; - 消息参数类型:
ChatCompletionMessageParam及其细分ChatCompletionSystemMessageParam、ChatCompletionUserMessageParam、ChatCompletionAssistantMessageParam、ChatCompletionToolMessageParam; - 工具调用相关:
ChatCompletionMessageFunctionToolCall与结构化输出类型ParsedChatCompletion; - 哨兵值:
NOT_GIVEN/NotGiven,用于"不传该参数"与"显式传None"的语义区分。
设计动机:CAMEL 的消息层(camel/messages/base.py)与模型层(camel/models/base_model.py)广泛使用这些类型做请求/响应建模,集中再导出避免了各模块散乱地直接依赖openai深层导入路径,当 SDK 类型变更时只需收敛修改一处。
类型系统的实战用法
统一导入入口
包级__all__(camel/types/init.py)保证一行导入即可拿到全部常用类型:
from camel.types import ( ModelType, ModelPlatformType, RoleType, TaskType, EmbeddingModelType, StorageType, VectorDistance, TerminationMode, OpenAIBackendRole, UnifiedModelType, )在模型示例中组合平台与模型类型
仓库中的模型示例大量采用"平台枚举 + 模型枚举"的组合方式,例如 examples/models/aihubmix_model_example.py 中from camel.types import ModelPlatformType, ModelType后以model_type=ModelType.GPT_5构造请求参数。由于ModelType继承UnifiedModelType(本质是str子类),此处既可以传枚举成员,也可以直接传厂商的原始模型名字符串,二者对上层 API 完全透明。
覆盖默认模型与平台
通过环境变量可全局调整默认值,无需改动代码:
export DEFAULT_MODEL_TYPE="gpt-4o" export DEFAULT_MODEL_PLATFORM_TYPE="openai"从源码结构看类型体系的扩展点
从源码结构可以推断,camel.types的扩展遵循"新增枚举成员 + 模型工厂映射 + 配置类"三件套模式:
- 在 camel/types/enums.py 的
ModelType、ModelPlatformType中追加成员; - 在 camel/models/model_factory.py 的平台映射表中登记新平台对应的模型类;
- 在 camel/configs 下提供对应的
*_config.py配置类(仓库中已有 40+ 个平台配置模块,如 camel/configs/deepseek_config.py、camel/configs/vllm_config.py)。
这种"枚举(标识)— 工厂(路由)— 配置(参数)"三层分离,使得接入新模型供应商时对既有模块的改动面最小化。
结语
camel.types虽以极简的 RST 文档页形式呈现,其背后却是 CAMEL 框架最基础的"词汇表":从模型、平台、角色、任务到存储与终止策略,所有跨模块协作的语义标识都汇聚于此。理解ModelType/ModelPlatformType的路由机制、UnifiedModelType的字符串兼容设计以及openai_types的类型再导出,能帮助你更快定位框架行为、写出与 CAMEL 风格一致的智能体代码,也为自定义模型接入提供了清晰的扩展坐标。
【免费下载链接】camel🐫 CAMEL: The first and the best multi-agent framework. Finding the Scaling Law of Agents. https://www.camel-ai.org项目地址: https://gitcode.com/GitHub_Trending/ca/camel
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考