From 22fa31fed6b7c32603989aff2bdf70c2734089a5 Mon Sep 17 00:00:00 2001 From: orcasjh Date: Sat, 15 Aug 2026 08:46:00 +0000 Subject: [PATCH] =?UTF-8?q?feat(ai):=20=E6=96=B0=E5=A2=9E=20OrcaRouter=20A?= =?UTF-8?q?I=20=E5=8D=8F=E8=AE=AE=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 镜像 openai 协议接法新增命名 OrcaRouter 协议: - protocol/orcarouter.go: OrcaRouter 协议(OpenAI 兼容 eino model, base-url 默认 https://api.orcarouter.ai/v1, model 或 orcarouter/orcarouter/auto) - protocol.go 增 ProtocolOrcaRouter 常量 - registry.go 注册 OrcaRouter - 前端 i18n en/zh 模型占位提示加 orcarouter 示例 --- frontend/src/i18n/en/system.ts | 2 +- frontend/src/i18n/zh-cn/system.ts | 2 +- server/internal/ai/protocol/orcarouter.go | 36 +++++++++++++++++++++++ server/internal/ai/protocol/protocol.go | 2 ++ server/internal/ai/protocol/registry.go | 1 + 5 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 server/internal/ai/protocol/orcarouter.go diff --git a/frontend/src/i18n/en/system.ts b/frontend/src/i18n/en/system.ts index 10623aa3..59f010c7 100644 --- a/frontend/src/i18n/en/system.ts +++ b/frontend/src/i18n/en/system.ts @@ -193,7 +193,7 @@ export default { aiModelConf: 'AI Model Config', aiModel: 'Model', - aiModelPlaceholder: 'protocol/model name, such as openai/gpt-3.5-turbo', + aiModelPlaceholder: 'protocol/model name, such as openai/gpt-3.5-turbo, orcarouter/orcarouter/auto', aiBaseUrl: 'Base URL', aiBaseUrlPlaceholder: 'Please enter the model request URL', aiApiKey: 'API Key', diff --git a/frontend/src/i18n/zh-cn/system.ts b/frontend/src/i18n/zh-cn/system.ts index bfec43d9..32013c08 100644 --- a/frontend/src/i18n/zh-cn/system.ts +++ b/frontend/src/i18n/zh-cn/system.ts @@ -193,7 +193,7 @@ export default { aiModelConf: 'AI模型配置', aiModel: '模型', - aiModelPlaceholder: '协议/模型名,如 openai/gpt-3.5-turbo', + aiModelPlaceholder: '协议/模型名,如 openai/gpt-3.5-turbo、orcarouter/orcarouter/auto', aiBaseUrl: '地址', aiBaseUrlPlaceholder: '请输入模型请求地址', aiApiKey: 'API Key', diff --git a/server/internal/ai/protocol/orcarouter.go b/server/internal/ai/protocol/orcarouter.go new file mode 100644 index 00000000..381a9319 --- /dev/null +++ b/server/internal/ai/protocol/orcarouter.go @@ -0,0 +1,36 @@ +package protocol + +import ( + "context" + "mayfly-go/internal/ai/config" + "time" + + "github.com/cloudwego/eino-ext/components/model/openai" + "github.com/cloudwego/eino/components/model" +) + +type OrcaRouter struct { +} + +func (o *OrcaRouter) Name() string { + return ProtocolOrcaRouter +} + +func (o *OrcaRouter) NewChatModel(ctx context.Context, modelConfig *config.ModelConfig) (model.ToolCallingChatModel, error) { + return openai.NewChatModel(ctx, &openai.ChatModelConfig{ + BaseURL: orcaRouterBaseURL(modelConfig.BaseUrl), + Model: modelConfig.GetModelSpec().Model, + APIKey: modelConfig.ApiKey, + Timeout: time.Duration(modelConfig.TimeOut) * time.Second, + MaxTokens: &modelConfig.MaxTokens, + Temperature: &modelConfig.Temperature, + }) +} + +// orcaRouterBaseURL 默认使用 OrcaRouter 的 OpenAI 兼容网关地址 +func orcaRouterBaseURL(baseUrl string) string { + if baseUrl != "" { + return baseUrl + } + return "https://api.orcarouter.ai/v1" +} diff --git a/server/internal/ai/protocol/protocol.go b/server/internal/ai/protocol/protocol.go index 49fe695f..48ced172 100644 --- a/server/internal/ai/protocol/protocol.go +++ b/server/internal/ai/protocol/protocol.go @@ -15,6 +15,8 @@ const ( const ProtocolOpenai = "openai" +const ProtocolOrcaRouter = "orcarouter" + type Protocol interface { // Name 返回协议标识,如 openai、azure 等 diff --git a/server/internal/ai/protocol/registry.go b/server/internal/ai/protocol/registry.go index 1ab8e929..4b33f619 100644 --- a/server/internal/ai/protocol/registry.go +++ b/server/internal/ai/protocol/registry.go @@ -15,6 +15,7 @@ import ( func init() { Register(new(Openai)) + Register(new(OrcaRouter)) } var ( -- Gitee