微内核核心
统一请求、响应、ModelSpec、注册表、别名解析与参数策略,不包含任何供应商 HTTP 逻辑。
Why PolyLLM
不把几十个供应商依赖塞进一个“全家桶”,而是让每个团队只安装自己需要的部分。
统一请求、响应、ModelSpec、注册表、别名解析与参数策略,不包含任何供应商 HTTP 逻辑。
OpenAI、DeepSeek、Anthropic、Gemini、Ollama、OpenAI-compatible 独立成包,供应商 API 变化时只更新对应插件。
ModelSpec 声明能力、参数约束、上下文窗口和快照;别名指向常用模型,快照锁定版本。
TypeScript(npm)、Python(PyPI)、Rust(crates.io)同一套统一协议,行为由共享契约 fixture 裁决,跨语言不靠抄实现。
Diagnostics · Experimental
普通聊天可用,但工具调用、参数或流式行为异常——这是 OpenAI-compatible 生态里一类高频、难查的故障。
polyllm diagnose 把你捕获的失败流重放到一个独立的规范参考累积器上,
输出分层结论与版本化 JSON 报告。纯离线:无网络、无凭据、无遥测。
npx @you-want/polyllm-cli diagnose \
--fixture ./my-fixture.json
✗ my-fixture.json [C13] captured-derived
verdict: upstream-noncompliant-recoverable
anomaly [stream-parse] STREAM_PARSE_MISSING_INDEX (chunk#1,chunk#2)
observation OBS_EXPLICIT_NULL (chunk#2,chunk#3)
报告已写入: polyllm-diagnostics-report/
request-mapping / upstream-response / stream-parse / normalization——哪一层出了问题,证据定位到 chunk。
STREAM_PARSE_MISSING_INDEX、NORMALIZATION_ARGS_IN_CONTENT 等——可进 CI,可被搜索引擎检索。
脱敏 fixture 在新目录可重放;故意损坏的流必然让检查变红(变异检查),防止「报告永远绿」。
Quick Start
先用本地 Studio 完成选择和配置,再把生成物放进你的项目。当前稳定版本 0.6.0。
npx @you-want/polyllm-cli studio
CLI 会启动 http://127.0.0.1:5177,并自动打开浏览器。
npm install @you-want/polyllm-core \
@you-want/polyllm-openai \
@you-want/polyllm-deepseek
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('deepseek:chat', {
messages: [{ role: 'user', content: '你好,PolyLLM' }],
})
python3 -m pip install polyllm-core \
polyllm-openai \
polyllm-deepseek
import asyncio
from polyllm_core import create_llm
from polyllm_deepseek import DeepSeekPlugin
llm = create_llm(
plugins=[DeepSeekPlugin()],
providers={
'deepseek': {'api_key_env': 'DEEPSEEK_API_KEY'},
},
)
response = asyncio.run(
llm.chat(
'deepseek:chat',
messages=[{'role': 'user', 'content': '你好,PolyLLM'}],
)
)
cargo add polyllm-core polyllm-openai
use std::sync::Arc;
use polyllm_core::{create_llm, ClientConfig, ProviderConfig, UnifiedRequest};
use polyllm_openai::openai_plugin;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let llm = create_llm(
ClientConfig {
plugins: vec![openai_plugin()],
providers: [("openai".into(),
ProviderConfig { api_key_env: Some("OPENAI_API_KEY".into()), ..Default::default() })]
.into_iter().collect(),
..Default::default()
},
Arc::new(polyllm_core::ReqwestTransport::new()),
)?;
let request: UnifiedRequest = serde_json::from_value(serde_json::json!({
"model": "openai:gpt-4o-mini",
"messages": [{ "role": "user", "content": "你好,PolyLLM" }]
}))?;
let response = llm.chat("openai:gpt-4o-mini", &request, &Default::default()).await?;
Ok(())
}
Local Studio
polyllm.raingpt.top 不提供 API Key 输入表单。真实配置界面由 CLI 在你的电脑上启动, 模型列表探测和连接测试都从本机发出。
npx @you-want/polyllm-cli studio --port 5177
Multi-language
每种语言遵循生态习惯:TS 显式传插件、Python 类型完备、Rust async 客户端 + drop 即取消。行为一致性由共享契约 fixture 裁决。
npm 包、显式插件注入、AsyncIterable 流式响应、严格类型。
0.6.0独立 wheel、py.typed、async API、SSE 流式解析与动态自定义模型。
0.6.07 个 crate、tokio async 客户端、全供应商适配(含 Gemini / Anthropic 原生协议)。
0.1.x · crates.ioArchitecture
核心层不感知供应商细节,所有差异都收敛在插件边界内。
使用统一 chat / chatStream API
Registry · Resolver · ModelSpec · ParamPolicy
Security
生成物使用 apiKeyEnv / api_key_env,业务代码不持有明文密钥。
Studio 的模型列表和连通性测试通过 localhost 服务代理,不经过官网服务器。
官网没有输入框收集 Key;CLI 与插件源码开源,便于审查网络请求。