PolyLLM 是一个微内核、插件化的大模型统一接入层。核心只负责协议、注册、解析和参数策略;每个模型供应商独立成包,按需安装。
官网:https://polyllm.raingpt.top
| 包 | 职责 |
|---|---|
@you-want/polyllm-core |
统一协议、插件注册、模型注册表、别名解析、参数策略、客户端 |
@you-want/polyllm-openai |
OpenAI Chat Completions 适配器 |
@you-want/polyllm-deepseek |
DeepSeek OpenAI-compatible 适配器 |
@you-want/polyllm-anthropic |
Anthropic Messages API 适配器 |
@you-want/polyllm-gemini |
Google Gemini REST 适配器(generateContent / streamGenerateContent) |
@you-want/polyllm-ollama |
Ollama 本地适配器(OpenAI-compatible 端点,无需 API Key) |
@you-want/polyllm-openai-compatible |
任意 OpenAI-compatible 网关适配器,支持自定义 Base URL 与模型 ID,内置 OpenRouter / Qwen / Moonshot / Groq / vLLM / LiteLLM 预设 |
@you-want/polyllm-studio |
供应商目录、配置生成器、项目产物生成器 |
@you-want/polyllm-studio-app |
Studio 前端源码与开发服务器(私有包,不需要发布安装) |
@you-want/polyllm-cli |
Studio 启动器、配置校验、项目生成、环境检查、new-plugin 自定义插件脚手架 |
@you-want/polyllm-website |
polyllm.raingpt.top 官网(私有包,部署到 GitHub Pages) |
@you-want/polyllm-example-typescript |
TypeScript 示例应用 |
polyllm-core |
Python 核心包 |
polyllm-openai / polyllm-deepseek / polyllm-anthropic / polyllm-gemini / polyllm-ollama |
Python 官方厂商插件 |
polyllm-openai-compatible |
Python 任意 OpenAI-compatible 网关插件 |
用户代码
│
▼
createLLM() ── 模型解析 ── 参数校验 ── 插件分发
│
┌─────────────────────────┼─────────────────────────┐
▼ ▼ ▼
OpenAI DeepSeek / Anthropic OpenAI-compatible
- 核心没有供应商 HTTP 逻辑,也没有全局可变注册表。
- 插件实现
LLMPlugin,并把ModelSpec清单交给核心。 - 模型解析支持
provider:id、alias、snapshot 和规范化 ID。 strict参数策略默认失败快;auto可显式用于开发调试。
新手接入指南见 docs/getting-started.md。
项目路线图见 docs/roadmap.md,公共 API 稳定性约定见 docs/api-stability.md。
pnpm install
pnpm build
pnpm test
pnpm test:python
python3 -m pip install -r python/requirements-dev.txt
pnpm typecheck:python
python3 python/verify_packages.py
python3 python/build_packages.py
python3 -m twine check python/dist/*
python3 python/version.py check
pnpm verify:packages
pnpm verify:stability常用根命令:
pnpm polyllm --help
pnpm changeset
pnpm version-packages发布后不需要下载源码,也不需要手动启动 Vite。直接运行:
npx @you-want/polyllm-cli studioCLI 会启动本机服务和内置的可视化配置界面,并自动打开浏览器。默认地址是 http://127.0.0.1:5177;也可以指定端口或不自动打开:
npx @you-want/polyllm-cli studio --port 5178 --no-open仓库开发时仍可以使用 Vite:
pnpm --filter @you-want/polyllm-studio-app dev打开 Studio 后,可以为每个供应商填写:
- API Key:仅发送给本机 Studio 服务用于探测模型列表
- Base URL:支持官方地址或兼容网关
- 密钥环境变量:自动使用供应商约定名称,例如
OPENAI_API_KEY,不需要用户配置
点击“获取模型列表”会通过本地代理调用供应商的模型列表接口。成功后可以直接勾选多个模型、全选或清空,并为每个供应商指定一个默认模型;获取失败时可以手动填写模型 ID 并测试连接。选择供应商和模型后,可以:
- 安装命令
.env.example- TypeScript 或 Python 完整项目文件树
- 导入已有
polyllm.config.json后继续编辑 - 下载单独配置文件或完整项目 ZIP
TypeScript 项目支持 npm、pnpm 和 yarn;Python 项目生成 pyproject.toml、入口模块和 README,并使用 pip 安装。Studio 不会把 API key 写入配置、日志、ZIP 或源码,只生成环境变量引用。
除 OpenAI、DeepSeek 和 Anthropic 外,Studio 还内置 Gemini、Ollama 与 “OpenAI 兼容厂商” 通道。Ollama 为本地服务,默认地址 http://127.0.0.1:11434,无需 API Key,Studio 生成的配置与 .env.example 不会写入密钥。只要供应商暴露 OpenAI-compatible Chat Completions 接口,例如 Qwen、Moonshot、OpenRouter、Groq 或自建 vLLM / LiteLLM 网关,就可以填写 Base URL 后获取或手动填写模型 ID;也可在 OpenAI 兼容面板选择内置预设(OpenRouter / Qwen / Moonshot / Groq / vLLM / LiteLLM),自动填充 Base URL、密钥环境变量名与默认模型。
# 启动可视化配置界面
npx @you-want/polyllm-cli studio
# 根据配置中的 project.language 生成 TypeScript 或 Python 项目
node packages/cli/dist/main.js init \
--config polyllm.config.json \
--dir ./my-llm-app \
--name my-llm-app
# 检查 API key 环境变量(Ollama 无需密钥,仅提示)
node packages/cli/dist/main.js doctor --config polyllm.config.json
# 列出已启用插件支持的模型
node packages/cli/dist/main.js models --config polyllm.config.json
# 生成一个可发布的自定义供应商插件骨架
npx @you-want/polyllm-cli new-plugin --provider acme --provider-name Acme --dir ./packages/acmeinit 与 Studio 共用同一个项目生成器。TypeScript 会生成 package.json、tsconfig.json 和 src/*.ts;Python 会生成 pyproject.toml 和 src/<module>/*.py。两种项目都包含配置、环境变量模板、README 和 .gitignore。
import { createLLM } from '@you-want/polyllm-core'
import { openAIPlugin } from '@you-want/polyllm-openai'
import { deepSeekPlugin } from '@you-want/polyllm-deepseek'
const llm = createLLM({
plugins: [openAIPlugin, deepSeekPlugin],
providers: {
openai: { apiKeyEnv: 'OPENAI_API_KEY' },
deepseek: { apiKeyEnv: 'DEEPSEEK_API_KEY' },
},
paramPolicy: 'strict',
})
const response = await llm.chat('openai:gpt-4o-mini', {
messages: [{ role: 'user', content: '你好,PolyLLM' }],
})- 核心极简:核心不包含任何供应商请求逻辑。
- 显式注册:插件通过
createLLM({ plugins })注入,不用全局副作用导入。 - 模型命名空间:模型使用
provider:model形式,避免别名冲突。 - 策略可控:默认
strict,明确暴露不兼容能力;auto和lenient可显式选择。 - 密钥安全:配置只引用环境变量,不保存明文密钥。
- npm 修改完成后运行
pnpm changeset,选择需要发布的 npm 包和 semver 类型。 - Python 修改完成后运行
python3 python/version.py set <version>,并更新docs/release/发布说明。 - 发布前运行
pnpm verify:release,校验 npm/Python 版本、许可证、元数据和 changeset。 - 合并 Changeset 到
main,由维护者执行pnpm version-packages生成版本 PR。 - 版本 PR 合并后运行
pnpm verify:release:frozen,确认版本已冻结。 - 手动触发 GitHub Actions 的
Release npm与Release Python工作流。
完整发布指南见 docs/release.md。Changesets 只管理 npm 包;Python 发布版本由 python/version.py 管理。
export OPENAI_API_KEY=sk-...
pnpm --filter @you-want/polyllm-example-typescript start -- openai:gpt-4o-mini "你好"
# 流式输出
export DEEPSEEK_API_KEY=sk-...
pnpm --filter @you-want/polyllm-example-typescript start -- --stream deepseek:deepseek-chat "你好"