内容
# 综合运行时情报服务
综合运行时情报服务 — 一个多提供商的AI路由器,根据每个任务选择最便宜且可接受的模型,持久保存提供商的统计数据和对话记录,并在一段时间内通过本地内存后端学习提供商的偏好。
与LiteLLM(您导入的库)和Portkey(托管网关)不同,IRIS是一个自我托管的服务,可以学习。运行`iris serve`一次,它会记住每个任务类型哪个提供商最有效,并相应地偏置未来的路由。支持MCP的客户端像使用其他工具一样连接到它,没有外部遥测,机器上没有数据离开,底层使用SQLite。
[](https://github.com/jordanaftermidnight/IRIS_project)
[](https://opensource.org/licenses/MIT)
[](https://nodejs.org/)
## 有什么
- **16个提供商,无需代码更改即可添加第17个。** 5个原生 + 11个兼容OpenAI的内置 + 任意其他兼容OpenAI聊天完成协议的提供商的插入式配置插槽。
- **跨调用持续存在。** `~/.iris/iris.db`处的SQLite存储保存提供商的统计数据、请求历史记录、对话会话和知识库。路由决策实际上会积累——评分函数的成功率项反映历史,而不仅仅是当前进程。
- **封闭的学习循环。** 连接到可选的**localmem**服务器。路由器每5分钟读取一次每个任务的提供商偏好,并偏向于以前有效的偏好。
- **对话连续性。** `iris session new`,然后`iris chat "..." --session=<id>`(或`IRIS_SESSION=<id>`)以在CLI调用之间保持上下文。
- **本地优先默认。** Ollama运行在第一位;云提供商仅在需要时填充。 `--local`强制仅限本地。
- **智能回退。** 失败的提供商从重试选择中排除,并记入失败(而不是下一个最佳提供商)。
- **内置MCP服务器。** `iris serve`在端口8782上将IRIS公开为模型上下文协议服务器,包含13种工具(聊天、委员会、提供商、健康、会话CRUD、最近请求、成本摘要、断路器状态、批处理提交/获取)、`/metrics`以Prometheus格式、`/events`SSE馈送、可选的承载身份验证、可选的mTLS、mDNS服务公告。任何MCP感知客户端(或内存后端)都可以像使用其他工具一样调用IRIS。
- **委员会扇出。** `iris council "..."`将提示广播给N个提供商并行,并显示响应并排显示每个调用的延迟和成本。 `--providers=a,b,c`白名单, `--exclude=x`跳过, `--judge=claude`通过LLM裁判排名, `--merge`连接并带有`[provider]`属性。失败的提供商不会影响调用。
- **每个提供商的断路器。** 在60秒内失败5次的提供商将被停用30秒,然后进行探测。路由器跳过停用的提供商,以免API波动消耗重试预算。
- **原生工具/函数调用。** 跨每个提供商的原生工具/函数调用。向`chat()`传递OpenAI规范的`tools`;克劳德的Anthropic形状会自动转换。响应面结构化`toolCalls`。
- **Anthropic提示缓存。** `promptCaching: true`用`cache_control: ephemeral`包装系统提示和最后一个工具,缓存输入令牌约90%。
- **结构化输出。** `responseFormat: {type: 'json_schema',...}`插入到OpenAI /兼容提供商。
- **自动任务分类。** 调用者省略`taskType`? IRIS从消息内容推断(确定性正则表达式+关键词评分,无额外LLM调用)。
- **结构化JSON日志。** pino支持,在TTY上打印,JSON在serve模式和管道中。 Loki/Vector/Promtail就绪。
- **实时事件流。** `/events`SSE将路由决策、委员会结果和断路器转换实时推送到事件流中。
- **审计日志。** 每个MCP工具调用追加到`~/.iris/audit.jsonl`以实现跨机器可追溯性。
- **每个工具的延迟指标。** 在`/metrics`上显示延迟指标(p50/p95/p99)。
- **mDNS服务公告。** `_iris-mcp._tcp.local.`以便仪表板dockviews和发现者找到IRIS在LAN上。可选。
- **${VAR}插值。** 在`iris-config.json`中插值以便密钥保留在环境变量中,而不存储在JSON中。
- **跨平台。** macOS、Linux、Windows — 所有三个平台都支持和测试。单个`npm install -g .`在所有平台上。
## 安装
```bash
git clone https://github.com/jordanaftermidnight/multi-ai-integration-CLI.git
cd multi-ai-integration-CLI
npm install
npm install -g . # 用于全局CLI
iris help
```
需要Node.js >= 18。SQLite原生绑定(better-sqlite3)在darwin / linux / windows上构建。
### 可选:Ollama(本地,免费)
```bash
curl -fsSL https://ollama.ai/install.sh | sh
ollama serve &
ollama pull mistral:7b # 平衡默认
ollama pull qwen2.5-coder:7b # 代码任务
ollama pull llama3.2:latest # 创意 + 视觉
ollama pull qwen3:4b # 快速 / 超快
```
如果没有Ollama,IRIS将回退到您拥有的任意云提供商。
## 提供商
### 原生(优先级1-5)
模型ID于2026-06-27验证。 如果您不希望默认设置向前滚动,请在`config/iris-config.json > providers.<name>.models`中固定特定版本。
| 名称 | 环境变量 | 默认模型阵容 |
|------|---------|----------------------|
| `ollama` | `OLLAMA_HOST` (默认 `http://localhost:11434`) | 本地:mistral:7b, qwen2.5-coder:7b, llama3.2, qwen3:4b |
| `groq` | `GROQ_API_KEY` | Llama 4侦察员(多模态MoE),GPT OSS 20B/120B |
| `openai` | `OPENAI_API_KEY` | GPT-5.5,GPT-5.4 / 5.4-mini / 5.4-nano,o4-mini |
| `gemini` | `GEMINI_API_KEY` | Gemini 3.1 Pro,3.5 Flash,3.1 Flash-Lite,3.1 Flash-Image |
| `claude` | `ANTHROPIC_API_KEY` | Claude Opus 4.8,Sonnet 4.6,Haiku 4.5 |
### 内置兼容OpenAI(设置环境变量即可)
| 名称 | 环境变量 | 描述 |
|------|---------|-------------|
| `kimi` | `MOONSHOT_API_KEY` | Moonshot Kimi |
| `minimax` | `MINIMAX_API_KEY` | MiniMax |
| `deepseek` | `DEEPSEEK_API_KEY` | DeepSeek(聊天 + 推理器) |
| `grok` | `XAI_API_KEY` | xAI Grok |
| `mistral` | `MISTRAL_API_KEY` | Mistral La Plateforme |
| `cerebras` | `CEREBRAS_API_KEY` | Cerebras(晶圆尺度推理) |
| `together` | `TOGETHER_API_KEY` | Together AI(开放权重专家) |
| `openrouter` | `OPENROUTER_API_KEY` | OpenRouter(300+模型,单个端点) |
| `perplexity` | `PERPLEXITY_API_KEY` | Perplexity(搜索增强) |
| `cohere` | `COHERE_API_KEY` | Cohere(Command A+,R+,agentic) |
| `huggingface` | `HF_API_KEY` | HuggingFace推理提供商(多后端路由器) |
运行`iris providers`获取实时状态。
### 添加任意其他OpenAI兼容服务
编辑`config/iris-config.json`:
```json
{
"providers": {
"lmstudio": {
"type": "openai-compatible",
"baseURL": "http://localhost:1234/v1",
"allowNoAuth": true,
"models": { "balanced": "local-model" }
}
}
}
```
与LM Studio、Fireworks、llama.cpp、vLLM、SiliconFlow、Anyscale等兼容。参见配置文件中的`_customProviderExamples`。
## 快速入门
```bash
# 智能路由(为任务选择最佳提供商)
iris chat "Hello, world"
iris chat "编写Python排序函数" --task=code
iris chat "比较React和Solid" --task=complex
# 强制指定提供商
iris chat "2+2等于多少?" --provider=gemini
iris chat "长上下文分析" --provider=kimi
# 仅限本地(隐私,零成本)
iris chat "总结此文档" --local
# 对话连续性
iris session new my-debug-session
iris chat "帮助我调试此堆栈跟踪:... --session=my-debug-session
iris chat "我刚刚问了什么? --session=my-debug-session
# 文件分析
iris file ./src/foo.js --task=code
# 系统
iris providers # 所有提供商的实时状态
iris health --verbose # 详细的健康检查
iris status # 综合系统状态
iris models # 列出每个提供商的可用模型
```
## 命令
```
iris chat <message> 聊天并智能选择提供商
iris chat ... --stream 流式传输令牌
iris council <message> 扇出到N个提供商,侧边显示
iris session list|new|show|delete 管理持久会话
iris file <path> 分析文件
iris providers 提供商状态 + 统计数据
iris models 列出每个提供商的模型
iris health 健康检查
iris status 系统状态概述
iris serve [--port=8782] 以MCP服务器运行IRIS
iris config save|load [path] 配置
iris clear 清除进程上下文
iris help 显示帮助
```
### 选项
| 标志 | 效果 |
|---|---|
| `--task=<type>` | `code`, `creative`, `fast`, `complex`, `reasoning`, `vision`, `ultra_fast`, `balanced`(默认) |
| `--provider=<name>` | 强制指定提供商 - 请参阅`iris providers`获取实时列表 |
| `--session=<id>` | 继续持久会话 |
| `--stream` | 流式传输响应(取决于提供商) |
| `--local` | 仅限本地提供商 |
| `--verbose, -v` | 详细输出 |
## 配置
### 环境变量
```bash
# 提供商密钥(设置您使用的任意一个;所有参数都是可选的)
export OLLAMA_HOST="http://localhost:11434"
export OPENAI_API_KEY="..."
export GROQ_API_KEY="..."
export GEMINI_API_KEY="..."
export ANTHROPIC_API_KEY="..."
export MOONSHOT_API_KEY="..." # Kimi
export DEEPSEEK_API_KEY="..."
# ...等 - 参见上面的提供商表格
# IRIS特定
export IRIS_DB="$HOME/.iris/iris.db" # SQLite存储路径
export IRIS_SESSION="my-default" # 默认会话ID
```
在`~/.secrets`集中密钥(由shell rc获取),IRIS在启动时获取它们。
### 配置文件(`config/iris-config.json`)
- `providers.<name>` - 覆盖内置默认值(模型、费率、优先级)或定义新的OpenAI兼容服务。
- `routing` - `preferLocal`, `maxCost`, `costOptimization`.
- `memory.enabled = true` 连接到本地MCP内存后端(例如`localmem`)用于学习循环。
- `server.*` - `iris serve`的MCP服务器设置(端口、主机、agentId、authTokenEnv、metricsEnabled)。
配置在加载时进行模式验证;未知键会产生警告;类型不匹配会记录错误并回退到默认值。
## 委员会(`iris council`)
将提示广播给所有可用的提供商并行查看答案。 无需裁判 - 您查看并决定。
```bash
iris council "Python最好的日期数学库是什么?"
iris council "解释quicksort" --providers=claude,openai,gemini
iris council "快速的yes/no" --exclude=ollama --timeout=10
iris council "选择最干净的" --judge=claude
```
失败的提供商会带有错误标签,面板仍会完成。 每次调用都会更新路由器的`providerStats`,因此委员会用法会馈入未来的路由聊天评分。
`--judge=<provider>` 调用命名提供商以评估面板。裁判查看每个成功的响应并回复JSON排名。幻觉提供商名称被过滤;不可解析的输出会回退到原始顺序。自动跳过少于2个响应成功。
## MCP服务器(`iris serve`)
`iris serve` 在端口8782(可配置)上将IRIS公开为模型上下文协议服务器。 13个注册工具:
- `iris_chat(message, taskType?, provider?, sessionId?, local?)`
- `iris_council(message, providers?, exclude?, timeoutSeconds?, judge?, merge?)`
- `iris_batch_submit(requests, provider, model?)` — Anthropic 或 OpenAI 批量 API(~50% 折扣)
- `iris_batch_get(batchId, provider)` — 轮询批处理状态/检索结果
- `iris_providers()`
- `iris_health()`
- `iris_recent_requests(limit?, sinceIso?)` — 最近路由决策的快照
- `iris_cost_summary(sinceIso?)` — 按提供商分类的成本
- `iris_breaker_status()` - 提供商的断路器状态
- `iris_session_list(limit?)`
- `iris_session_new(id?)`
- `iris_session_show(id, limit?)`
- `iris_session_delete(id)`
HTTP 表面在同一端口:
- `GET /sse` — MCP SSE 通道(带有令牌验证时)
- `POST /messages?sessionId=...` — JSON-RPC 消息。
- `GET /events` — 实时SSE事件流 `{type: routing|council|breaker,...}`。带有令牌验证。 15秒心跳保持连接活跃。
- `GET /metrics` — Prometheus 文本格式 (`iris_provider_available`, `iris_provider_requests_total`, `iris_provider_response_ms_avg`, `iris_provider_cost_usd_total`, `iris_provider_breaker_state`,...). 带有令牌验证。
- `GET /healthz` — 未验证的活动探测。
设置 `IRIS_AUTH_TOKEN` 需要承载身份验证。多个IRIS实例在同一个内存后端实例上可以通过设置不同的`config.server.agentId`值来区分。
## 跨平台安装(macOS / Linux / Windows)
IRIS是纯Node.js加上一个原生依赖项(`better-sqlite3`),它为所有三个平台提供预构建的二进制文件。
### macOS / Linux
```bash
brew install node ollama # 或 apt / dnf / pacman 等
ollama serve &
ollama pull mistral:7b
git clone https://github.com/jordanaftermidnight/multi-ai-integration-CLI.git
cd multi-ai-integration-CLI
npm install
npm install -g .
iris help
```
设置提供商密钥(在shell rc中,例如 `~/.zshrc` / `~/.bashrc`):
```bash
export OPENAI_API_KEY="..."
export ANTHROPIC_API_KEY="..."
```
### Windows(PowerShell)
```powershell
# 需求:安装Node.js LTS和Ollama
winget install OpenJS.NodeJS.LTS
winget install Ollama.Ollama # 或从 https://ollama.com/download/windows 下载
ollama pull mistral:7b
git clone https://github.com/jordanaftermidnight/multi-ai-integration-CLI.git
cd multi-ai-integration-CLI
npm install
npm install -g .
iris help
```
设置提供商密钥(当前会话):
```powershell
$env:OPENAI_API_KEY = "..."
$env:ANTHROPIC_API_KEY = "..."
```
使其在会话之间持续存在:
```powershell
[Environment]::SetEnvironmentVariable("OPENAI_API_KEY", "...", "User")
```
SQLite存储位于`C:\Users\<name>\.iris\iris.db`。`iris serve`在端口8782上无缝运行;`Ctrl+C`干净地关闭。路径、进程信号和Ollama的HTTP API在macOS / Linux上表现相同。
## 跨机器部署(Mac客户端→Linux/Windows服务器)
在具有云密钥的服务器上运行IRIS,从任何客户端通过网络访问。 当密钥位于中心位置或您希望SQLite存储+内存后端连接在任何笔记本电脑上运行时很有用。
**1. 在服务器上**
```bash
# Linux(systemd单元,Windows服务,或tmux会话)
export IRIS_AUTH_TOKEN="$(openssl rand -hex 32)" # 与客户端共享
export OPENAI_API_KEY="..."
export ANTHROPIC_API_KEY="..."
iris serve --host=0.0.0.0 --port=8782
```
Windows上的PowerShell等价项:
```powershell
$env:IRIS_AUTH_TOKEN = [Convert]::ToHexString([System.Security.Cryptography.RandomNumberGenerator]::GetBytes(32)).ToLower()
$env:OPENAI_API_KEY = "..."
iris serve --host=0.0.0.0 --port=8782
```
将防火墙规则绑定到您的LAN/VPN子网,以便端口8782仅对它们开放。 承载令牌是身份验证层,但防御纵深是便宜的。
### TLS / mTLS(可选,对于不受信任的网络)
在`config/iris-config.json`中添加一个`tls`块:
```json
{
"server": {
"enabled": true,
"host": "0.0.0.0",
"port": 8782,
"tls": {
"certPath": "/etc/iris/cert.pem",
"keyPath": "/etc/iris/key.pem",
"caPath": "/etc/iris/ca.pem",
"requestCert": true,
"rejectUnauthorized": true
}
}
}
```
设置`certPath` + `keyPath`后,IRIS提供HTTPS。 添加`caPath`、`requestCert: true`和`rejectUnauthorized: true`以实现完整的mTLS - 客户端必须出示由您的CA签名的证书。 在LAN不信任或仅凭令牌还不够的情况下很有用。
启动日志显示`tls: true, mtls: true|false`,以便您可以验证配置是否生效。
**2. 从任意客户端(Mac,Linux,Windows)**
任何MCP感知客户端都连接到 `http://<server>:8782/sse` 并共享承载令牌:
```bash
# 示例:使用Claude Code在另一台机器上注册IRIS
claude mcp add --transport sse iris http://192.168.1.10:8782/sse \
--header "Authorization: Bearer $IRIS_AUTH_TOKEN"
```
仪表板dockviews订阅 `/events` 以获取实时更新,并拉取 `/metrics` 获取成本记号。两者都遵循相同的承载令牌。
## 内存后端集成
IRIS可选地连接到 [`localmem`](https://github.com/jordanaftermidnight/localmem) — 本地优先的MCP/SSE内存后端。 当内存后端在配置中启用时,IRIS:
- 将每个路由决策记录到 `iris` 翼、`routing` 房间
- 将请求结果(成功/失败、延迟、成本)记录到 `iris` 翼、`requests` 房间
- 每5分钟从内存后端智能引擎读取每个任务的提供商偏好,偏向路由器趋向历史学到的模式
- 将提供商健康快照推送到内存后端的知识图谱
要启用,请在本地 `localhost:8781` 安装 `localmem` 并在 `config/iris-config.json` 中启用 `memory.enabled = true`。 IRIS 预期内存后端公开三个MCP工具:`memory_store`、`memory_intel_alerts` 和 `memory_kg_add`。 如果您的后端使用不同的工具名称,则学习循环将静默失败(在调试级别记录)。 连接失败是非阻塞的 - IRIS 工作正常,无需它。
## 架构
```
src/
├── enhanced-ai.js # 全局入口,运行CLI
├── index.js # MultiAI:提供商生命周期,会话,知识
├── cli.js # 命令解析,子命令
├── core/
│ ├── ai-router.js # 基于评分的选择,重试,警报奖励,可用性缓存
│ └── store.js # IrisStore(better-sqlite3):提供商统计,请求,会话,消息,知识
├── providers/
│ ├── ollama-provider.js
│ ├── groq-provider.js
│ ├── openai-provider.js
│ ├── gemini-provider.js
│ ├── claude-provider.js
│ ├── openai-compatible-provider.js # 任何OpenAI兼容服务的通用适配器
│ └── builtin-registry.js # 9个一级OpenAI兼容默认值
└── integrations/
└── memory-client.js # MCP/SSE客户端
```
参见 [ROADMAP.md](./ROADMAP.md) 获取完整的开发历史和即将到来的阶段(C:提供商基类 + 多轮API;D:IRIS作为MCP服务器;E:委员会扇出;F:仪表板准备就绪)。
## 开发
```bash
npm test # 32个测试,所有测试都是手工编写的(还没有vitest依赖)
npm run dev # 文件更改时自动重新加载
npm run lint # eslint
```
## 故障排除
**"无可用提供商"**
```bash
iris health --verbose
ollama serve & # 如果未运行,请启动Ollama
ollama list # 确认已拉取模型
```
**冷启动时提供商初始化缓慢**
冷启动时,第一个 `iris` 调用会 ping 设置了 API 密钥的每个提供商以确认可达性。 之后的调用使用 60 秒的可用性缓存。 提供商初始化并行运行,自 v2.4.0 起。
**会话未被记住**
确保每次调用时都传递 `--session=<id>`(或设置 `IRIS_SESSION`)。 `iris session list` 显示最近的会话。
## 许可证
MIT - 参见 [LICENSE](./LICENSE).
## 致谢
感谢 [Ollama](https://ollama.ai/)、[Anthropic](https://anthropic.com/)、 [Google AI](https://ai.google.dev/)、 [OpenAI](https://openai.com/)、 [Groq](https://groq.com/) 以及内置注册表中提供商提供OpenAI兼容端点,使这种适配器成为可能。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器