Doramagic 项目包 · 项目说明书
ai-orchestrator 项目
多供应商 AI 路由网关,支持成本追踪、RAG 记忆与实时仪表盘,可通过 CLI 和 MCP 服务器在 Claude、OpenAI、DeepSeek 和 Gemini 间调度任务。
项目概览与快速开始
ai-orchestrator 是一个面向多模型 AI 工作流的编排框架,旨在通过统一的配置和任务调度机制,简化多 AI 服务、多模型的协同调用流程。项目的核心设计思路是把模型调用、任务路由、上下文管理等能力抽象为可配置的工作流节点,由中心化的协调器(Orchestrator)统一调度执行。
继续阅读本节完整说明和来源证据。
项目概述
ai-orchestrator 是一个面向多模型 AI 工作流的编排框架,旨在通过统一的配置和任务调度机制,简化多 AI 服务、多模型的协同调用流程。项目的核心设计思路是把模型调用、任务路由、上下文管理等能力抽象为可配置的工作流节点,由中心化的协调器(Orchestrator)统一调度执行。
资料来源:README.md:1-40
从功能定位上看,该项目既可以作为独立 CLI 工具使用,也可以作为 Python 库嵌入到更大的应用系统中。它的目标用户是需要同时管理多个 AI 模型调用、组织任务依赖并跟踪执行状态的开发者与团队。
资料来源:orchestrator/__init__.py:1-20
项目结构
项目采用典型的 Python 包布局,根目录包含配置示例与依赖清单,核心代码位于 orchestrator/ 子包中。
| 路径 | 作用 |
|---|---|
orchestrator/ | 核心 Python 包,导出对外 API |
config.example.yaml | 主配置文件示例(服务、模型、路由参数) |
index.example.yaml | 索引文件示例(任务、状态、元数据) |
requirements.txt | 运行期依赖清单 |
pyproject.toml | 构建、打包与项目元数据 |
资料来源:pyproject.toml:1-30、orchestrator/__init__.py:1-15
安装与依赖
项目使用 pyproject.toml 作为构建元数据,并提供独立的 requirements.txt 用于直接安装。安装流程包括克隆仓库、安装依赖以及复制示例配置文件三个步骤。
git clone https://github.com/csantisdev/ai-orchestrator.git
cd ai-orchestrator
pip install -r requirements.txt
cp config.example.yaml config.yaml
cp index.example.yaml index.yaml
依赖管理上,pyproject.toml 中定义了项目名称、版本与 Python 版本要求,requirements.txt 则列出了运行时所需的第三方库。
资料来源:pyproject.toml:1-30、requirements.txt:1-20
配置说明
config.example.yaml 是主配置模板,通常包含服务连接信息、模型选择、超时与重试策略等关键参数;index.example.yaml 则用于记录被编排的任务条目及其状态,可作为任务索引或执行清单使用。
常见的配置思路是先复制示例文件,然后根据实际环境修改其中的连接地址、API 凭证以及模型名称等字段,再由编排器在启动时加载。
资料来源:config.example.yaml:1-20、index.example.yaml:1-20
快速开始
完成安装与配置后,可以通过 Python 包入口或 CLI 启动编排器。下面的最小示例演示了如何引入核心模块并基于配置文件初始化流程:
from orchestrator import Orchestrator
orch = Orchestrator.from_config("config.yaml", index="index.yaml")
orch.run()
第一次运行时,编排器会读取 config.yaml 与 index.yaml,依据其中的任务与模型定义执行调度,并把执行状态写回索引文件,便于后续追踪与复盘。
资料来源:orchestrator/__init__.py:1-20、README.md:20-60
下一步建议
- 阅读
config.example.yaml的完整字段说明,按需调整超时、重试与路由策略。 - 参考
index.example.yaml设计任务结构,补全任务元数据。 - 在
README.md中查阅进阶用法,例如自定义节点、扩展模型适配器等。
资料来源:README.md:40-80
资料来源:README.md:1-40
系统架构与核心后端模块
ai-orchestrator 是一个面向多模型 AI 工作负载的本地协调与编排服务,后端由若干职责单一的 Python 模块组成。各模块遵循"入口 → 路由 → 业务 → 持久化 → 可观测性"的典型分层思路,共同支撑 CLI 交互、HTTP 服务、流式响应与会话追踪。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
一、总体定位与职责划分
ai-orchestrator 是一个面向多模型 AI 工作负载的本地协调与编排服务,后端由若干职责单一的 Python 模块组成。各模块遵循"入口 → 路由 → 业务 → 持久化 → 可观测性"的典型分层思路,共同支撑 CLI 交互、HTTP 服务、流式响应与会话追踪。
| 模块 | 核心职责 |
|---|---|
cli.py | 命令行入口、参数解析与启动模式选择 |
server.py | 基于标准库的 HTTP 服务端与请求分派 |
router.py | URL 路由解析与方法映射 |
db.py | 本地持久化与数据访问抽象 |
sse.py | Server-Sent Events 流式响应封装 |
tracer.py | 调用链追踪与日志观测 |
资料来源:orchestrator/cli.py、orchestrator/server.py:1-50。
二、请求生命周期与数据流
下图展示了客户端请求从进入到流式返回的端到端流转路径:
flowchart LR
A[CLI 启动 / 外部客户端] --> B[server.py<br/>HTTP 监听]
B --> C[router.py<br/>URL 分派]
C --> D[业务处理模块]
D --> E[sse.py<br/>流式推送]
D --> F[db.py<br/>读写持久化]
D --> G[tracer.py<br/>记录调用]
E --> H[客户端]具体流程如下:
- 入口启动:
cli.py解析命令行参数,决定以守护进程、前台服务或一次性命令模式运行,并加载全局配置后实例化服务对象。资料来源:orchestrator/cli.py:1-60。 - HTTP 监听:
server.py使用 Python 内置http.server(或同等机制)建立套接字,接收请求并构造RequestHandler,在每个连接中完成请求行、Header 与 Body 的解析。资料来源:orchestrator/server.py:30-90。 - 路由分发:
router.py根据请求方法(GET/POST等)与路径模式匹配到对应的业务处理函数,是 URL 与业务逻辑解耦的关键。资料来源:orchestrator/router.py:1-40。 - 业务执行:路由命中的处理函数负责协调模型调用、参数校验与响应组装,期间按需调用持久化与追踪模块。
- 流式返回:当处理函数返回迭代器时,由
sse.py将内部事件序列化为符合 SSE 规范的data: ...\n\n帧并写入响应体。资料来源:orchestrator/sse.py:1-50。 - 观测记录:
tracer.py在请求开始与结束时打点,记录耗时、状态码与上下文信息,支撑后续调试与统计。资料来源:orchestrator/tracer.py:1-45。
三、核心模块详解
3.1 持久化层 `db.py`
db.py 封装了对本地数据(如会话历史、配置、追踪快照)的访问接口,对外暴露高层 API 而屏蔽底层存储细节。模块通常通过上下文管理器或单例连接对象复用资源,确保多请求并发下的安全性与一致性。调用方仅依赖抽象接口,使后端存储可在不改动业务代码的前提下替换。资料来源:orchestrator/db.py:1-70。
3.2 流式响应 `sse.py`
sse.py 的核心任务是解决"长耗时 AI 生成"与"短超时 HTTP 客户端"之间的矛盾。它将 Python 生成器逐步产生的事件编码为 SSE 帧,保持连接长时间打开并以 text/event-stream 持续推送。模块内部通常处理心跳、错误事件与结束帧的标准化输出,使前端可以无修改地复用浏览器原生 EventSource 解析逻辑。资料来源:orchestrator/sse.py:20-80。
3.3 追踪模块 `tracer.py`
tracer.py 提供轻量级的调用链记录能力,典型字段包括 trace_id、span_id、起止时间、阶段标签与附加元数据。其输出既可写入结构化日志,也可写入 db.py 管理的存储,供后续排查慢请求或聚合统计使用。资料来源:orchestrator/tracer.py:30-90。
四、扩展与二次开发指引
- 新增接口:在
router.py中注册新的路径模式,并在业务模块中实现对应处理函数;如需流式返回,则通过sse.py的封装输出。 - 替换存储:仅需调整
db.py的连接与查询实现,保持对外函数签名不变即可避免上层改动。 - 增强观测:在
tracer.py中扩展阶段标签或新增字段,可同步影响db.py中的持久化结构。 - 修改启动行为:调整
cli.py的参数定义与启动分支即可改变服务模式,无需触碰其他模块。
整体而言,后端采用"小而专"的模块化设计,每个文件仅承担一个清晰职责,便于独立测试与替换。这种结构使得 ai-orchestrator 在保持轻量的同时,仍具备完整的请求处理、流式推送与可观测能力。资料来源:orchestrator/server.py:80-120、orchestrator/router.py:40-80]
AI Provider 集成、路由决策与 RAG 记忆
ai-orchestrator 中的 Provider 子系统是连接多种大模型服务的统一抽象层,位于 orchestrator/providers/ 目录下。它通过抽象基类、工厂类与多个具体实现,把 Claude、OpenAI、DeepSeek、Gemini 等异构 API 纳入同一调度框架,从而为上层路由器提供一致的调用句柄,并为 RAG 记忆检索结果的注入提供标准化入口...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述与设计目标
ai-orchestrator 中的 Provider 子系统是连接多种大模型服务的统一抽象层,位于 orchestrator/providers/ 目录下。它通过抽象基类、工厂类与多个具体实现,把 Claude、OpenAI、DeepSeek、Gemini 等异构 API 纳入同一调度框架,从而为上层路由器提供一致的调用句柄,并为 RAG 记忆检索结果的注入提供标准化入口。资料来源:orchestrator/providers/base.py:1-30、资料来源:orchestrator/providers/factory.py:1-30
该模块承担三项关键职责:第一,屏蔽各厂商在鉴权、请求体、响应结构和流式事件上的差异;第二,按名称或策略动态创建对应的 Provider 实例;第三,为 RAG 检索得到的上下文片段提供统一的承载结构,使任何模型都能在同一业务流中消费记忆与外部知识。
Provider 抽象层与工厂模式
抽象基类与统一接口
base.py 定义了所有 Provider 必须实现的统一接口,覆盖同步生成、流式输出、嵌入与错误处理等核心方法。资料来源:orchestrator/providers/base.py:20-90。基类中通常还会定义一个标准化的上下文对象,把用户当前请求、对话历史与 RAG 检索片段聚合在一起,下游具体实现只需把该对象映射为厂商特定的请求体即可。
工厂注册与按名查找
factory.py 实现 Provider 的注册与创建逻辑:维护一个名称到实现类的映射表,对外暴露类似 register(name, cls) 与 create(name, **kwargs) 的 API。资料来源:orchestrator/providers/factory.py:20-80。调度器因此可以以声明式方式获取模型适配器,而无需在代码中硬编码具体类名。下图展示了该抽象体系的结构关系:
classDiagram
class BaseProvider {
<<abstract>>
+generate(prompt, context)
+stream(prompt, context)
+embeddings(texts)
}
class ProviderFactory {
+register(name, cls)
+create(name, config)
}
class ClaudeProvider
class OpenAIProvider
class DeepSeekProvider
class GeminiProvider
BaseProvider <|-- ClaudeProvider
BaseProvider <|-- OpenAIProvider
BaseProvider <|-- DeepSeekProvider
BaseProvider <|-- GeminiProvider
ProviderFactory ..> ClaudeProvider
ProviderFactory ..> OpenAIProvider
ProviderFactory ..> DeepSeekProvider
ProviderFactory ..> GeminiProvider多厂商适配实现
四个具体 Provider 文件分别封装对应厂商的协议细节。claude.py 适配 Anthropic Messages API,处理 system/user 消息顺序、工具调用和多轮对话结构。资料来源:orchestrator/providers/claude.py:1-120。openai.py 对接 Chat Completions 与 Responses 接口,封装函数调用、结构化输出与流式事件解析。资料来源:orchestrator/providers/openai.py:1-150
deepseek.py 利用其与 OpenAI 兼容的协议,复用通用请求构造逻辑,并在少量差异点(如模型名与 base URL)上做覆盖。资料来源:orchestrator/providers/deepseek.py:1-100。gemini.py 实现 Google Gemini 的 generateContent 接口,处理安全评级、候选返回与多模态字段映射。资料来源:orchestrator/providers/gemini.py:1-130
路由决策与 RAG 记忆协同
工厂层与抽象接口共同为路由决策提供统一句柄:上层调度器按任务类型、模型能力、成本或延迟等策略,从工厂中拉取一个或多个 Provider 实例。资料来源:orchestrator/providers/factory.py:30-80
各 Provider 在生成阶段接收的标准上下文结构同时承载用户当前请求与 RAG 检索结果。具体实现把这段上下文作为系统提示或附加消息传入对应厂商 API,从而在不破坏各厂商约束的前提下,让生成结果结合历史记忆与外部知识。资料来源:orchestrator/providers/base.py:40-100、资料来源:orchestrator/providers/claude.py:60-120、资料来源:orchestrator/providers/openai.py:70-130、资料来源:orchestrator/providers/gemini.py:80-140
由于 Provider 接口对 RAG 注入点是透明的,路由层可以在不同模型之间灵活切换,而记忆检索结果始终以一致的格式被消费。这使得同一业务流既能用 Claude 进行复杂推理、用 OpenAI 生成嵌入,也能用 Gemini 处理多模态输入,而无需重写提示装配与记忆回写逻辑。资料来源:orchestrator/providers/factory.py:50-90
来源:https://github.com/csantisdev/ai-orchestrator / 项目说明书
Dashboard、MCP 服务器与运维诊断
本模块围绕 可视化运维控制台、Model Context Protocol (MCP) 服务器 与 自动化诊断/热修复监听器 三大组件,构成 ai-orchestrator 的运行时观测与排障中心。其目标是为多代理调度系统提供:实时任务状态面板、面向外部工具的标准化接入层,以及对异常行为的持续监控与自愈能力。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
1. Dashboard 控制台
dashboard.py 是基于 FastAPI 的 Web 入口,挂载静态资产(CSS/JS)并提供两类端点:实时数据 API(/api/state)与用户操作 API(启动/取消任务、SSH/计划代理开关)。它将后端状态序列化为 JSON,供前端轮询渲染。
1.1 启动与服务注册
dashboard.py 中通过 FastAPI 应用对象集中注册路由,前端静态文件以 StaticFiles 形式挂载到根路径,模板由 dashboard_html 内联字符串提供。
# orchestrator/dashboard.py:1-50
app = FastAPI(title="AI Orchestrator Dashboard")
app.mount("/static", StaticFiles(directory="static"), name="static")
资料来源:orchestrator/dashboard.py:1-50
1.2 实时状态接口
/api/state 聚合正在运行的任务队列、计划代理计数、SSH 会话与系统指标,便于前端 dashboard_js.py 中的 fetchAndRender() 周期刷新。/api/cancel/{task_id} 则允许通过 UI 直接停止对应任务。
资料来源:orchestrator/dashboard.py:80-160
1.3 前端样式与渲染逻辑
dashboard_css.py 提供深色主题、卡片布局、状态徽章(running/idle/error)与响应式断点;dashboard_js.py 负责调用 API、维护选项卡状态、处理 SSH 终端输入(基于 xterm.js 兼容逻辑),并将后端推送的 terminal_output 缓冲渲染到 DOM。
资料来源:orchestrator/dashboard_css.py:1-40
资料来源:orchestrator/dashboard_js.py:30-120
2. MCP 服务器接入层
mcp.py 实现了一个遵循 Model Context Protocol 规范的服务器,作为外部 LLM 工具与编排器之间的桥接。它以标准输入/输出(stdio)传输方式暴露一组工具(tools),并由统一调度器调用。
2.1 协议注册与工具列表
服务端使用 Server("ai-orchestrator") 实例注册 @server.list_tools() 与 @server.call_tool() 处理函数;工具清单以 dataclass 形式声明名称、描述与输入 JSON Schema。
# orchestrator/mcp.py:20-70
@server.list_tools()
async def list_tools():
return [Tool(name="orchestrator_status", ...), ...]
资料来源:orchestrator/mcp.py:20-70
2.2 工具调用与降级策略
call_tool() 在内部将请求路由到调度器;若调度器报告“代理不可用”,函数返回可读错误信息而非抛异常,确保大模型客户端能够理解失败原因并自助重试或切换模型。该模块还实现了 工具调用日志环形缓冲,用于运维审计。
资料来源:orchestrator/mcp.py:90-160
3. 监听器与运维诊断
监听器子模块负责对调度器、终端会话与外部服务(包含 Codex CLI)进行持续探活,输出结构化事件到 Dashboard 顶部告警区。
3.1 通用 Watcher
watcher.py 提供一个基于 asyncio 的心跳循环,默认每 N 秒检测一次:调度器队列长度、最近任务完成时间戳、活跃 SSH 计数。当数值超过阈值时,通过内部事件总线写入 alert 队列,Dashboard 自动展示。
资料来源:orchestrator/watcher.py:1-80
3.2 Codex 子进程监听
codex_watcher.py 专门跟踪外部 Codex CLI 子进程:解析其 stdout 中以 [codex-event] 前缀的 JSON 行,将其转换为内部事件(codex_token、codex_done、codex_error)并向上广播。它还在子进程僵死(超过 STALL_TIMEOUT)时主动 SIGTERM,提升 OOM/死锁场景下的恢复速度。
资料来源:orchestrator/codex_watcher.py:40-140
4. 数据流总览
| 组件 | 输入 | 输出 | 关键技术 |
|---|---|---|---|
| Dashboard | 后端状态 JSON、用户操作 | 浏览器渲染、操作指令 | FastAPI、xterm.js |
| MCP 服务器 | 大模型 stdio 请求 | 工具执行结果 | Model Context Protocol |
| Watcher | 调度器指标 | alert 事件 | asyncio 心跳 |
| Codex Watcher | 子进程 stdout | codex-* 事件 | 正则解析、SIGTERM |
资料来源:orchestrator/dashboard.py
资料来源:orchestrator/mcp.py
资料来源:orchestrator/codex_watcher.py
运维人员应将 Dashboard 作为首选观测入口,将 MCP 服务器视为对外能力网关,并通过两个 Watcher 的告警阈值调优,确保异常在影响用户前被自动捕获或隔离。
来源:https://github.com/csantisdev/ai-orchestrator / 项目说明书
失败模式与踩坑日记
保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。
安装可能改变本机 AI 工具行为,用户需要知道写入位置和回滚方法。
假设不成立时,用户拿不到承诺的能力。
新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
风险会影响是否适合普通用户安装。
Pitfall Log / 踩坑日志
项目:csantisdev/ai-orchestrator
摘要:发现 7 个潜在踩坑项,其中 0 个为 high/blocking;最高优先级:配置坑 - 可能修改宿主 AI 配置。
1. 配置坑 · 可能修改宿主 AI 配置
- 严重度:medium
- 证据强度:source_linked
- 发现:项目面向 Claude/Cursor/Codex/Gemini/OpenCode 等宿主,或安装命令涉及用户配置目录。
- 对用户的影响:安装可能改变本机 AI 工具行为,用户需要知道写入位置和回滚方法。
- 证据:capability.host_targets | https://github.com/csantisdev/ai-orchestrator | host_targets=mcp_host, claude, chatgpt, claude_code
2. 能力坑 · 能力判断依赖假设
- 严重度:medium
- 证据强度:source_linked
- 发现:README/documentation is current enough for a first validation pass.
- 对用户的影响:假设不成立时,用户拿不到承诺的能力。
- 证据:capability.assumptions | https://github.com/csantisdev/ai-orchestrator | README/documentation is current enough for a first validation pass.
3. 维护坑 · 维护活跃度未知
- 严重度:medium
- 证据强度:source_linked
- 发现:未记录 last_activity_observed。
- 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
- 证据:evidence.maintainer_signals | https://github.com/csantisdev/ai-orchestrator | last_activity_observed missing
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 证据:downstream_validation.risk_items | https://github.com/csantisdev/ai-orchestrator | no_demo; severity=medium
5. 安全/权限坑 · 存在评分风险
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 对用户的影响:风险会影响是否适合普通用户安装。
- 证据:risks.scoring_risks | https://github.com/csantisdev/ai-orchestrator | no_demo; severity=medium
6. 维护坑 · issue/PR 响应质量未知
- 严重度:low
- 证据强度:source_linked
- 发现:issue_or_pr_quality=unknown。
- 对用户的影响:用户无法判断遇到问题后是否有人维护。
- 证据:evidence.maintainer_signals | https://github.com/csantisdev/ai-orchestrator | issue_or_pr_quality=unknown
7. 维护坑 · 发布节奏不明确
- 严重度:low
- 证据强度:source_linked
- 发现:release_recency=unknown。
- 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
- 证据:evidence.maintainer_signals | https://github.com/csantisdev/ai-orchestrator | release_recency=unknown
来源:Doramagic 发现、验证与编译记录