# ll-llm:一个零依赖、可插拔的 OpenAI 兼容 LLM 代理
## 背景
日常开发中经常要在不同 LLM 后端间切换------Cursor CLI 做代码、OpenCode 跑分析、OpenAI 调接口。每个后端格式不同、认证不同、模型名不同,切一次改一堆配置。更麻烦的是,大多数 AI 工具(Continue.dev、Aider、VS Code 插件)只认 OpenAI API 格式。于是写了 ll-llm------零运行时依赖的 HTTP 代理,统一包装成 OpenAI 兼容接口。
## 一句话讲清楚
把任何 LLM 后端包装成标准 OpenAI API,对接任何 OpenAI SDK 客户端。
你的代码 / IDE 插件
│ POST /v1/chat/completions
▼
ll-llm (端口 6666)
│
├── cursor Provider → spawn cursor agent
├── opencode Provider → HTTP API (规划中)
└── openai Provider → HTTP API (规划中)
## 目前做了什么
第一个版本完成 Cursor CLI 后端代理:模型映射(gpt-4o/claude-3.5-sonnet → Cursor 内部 ID)、流式+非流式双模式、base64 图片多模态、agent 模式切换(ask/agent/plan)、三种密钥配置方式 + 启动格式校验。
from openai import OpenAI
client = OpenAI(base_url="http://localhost:6666/v1", api_key="any-key")
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "解释量子计算"}],
)
## 技术设计
1. 零运行时依赖------只用 node:http、node:child_process、node:fs,打包 15KB,不需要 node_modules。
2. Provider 可插拔架构------核心接口只有两行:
export interface LLMProvider {
readonly name: string;
chat(options): AsyncGenerator<ChatChunk>;
}
路由层 handleChat 只调 provider.chat(options),不碰内部实现。加新后端零改动路由。
3. 模型解析三层优先级------显式 mode 字段 > 模型名后缀(gpt-4-ask) > 默认 agent。
4. Fail-fast 启动校验------密钥缺失或格式不对直接 exit(1),避免"服务跑了才发现 500"。
## 如何扩展新后端
三步:1) 写 ~50 行实现 LLMProvider 接口 → 2) index.ts 注册一行 → 3) model-map.ts 加映射。路由代码不动。
## 部署
tar -xzf ll-llm.tar.gz && cd dist
echo 'CURSOR_API_KEY="crsr_你的密钥"' > .env
node index.js # 无需 npm install
## 后续计划
接入 OpenCode Go 的 deepseek-v4-pro 作为第二个后端,改 model 字段即可在多个后端间透明切换。
GitHub: github.com/371684029/ll-llm | MIT | Node.js ≥ 20 + Cursor CLI