From 6ca57be607c9482094964d385988ad0a762cbff1 Mon Sep 17 00:00:00 2001 From: LIlGG <1103069291@qq.com> Date: Mon, 29 Sep 2025 11:34:40 +0800 Subject: [PATCH] chore: merge openai and openailike --- .env.example | 4 +- .github/workflows/docs.yaml | 24 +++++++--- README.md | 10 ++--- app/lib/modules/llm/providers/deepseek.ts | 8 ++-- app/lib/modules/llm/providers/groq.ts | 2 +- app/lib/modules/llm/providers/open-router.ts | 2 +- app/lib/modules/llm/providers/openai-like.ts | 46 -------------------- app/lib/modules/llm/providers/openai.ts | 41 ++++++----------- app/lib/modules/llm/registry.ts | 2 - app/lib/stores/settings.ts | 3 -- docs/content/configuration.md | 18 +++----- docs/content/deployment/docker-compose.md | 6 +-- docs/content/deployment/docker.md | 18 ++++---- docs/content/deployment/source.md | 12 ++--- docs/content/faq.md | 6 +-- docs/content/quick-start.md | 26 ++++------- 16 files changed, 82 insertions(+), 146 deletions(-) delete mode 100644 app/lib/modules/llm/providers/openai-like.ts diff --git a/.env.example b/.env.example index 63d2e46..ed061ff 100644 --- a/.env.example +++ b/.env.example @@ -20,10 +20,10 @@ MAX_UPLOAD_SIZE_MB=5 DEFAULT_NUM_CTX= # LLM Configuration Options -# Enabled model providers, currently supporting Anthropic, Cohere, Deepseek, Google, Groq, HuggingFace, Hyperbolic, Mistral, Ollama, OpenAI, OpenRouter, OpenAILike, Perplexity, xAI, Together, LMStudio, AmazonBedrock, Github +# Enabled model providers, currently supporting Anthropic, Cohere, DeepSeek, Google, Groq, HuggingFace, Hyperbolic, Mistral, Ollama, OpenAI, OpenRouter, Perplexity, xAI, Together, LMStudio, AmazonBedrock, Github LLM_PROVIDER= -# BASE URL of the current model provider, some providers require this to be set, such as OpenAILike, Ollama, LMStudio +# BASE URL of the current model provider, some providers require this to be set, such as OpenAI, Ollama, LMStudio # DONT USE http://localhost:11434 due to IPV6 issues # USE EXAMPLE http://127.0.0.1:11434 PROVIDER_BASE_URL= diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 63b1fb3..68b17c3 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -7,10 +7,18 @@ on: paths: - 'docs/**' permissions: - contents: write + contents: read + pages: write + id-token: write jobs: build_docs: runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + concurrency: + group: "pages" + cancel-in-progress: false steps: - uses: actions/checkout@v4 @@ -37,8 +45,14 @@ jobs: - name: Build docs website run: pnpm run docs:build - - name: Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v3 + - name: Setup Pages + uses: actions/configure-pages@v4 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./docs/build + path: ./docs/build + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/README.md b/README.md index 809f6bd..62ebc2a 100644 --- a/README.md +++ b/README.md @@ -36,9 +36,9 @@ docker run -d \ --name upage \ --restart unless-stopped \ -p 3000:3000 \ - -e LLM_PROVIDER=OpenAILike \ + -e LLM_PROVIDER=OpenAI \ -e PROVIDER_BASE_URL=your-provider-base-url \ - -e PROVIDER_API_KEY=your-openai-like-api-key \ + -e PROVIDER_API_KEY=your-openai-api-key \ -e LLM_DEFAULT_MODEL=your-default-model \ -e LLM_MINOR_MODEL=your-minor-model \ -v ./data:/app/data \ @@ -48,9 +48,9 @@ docker run -d \ ``` 其中参数说明如下: -- `-e LLM_PROVIDER=OpenAILike`:设置默认的 LLM 提供商为 OpenAILike,即兼容 OpenAI 的 API 接口。 -- `-e PROVIDER_BASE_URL=your-provider-base-url`:设置 LLM 提供商的 API 基础 URL,部分提供商需要设置此项,例如 OpenAILike, Ollama, LMStudio。 -- `-e PROVIDER_API_KEY=your-openai-like-api-key`:设置 LLM 提供商的 API 密钥,大部分提供商需要设置此项。 +- `-e LLM_PROVIDER=OpenAI`:设置默认的 LLM 提供商为 OpenAI,同时兼容支持 OpenAI 规范的 API 接口。 +- `-e PROVIDER_BASE_URL=your-provider-base-url`:设置 LLM 提供商的 API 基础 URL,部分提供商需要设置此项,例如 Ollama, LMStudio。OpenAI 提供商可选此项。 +- `-e PROVIDER_API_KEY=your-openai-api-key`:设置 LLM 提供商的 API 密钥,大部分提供商需要设置此项。 - `-e LLM_DEFAULT_MODEL=your-default-model`:设置默认的 LLM 模型,用于构建页面。 - `-e LLM_MINOR_MODEL=your-minor-model`:设置次要的 LLM 模型,用于执行其他任务。 - `-v ./data:/app/data`:挂载数据目录 diff --git a/app/lib/modules/llm/providers/deepseek.ts b/app/lib/modules/llm/providers/deepseek.ts index 0afeca4..815395a 100644 --- a/app/lib/modules/llm/providers/deepseek.ts +++ b/app/lib/modules/llm/providers/deepseek.ts @@ -5,7 +5,7 @@ import type { ModelInfo } from '~/lib/modules/llm/types'; import type { IProviderSetting } from '~/types/model'; export default class DeepseekProvider extends BaseProvider { - name = 'Deepseek'; + name = 'DeepSeek'; getApiKeyLink = 'https://platform.deepseek.com/apiKeys'; config = { @@ -14,9 +14,9 @@ export default class DeepseekProvider extends BaseProvider { }; staticModels: ModelInfo[] = [ - { name: 'deepseek-coder', label: 'Deepseek-Coder', provider: 'Deepseek', maxTokenAllowed: 8000 }, - { name: 'deepseek-chat', label: 'Deepseek-Chat', provider: 'Deepseek', maxTokenAllowed: 8000 }, - { name: 'deepseek-reasoner', label: 'Deepseek-Reasoner', provider: 'Deepseek', maxTokenAllowed: 8000 }, + { name: 'deepseek-coder', label: 'DeepSeek-Coder', provider: 'DeepSeek', maxTokenAllowed: 8000 }, + { name: 'deepseek-chat', label: 'DeepSeek-Chat', provider: 'DeepSeek', maxTokenAllowed: 8000 }, + { name: 'deepseek-reasoner', label: 'DeepSeek-Reasoner', provider: 'DeepSeek', maxTokenAllowed: 8000 }, ]; getModelInstance(options: { model: string; providerSettings?: Record }): LanguageModel { diff --git a/app/lib/modules/llm/providers/groq.ts b/app/lib/modules/llm/providers/groq.ts index 2076ee8..3e4708a 100644 --- a/app/lib/modules/llm/providers/groq.ts +++ b/app/lib/modules/llm/providers/groq.ts @@ -17,7 +17,7 @@ export default class GroqProvider extends BaseProvider { { name: 'llama-3.3-70b-versatile', label: 'Llama 3.3 70b (Groq)', provider: 'Groq', maxTokenAllowed: 8000 }, { name: 'deepseek-r1-distill-llama-70b', - label: 'Deepseek R1 Distill Llama 70b (Groq)', + label: 'DeepSeek R1 Distill Llama 70b (Groq)', provider: 'Groq', maxTokenAllowed: 131072, }, diff --git a/app/lib/modules/llm/providers/open-router.ts b/app/lib/modules/llm/providers/open-router.ts index e6fd63a..3ee33fd 100644 --- a/app/lib/modules/llm/providers/open-router.ts +++ b/app/lib/modules/llm/providers/open-router.ts @@ -37,7 +37,7 @@ export default class OpenRouterProvider extends BaseProvider { }, { name: 'deepseek/deepseek-coder', - label: 'Deepseek-Coder V2 236B (OpenRouter)', + label: 'DeepSeek-Coder V2 236B (OpenRouter)', provider: 'OpenRouter', maxTokenAllowed: 8000, }, diff --git a/app/lib/modules/llm/providers/openai-like.ts b/app/lib/modules/llm/providers/openai-like.ts deleted file mode 100644 index aa85435..0000000 --- a/app/lib/modules/llm/providers/openai-like.ts +++ /dev/null @@ -1,46 +0,0 @@ -import type { LanguageModel } from 'ai'; -import { BaseProvider, getOpenAILikeModel } from '~/lib/modules/llm/base-provider'; -import type { ModelInfo } from '~/lib/modules/llm/types'; -import type { IProviderSetting } from '~/types/model'; - -export default class OpenAILikeProvider extends BaseProvider { - name = 'OpenAILike'; - getApiKeyLink = undefined; - - staticModels: ModelInfo[] = []; - - async getDynamicModels(settings?: IProviderSetting): Promise { - const { baseUrl, apiKey } = this.getProviderBaseUrlAndKey(settings); - - if (!baseUrl || !apiKey) { - return []; - } - - const response = await fetch(`${baseUrl}/models`, { - headers: { - Authorization: `Bearer ${apiKey}`, - }, - }); - - const res = (await response.json()) as any; - - return res.data.map((model: any) => ({ - name: model.id, - label: model.id, - provider: this.name, - maxTokenAllowed: 8000, - })); - } - - getModelInstance(options: { model: string; providerSettings?: Record }): LanguageModel { - const { model, providerSettings } = options; - - const { baseUrl, apiKey } = this.getProviderBaseUrlAndKey(providerSettings?.[this.name]); - - if (!baseUrl || !apiKey) { - throw new Error(`Missing configuration for ${this.name} provider`); - } - - return getOpenAILikeModel(baseUrl, apiKey, model); - } -} diff --git a/app/lib/modules/llm/providers/openai.ts b/app/lib/modules/llm/providers/openai.ts index 88cbd48..a859c7e 100644 --- a/app/lib/modules/llm/providers/openai.ts +++ b/app/lib/modules/llm/providers/openai.ts @@ -4,59 +4,46 @@ import { BaseProvider } from '~/lib/modules/llm/base-provider'; import type { ModelInfo } from '~/lib/modules/llm/types'; import type { IProviderSetting } from '~/types/model'; -export default class OpenAIProvider extends BaseProvider { +export default class OpenAILikeProvider extends BaseProvider { name = 'OpenAI'; - getApiKeyLink = 'https://platform.openai.com/api-keys'; + getApiKeyLink = undefined; - staticModels: ModelInfo[] = [ - { name: 'gpt-4o', label: 'GPT-4o', provider: 'OpenAI', maxTokenAllowed: 8000 }, - { name: 'gpt-4o-mini', label: 'GPT-4o Mini', provider: 'OpenAI', maxTokenAllowed: 8000 }, - { name: 'gpt-4-turbo', label: 'GPT-4 Turbo', provider: 'OpenAI', maxTokenAllowed: 8000 }, - { name: 'gpt-4', label: 'GPT-4', provider: 'OpenAI', maxTokenAllowed: 8000 }, - { name: 'gpt-3.5-turbo', label: 'GPT-3.5 Turbo', provider: 'OpenAI', maxTokenAllowed: 8000 }, - ]; + staticModels: ModelInfo[] = []; async getDynamicModels(settings?: IProviderSetting): Promise { - const { apiKey } = this.getProviderBaseUrlAndKey(settings); + const { baseUrl, apiKey } = this.getProviderBaseUrlAndKey(settings); - if (!apiKey) { - throw `Missing Api Key configuration for ${this.name} provider`; + if (!baseUrl || !apiKey) { + return []; } - const response = await fetch(`https://api.openai.com/v1/models`, { + const response = await fetch(`${baseUrl}/models`, { headers: { Authorization: `Bearer ${apiKey}`, }, }); const res = (await response.json()) as any; - const staticModelIds = this.staticModels.map((m) => m.name); - const data = res.data.filter( - (model: any) => - model.object === 'model' && - (model.id.startsWith('gpt-') || model.id.startsWith('o') || model.id.startsWith('chatgpt-')) && - !staticModelIds.includes(model.id), - ); - - return data.map((m: any) => ({ - name: m.id, - label: `${m.id}`, + return res.data.map((model: any) => ({ + name: model.id, + label: model.id, provider: this.name, - maxTokenAllowed: m.context_window || 32000, + maxTokenAllowed: 8000, })); } getModelInstance(options: { model: string; providerSettings?: Record }): LanguageModel { const { model, providerSettings } = options; - const { apiKey } = this.getProviderBaseUrlAndKey(providerSettings?.[this.name]); + const { baseUrl, apiKey } = this.getProviderBaseUrlAndKey(providerSettings?.[this.name]); if (!apiKey) { - throw new Error(`Missing API key for ${this.name} provider`); + throw new Error(`Missing configuration for ${this.name} provider`); } const openai = createOpenAI({ + baseURL: baseUrl, apiKey, }); diff --git a/app/lib/modules/llm/registry.ts b/app/lib/modules/llm/registry.ts index ed5330f..8d1122d 100644 --- a/app/lib/modules/llm/registry.ts +++ b/app/lib/modules/llm/registry.ts @@ -12,7 +12,6 @@ import MistralProvider from './providers/mistral'; import OllamaProvider from './providers/ollama'; import OpenRouterProvider from './providers/open-router'; import OpenAIProvider from './providers/openai'; -import OpenAILikeProvider from './providers/openai-like'; import PerplexityProvider from './providers/perplexity'; import TogetherProvider from './providers/together'; import XAIProvider from './providers/xai'; @@ -29,7 +28,6 @@ export { OllamaProvider, OpenAIProvider, OpenRouterProvider, - OpenAILikeProvider, PerplexityProvider, XAIProvider, TogetherProvider, diff --git a/app/lib/stores/settings.ts b/app/lib/stores/settings.ts index 39d3566..9645340 100644 --- a/app/lib/stores/settings.ts +++ b/app/lib/stores/settings.ts @@ -25,9 +25,6 @@ export interface Shortcuts { toggleTheme: Shortcut; } -export const URL_CONFIGURABLE_PROVIDERS = ['Ollama', 'LMStudio', 'OpenAILike']; -export const LOCAL_PROVIDERS = ['OpenAILike', 'LMStudio', 'Ollama']; - // Simplified shortcuts store with only theme toggle export const shortcutsStore = map({ toggleTheme: { diff --git a/docs/content/configuration.md b/docs/content/configuration.md index 1a951e2..270cbca 100644 --- a/docs/content/configuration.md +++ b/docs/content/configuration.md @@ -38,7 +38,7 @@ UPage 支持多种 AI 提供商,您需要配置一个 AI 提供商才能使用 | 环境变量 | 描述 | 默认值 | 必填 | | --- | --- | --- | --- | | `LLM_PROVIDER` | LLM 提供商,按照下述配置项配置一个 | - | 是 | -| `PROVIDER_BASE_URL` | LLM 提供商的 API 基础 URL,部分提供商需要设置此项,例如 OpenAILike, Ollama, LMStudio | - | 否,部分提供商不需要设置此项 | +| `PROVIDER_BASE_URL` | LLM 提供商的 API 基础 URL,部分提供商需要设置此项,例如 Ollama, LMStudio。 OpenAI 可选此项 | - | 否,部分提供商不需要设置此项 | | `PROVIDER_API_KEY` | LLM 提供商的 API 密钥,大部分提供商需要设置此项 | - | 否,部分提供商不需要设置此项 | | `LLM_DEFAULT_MODEL` | 生成页面所使用的模型 | - | 是 | | `LLM_MINOR_MODEL` | 辅助页面生成所使用的模型 | - | 是 | @@ -95,7 +95,7 @@ UPage 支持多种 AI 提供商,您需要配置一个 AI 提供商才能使用 | 环境变量 | 描述 | 默认值 | 必填 | | --- | --- | --- | --- | -| `LLM_PROVIDER` | DeepSeek 提供商名称 | Deepseek | 是 | +| `LLM_PROVIDER` | DeepSeek 提供商名称 | DeepSeek | 是 | | `PROVIDER_API_KEY` | DeepSeek API 密钥 | - | 是(如果使用 DeepSeek) | :::info @@ -201,19 +201,12 @@ UPage 支持多种 AI 提供商,您需要配置一个 AI 提供商才能使用 前往 [OpenRouter](https://openrouter.ai/settings/keys) 获取 API 密钥。 ::: -### 兼容 OpenAI 接口的服务 - -| 环境变量 | 描述 | 默认值 | 必填 | -| --- | --- | --- | --- | -| `LLM_PROVIDER` | OpenAILike 提供商名称 | OpenAILike | 是 | -| `PROVIDER_BASE_URL` | API 基础 URL | - | 是(如果使用 OpenAILike) | -| `PROVIDER_API_KEY` | API 密钥 | - | 是(如果使用 OpenAILike) | - ### OpenAI | 环境变量 | 描述 | 默认值 | 必填 | | --- | --- | --- | --- | | `LLM_PROVIDER` | OpenAI 提供商名称 | OpenAI | 是 | +| `PROVIDER_BASE_URL` | API 基础 URL | - | 否(不填写时,使用 OpenAI 官方 API) | | `PROVIDER_API_KEY` | OpenAI API 密钥 | - | 是(如果使用 OpenAI) | :::info @@ -358,8 +351,9 @@ services: ports: - "3000:3000" environment: - # 使用 OpenAI 兼容接口的提供商配置 - - LLM_PROVIDER=OpenAILike + # 使用 OpenAI 提供商配置,同时兼容 OpenAI 规范的 API 接口 + - LLM_PROVIDER=OpenAI + # 此项可选,不填写时,使用 OpenAI 官方 API - PROVIDER_BASE_URL=your-openai-api-base-url - PROVIDER_API_KEY=your-openai-api-key - LLM_DEFAULT_MODEL=gpt-4.1 diff --git a/docs/content/deployment/docker-compose.md b/docs/content/deployment/docker-compose.md index b367c4d..0b4095f 100644 --- a/docs/content/deployment/docker-compose.md +++ b/docs/content/deployment/docker-compose.md @@ -116,9 +116,9 @@ UPage 支持通过环境变量进行配置。以下是一些比较重要的环 | 环境变量 | 描述 | 必填 | 示例 | | --- | --- | --- | --- | -| `LLM_PROVIDER` | 默认 LLM 提供商 | 是 | `OpenAILike` | -| `PROVIDER_BASE_URL` | OpenAI 兼容 API 基础 URL | 是 | `https://your-api-base-url` | -| `PROVIDER_API_KEY` | OpenAI 兼容 API 密钥 | 是 | `your-openai-like-api-key` | +| `LLM_PROVIDER` | 默认 LLM 提供商 | 是 | `OpenAI` | +| `PROVIDER_BASE_URL` | OpenAI 兼容 API 基础 URL | 否 | `https://your-api-base-url` | +| `PROVIDER_API_KEY` | OpenAI 兼容 API 密钥 | 否 | `your-openai-api-key` | ### 大模型配置 diff --git a/docs/content/deployment/docker.md b/docs/content/deployment/docker.md index e22e38c..cdea8b8 100644 --- a/docs/content/deployment/docker.md +++ b/docs/content/deployment/docker.md @@ -56,9 +56,9 @@ docker run -d \ --name upage \ --restart unless-stopped \ -p 3000:3000 \ - -e LLM_PROVIDER=OpenAILike \ - -e PROVIDER_BASE_URL=your-openai-like-api-base-url \ - -e PROVIDER_API_KEY=your-openai-like-api-key \ + -e LLM_PROVIDER=OpenAI \ + -e PROVIDER_BASE_URL=your-openai-api-base-url \ + -e PROVIDER_API_KEY=your-openai-api-key \ -e LLM_DEFAULT_MODEL=your-default-model \ -e LLM_MINOR_MODEL=your-minor-model \ -v ~/upage/data:/app/data \ @@ -113,9 +113,9 @@ UPage 支持通过环境变量进行配置。以下是一些比较重要的环 | 环境变量 | 描述 | 必填 | 示例 | | --- | --- | --- | --- | -| `LLM_PROVIDER` | 默认 LLM 提供商 | 是 | `OpenAILike` | -| `PROVIDER_BASE_URL` | OpenAI 兼容 API 基础 URL | 是 | `https://your-api-base-url` | -| `PROVIDER_API_KEY` | OpenAI 兼容 API 密钥 | 是 | `your-openai-like-api-key` | +| `LLM_PROVIDER` | 默认 LLM 提供商 | 是 | `OpenAI` | +| `PROVIDER_BASE_URL` | OpenAI 或者其他兼容 OpenAI 规范的 API 基础 URL | 否 | `https://your-api-base-url` | +| `PROVIDER_API_KEY` | OpenAI 或者其他兼容 OpenAI 规范的 API 密钥 | 是 | `your-openai-api-key` | ### 大模型配置 @@ -141,9 +141,9 @@ docker run -d \ --name upage \ --restart unless-stopped \ -p 3000:3000 \ - -e LLM_PROVIDER=OpenAILike \ - -e PROVIDER_BASE_URL=your-openai-like-api-base-url \ - -e PROVIDER_API_KEY=your-openai-like-api-key \ + -e LLM_PROVIDER=OpenAI \ + -e PROVIDER_BASE_URL=your-openai-api-base-url \ + -e PROVIDER_API_KEY=your-openai-api-key \ -e LLM_DEFAULT_MODEL=your-default-model \ -e LLM_MINOR_MODEL=your-minor-model \ -v ~/upage/data:/app/data \ diff --git a/docs/content/deployment/source.md b/docs/content/deployment/source.md index 5dd277a..3b54590 100644 --- a/docs/content/deployment/source.md +++ b/docs/content/deployment/source.md @@ -55,9 +55,9 @@ MAX_UPLOAD_SIZE_MB=5 STORAGE_DIR=./storage # AI 提供商配置 -LLM_PROVIDER=OpenAILike -PROVIDER_BASE_URL=your-openai-like-api-base-url -PROVIDER_API_KEY=your-openai-like-api-key +LLM_PROVIDER=OpenAI +PROVIDER_BASE_URL=your-openai-api-base-url +PROVIDER_API_KEY=your-openai-api-key LLM_DEFAULT_MODEL=your-default-model LLM_MINOR_MODEL=your-minor-model ``` @@ -135,9 +135,9 @@ module.exports = { NODE_ENV: 'production', OPERATING_ENV: 'production', PORT: 3000, - LLM_PROVIDER: 'OpenAILike', - PROVIDER_BASE_URL: 'your-openai-like-api-base-url', - PROVIDER_API_KEY: 'your-openai-like-api-key', + LLM_PROVIDER: 'OpenAI', + PROVIDER_BASE_URL: 'your-openai-api-base-url', + PROVIDER_API_KEY: 'your-openai-api-key', LLM_DEFAULT_MODEL: 'your-default-model', LLM_MINOR_MODEL: 'your-minor-model', } diff --git a/docs/content/faq.md b/docs/content/faq.md index 3fe1d81..1daf00b 100644 --- a/docs/content/faq.md +++ b/docs/content/faq.md @@ -39,9 +39,9 @@ docker run -d \ --name upage \ --restart unless-stopped \ -p 3000:3000 \ - -e LLM_PROVIDER=OpenAILike \ - -e PROVIDER_BASE_URL=your-openai-like-api-base-url \ - -e PROVIDER_API_KEY=your-openai-like-api-key \ + -e LLM_PROVIDER=OpenAI \ + -e PROVIDER_BASE_URL=your-openai-api-base-url \ + -e PROVIDER_API_KEY=your-openai-api-key \ -e LLM_DEFAULT_MODEL=your-default-model \ -e LLM_MINOR_MODEL=your-minor-model \ -v ./data:/app/data \ diff --git a/docs/content/quick-start.md b/docs/content/quick-start.md index 1b8ebd3..eebd378 100644 --- a/docs/content/quick-start.md +++ b/docs/content/quick-start.md @@ -29,9 +29,9 @@ docker run -d \ --name upage \ --restart unless-stopped \ -p 3000:3000 \ - -e LLM_PROVIDER=OpenAILike \ - -e PROVIDER_BASE_URL=your-openai-like-api-base-url \ - -e PROVIDER_API_KEY=your-openai-like-api-key \ + -e LLM_PROVIDER=OpenAI \ + -e PROVIDER_BASE_URL=your-openai-api-base-url \ + -e PROVIDER_API_KEY=your-openai-api-key \ -e LLM_DEFAULT_MODEL=your-default-model \ -e LLM_MINOR_MODEL=your-minor-model \ -v ./data:/app/data \ @@ -42,9 +42,9 @@ docker run -d \ ### 参数说明 -- `-e LLM_PROVIDER=OpenAILike`:设置默认的 LLM 提供商 -- `-e PROVIDER_BASE_URL=your-openai-like-api-base-url`:设置 API 基础 URL -- `-e PROVIDER_API_KEY=your-openai-like-api-key`:设置 API 密钥 +- `-e LLM_PROVIDER=OpenAI`:设置默认的 LLM 提供商 +- `-e PROVIDER_BASE_URL=your-openai-api-base-url`:设置 API 基础 URL +- `-e PROVIDER_API_KEY=your-openai-api-key`:设置 API 密钥 - `-e LLM_DEFAULT_MODEL=your-default-model`:设置用于页面生成的默认 AI 模型 - `-e LLM_MINOR_MODEL=your-minor-model`:设置用于辅助任务的 AI 模型 - `-v ./data:/app/data`:挂载数据目录,用于存储数据库文件 @@ -67,26 +67,18 @@ UPage 支持多种 AI 提供商,您需要至少配置一个 AI 提供商才能 ### DeepSeek ```bash --e LLM_PROVIDER=Deepseek \ +-e LLM_PROVIDER=DeepSeek \ -e PROVIDER_API_KEY=your-deepseek-api-key \ -e LLM_DEFAULT_MODEL=deepseek-chat \ -e LLM_MINOR_MODEL=deepseek-reasoner ``` -### 兼容 OpenAI 接口的服务 - -```bash --e LLM_PROVIDER=OpenAILike \ --e PROVIDER_BASE_URL=https://your-api-base-url \ --e PROVIDER_API_KEY=your-api-key \ --e LLM_DEFAULT_MODEL=your-model-name \ --e LLM_MINOR_MODEL=your-minor-model-name -``` - ### OpenAI ```bash -e LLM_PROVIDER=OpenAI \ +# 此项可选,不填写时,使用 OpenAI 官方 API +-e PROVIDER_BASE_URL=your-openai-api-base-url \ -e PROVIDER_API_KEY=your-openai-api-key \ -e LLM_DEFAULT_MODEL=gpt-4-turbo \ -e LLM_MINOR_MODEL=gpt-3.5-turbo