[RFC] 133 - Single Provider with multi model runtime & add cunstom router provider. #8953
MapleEve
started this conversation in
RFC | 特性开发
Replies: 1 comment
-
New-API Provider 修正实施方案🔧 现实情况分析LobeChat 实际支持的 API 类型基于 export const baseRuntimeMap = {
anthropic: LobeAnthropicAI, // Anthropic Claude
azure: LobeAzureAI, // Azure OpenAI
cloudflare: LobeCloudflareAI, // Cloudflare Workers AI
fal: LobeFalAI, // Fal.ai
google: LobeGoogleAI, // Google Gemini
openai: LobeOpenAI, // OpenAI (默认)
xai: LobeXAI, // XAI (Grok)
}; 这意味着:
🎯 基于实际情况的 New-API Router 配置修正后的配置方案export const LobeNewApiAI = createRouterRuntime({
id: ModelProvider.NewApi,
models: async ({ client }) => {
try {
const modelsPage = (await client.models.list()) as any;
const modelList: NewApiModelCard[] = modelsPage.data || [];
return await processMultiProviderModelList(modelList, 'newapi');
} catch (error) {
console.warn('Failed to fetch New-API models:', error);
return [];
}
},
routers: [
// 1. Anthropic 路由 - 专用于 Claude 模型
{
apiType: 'anthropic',
models: LOBE_DEFAULT_MODEL_LIST.map((m) => m.id).filter(
(id) => detectModelProvider(id) === 'anthropic',
),
options: {
baseURL, // New-API 会自动路由到正确的 Claude 端点
},
},
// 2. Google 路由 - 专用于 Gemini 模型
{
apiType: 'google',
models: LOBE_DEFAULT_MODEL_LIST.map((m) => m.id).filter(
(id) => detectModelProvider(id) === 'google',
),
options: {
baseURL, // New-API 处理 Gemini 路由
// 注意:不需要 /v1beta 路径,New-API 内部处理
},
},
// 3. XAI 路由 - 专用于 Grok 模型
{
apiType: 'xai',
models: LOBE_DEFAULT_MODEL_LIST.map((m) => m.id).filter(
(id) => detectModelProvider(id) === 'xai',
),
options: {
baseURL: urlJoin(baseURL, '/v1'),
},
},
// 4. Azure 路由 - 如果 New-API 支持 Azure 格式
{
apiType: 'azure',
models: LOBE_DEFAULT_MODEL_LIST.map((m) => m.id).filter(
(id) => m.id.includes('azure') || detectModelProvider(id) === 'azure',
),
options: {
baseURL: urlJoin(baseURL, '/v1'),
},
},
// 5. Cloudflare 路由 - 如果 New-API 支持 Cloudflare Workers AI
{
apiType: 'cloudflare',
models: LOBE_DEFAULT_MODEL_LIST.map((m) => m.id).filter(
(id) => detectModelProvider(id) === 'cloudflare',
),
options: {
baseURL: urlJoin(baseURL, '/v1'),
},
},
// 6. OpenAI 路由 - 默认路由,处理所有其他模型
// 包括:OpenAI、Mistral、Cohere、国内厂商等所有 OpenAI 兼容模型
{
apiType: 'openai',
options: {
baseURL: urlJoin(baseURL, '/v1'),
chatCompletion: {
handlePayload: (payload: ChatStreamPayload) => {
// 处理特殊的响应模式
if (responsesAPIModels.has(payload.model)) {
return { ...payload, apiMode: 'responses' } as any;
}
// 处理国内厂商的特殊参数
if (payload.model.includes('qwen') || payload.model.includes('baichuan')) {
return { ...payload, stream: true } as any;
}
return payload;
},
},
},
},
],
}); 🔍 关键理解修正1. Router 的实际工作方式Router 不是基于 URL 路径分发,而是基于:
2. New-API 在这个架构中的角色New-API 作为中间件网关:
3. 支持的服务商映射基于 New-API 支持但 LobeChat 有对应 SDK 的:
🎯 实际可行的配置最简化的现实配置考虑到实际情况,建议采用简化配置: export const LobeNewApiAI = createRouterRuntime({
id: ModelProvider.NewApi,
models: async ({ client }) => {
try {
const modelsPage = (await client.models.list()) as any;
return await processMultiProviderModelList(modelsPage.data || [], 'newapi');
} catch (error) {
console.warn('Failed to fetch New-API models:', error);
return [];
}
},
routers: [
// Anthropic 路由 - Claude 模型
{
apiType: 'anthropic',
models: LOBE_DEFAULT_MODEL_LIST.map((m) => m.id).filter(
(id) => detectModelProvider(id) === 'anthropic',
),
options: { baseURL },
},
// Google 路由 - Gemini 模型
{
apiType: 'google',
models: LOBE_DEFAULT_MODEL_LIST.map((m) => m.id).filter(
(id) => detectModelProvider(id) === 'google',
),
options: { baseURL },
},
// XAI 路由 - Grok 模型
{
apiType: 'xai',
models: LOBE_DEFAULT_MODEL_LIST.map((m) => m.id).filter(
(id) => detectModelProvider(id) === 'xai',
),
options: { baseURL: urlJoin(baseURL, '/v1') },
},
// OpenAI 路由 - 处理所有其他模型(默认)
// 包括:OpenAI、Mistral、Cohere、DeepSeek、智谱等
{
apiType: 'openai',
options: {
baseURL: urlJoin(baseURL, '/v1'),
chatCompletion: {
handlePayload: (payload: ChatStreamPayload) => {
// 处理 Responses API 模型
if (responsesAPIModels.has(payload.model)) {
return { ...payload, apiMode: 'responses' } as any;
}
return payload;
},
},
},
},
],
debug: {
chatCompletion: () => process.env.DEBUG_NEWAPI_CHAT_COMPLETION === '1',
},
defaultHeaders: {
'User-Agent': 'LobeChat',
'X-Source': 'LobeHub',
},
}); 💡 关键实现细节1. 模型识别依赖配置依赖于 // 需要确保这个函数能正确识别模型所属的服务商
detectModelProvider('claude-3-sonnet') // → 'anthropic'
detectModelProvider('gemini-pro') // → 'google'
detectModelProvider('grok-1') // → 'xai'
detectModelProvider('gpt-4') // → 'openai'
detectModelProvider('mistral-large') // → 'openai' (因为无 mistral SDK) 2. New-API 配置要求在 New-API 管理界面需要:
3. 错误处理models: async ({ client }) => {
try {
const response = await client.models.list();
return await processMultiProviderModelList(response.data, 'newapi');
} catch (error) {
// New-API 特有的错误类型
if (error.message?.includes('quota exceeded')) {
console.warn('New-API quota exceeded');
} else if (error.message?.includes('channel unavailable')) {
console.warn('New-API channel unavailable');
}
return []; // 降级处理
}
} 🚨 实施注意事项1. 限制认知
2. 依赖关系
3. 性能考虑
📋 修正后的文件清单核心实现文件
注册文件
🎉 价值重估实际价值通过 New-API 集成,用户可以:
技术局限
🚀 总结修正后的方案更加务实和可行:
这个方案虽然不如理想状态完美,但完全可行,并且能为用户提供实实在在的价值。 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
LobeChat 第三方Provider集成优化 PRD
核心问题
当前LobeChat添加第三方Provider需要修改官方配置,导致官方服务和第三方服务相互影响,无法独立管理。
相关调研文档:
AIHubMix-分析.md
Cherry-studio-分析.md
new-api-接口分析.md
用户故事
只用官方服务的用户
只用第三方服务的用户
官方+第三方混用的用户
Roadmap
Phase 1
Add New Api with icons support
✨ feat: add NewAPI as a router provider for multi-model aggregation #9041
Add Batch Select Models
Phase 2
功能对比
🚀 核心技术优势:动态Runtime路由
Cherry-studio 的架构限制
LobeChat 的革命性优势
技术对比
LobeChat功能展望
配置架构改进
三层配置体系
配置域隔离
用户界面优化
Provider管理面板
模型选择优化
预期实现路径
Runtime 对比分析:LobeChat AIHubMix vs Cherry-studio 方案
概述
本文对比分析 LobeChat 中 AIHubMix Provider 的实现方式与 Cherry-studio 中 new-api 集成方式,探讨两种不同的单 provider 多 runtime 架构设计。
架构对比
1. 整体架构设计
2. Provider 配置对比
sdkType: 'router'
标识路由型 providertype: 'openai'
复用 OpenAI 兼容实现3. 运行时初始化对比
ModelRuntime.initializeWithProvider
统一初始化模型管理对比
1. 模型定义方式
2. 模型验证机制
请求处理对比
1. 请求路由
2. 错误处理
优缺点分析
LobeChat AIHubMix 方案
优点
缺点
Cherry-studio new-api 方案
优点
缺点
适用场景分析
LobeChat AIHubMix 方案适用于:
Cherry-studio new-api 方案适用于:
本 RFC 想讨论的 LobeChat 的改进建议:
type
限制Beta Was this translation helpful? Give feedback.
All reactions