feat(ai): 支持多种 AI API 格式并修复连接测试#41
Conversation
📝 WalkthroughWalkthroughThe changes introduce multi-provider AI API support, enabling users to select between OpenAI, Claude, and Gemini through the settings panel. The service layer implements provider-agnostic request handling with unified dispatcher logic and provider-specific response parsing. The type system adds an apiType field to AIConfig. Changes
Sequence DiagramsequenceDiagram
actor User
participant SettingsPanel
participant AIService
participant OpenAI/Claude/Gemini
User->>SettingsPanel: Select API type (openai/claude/gemini)
SettingsPanel->>SettingsPanel: Save apiType to AIConfig
User->>SettingsPanel: Trigger AI operation (analyze/search)
SettingsPanel->>AIService: Request with AIConfig (includes apiType)
AIService->>AIService: requestText(): Determine provider<br/>via getApiType() selector
AIService->>AIService: buildApiUrl(): Normalize URL<br/>based on selected provider
alt apiType = 'openai'
AIService->>OpenAI/Claude/Gemini: POST /chat/completions
else apiType = 'claude'
AIService->>OpenAI/Claude/Gemini: POST /messages
else apiType = 'gemini'
AIService->>OpenAI/Claude/Gemini: POST /v1beta/generateContent
end
OpenAI/Claude/Gemini-->>AIService: Provider-specific response
AIService->>AIService: Extract content:<br/>parse JSON/text blocks<br/>based on provider format
AIService-->>SettingsPanel: Parsed AI response
SettingsPanel->>User: Display results
Estimated code review effort🎯 4 (Complex) | ⏱️ ~70 minutes Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
本次改动概览
影响范围
改动文件
Summary by CodeRabbit