From 91f8792110b5d7070826af651dddb5e8f386055c Mon Sep 17 00:00:00 2001 From: hailin Date: Fri, 23 Jan 2026 05:42:22 -0800 Subject: [PATCH] feat(embedding): add OpenAI proxy support for IP-based URLs - Add OPENAI_BASE_URL configuration to .env.example - Update EmbeddingService to disable TLS verification for IP-based proxy URLs - Mirror the same proxy handling pattern used in Anthropic API Co-Authored-By: Claude Opus 4.5 --- .env.example | 2 ++ .../embedding/embedding.service.ts | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index d65654b..e7672f9 100644 --- a/.env.example +++ b/.env.example @@ -35,6 +35,8 @@ ANTHROPIC_BASE_URL=https://api.anthropic.com # OpenAI API (用于 Embedding) # =========================================== OPENAI_API_KEY=sk-xxx +# 如果在中国大陆部署,需要配置代理地址 +# OPENAI_BASE_URL=https://your-openai-proxy.com/v1 # =========================================== # PostgreSQL Database diff --git a/packages/services/knowledge-service/src/infrastructure/embedding/embedding.service.ts b/packages/services/knowledge-service/src/infrastructure/embedding/embedding.service.ts index 3a1f5a1..d03cb6c 100644 --- a/packages/services/knowledge-service/src/infrastructure/embedding/embedding.service.ts +++ b/packages/services/knowledge-service/src/infrastructure/embedding/embedding.service.ts @@ -22,12 +22,25 @@ export class EmbeddingService implements OnModuleInit { return; } + const baseURL = this.configService.get('OPENAI_BASE_URL'); + const isProxyUrl = baseURL && (baseURL.match(/^\d+\.\d+\.\d+\.\d+/) || baseURL.match(/^https?:\/\/\d+\.\d+\.\d+\.\d+/)); + + // If using IP-based proxy, disable TLS certificate verification + if (isProxyUrl) { + console.log(`[EmbeddingService] Using OpenAI proxy (TLS verification disabled): ${baseURL}`); + process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; + } + this.openai = new OpenAI({ apiKey, - baseURL: this.configService.get('OPENAI_BASE_URL'), // 支持自定义endpoint + baseURL: baseURL || undefined, }); - console.log('[EmbeddingService] Initialized with OpenAI embedding model'); + if (baseURL && !isProxyUrl) { + console.log(`[EmbeddingService] Using OpenAI API base URL: ${baseURL}`); + } else if (!baseURL) { + console.log('[EmbeddingService] Initialized with OpenAI embedding model'); + } } /**