310 lines
6.8 KiB
Markdown
310 lines
6.8 KiB
Markdown
# AI Provider Configuration Guide
|
|
|
|
The Workflow Management System supports multiple AI providers for generating conclusion remarks. The system uses a **provider-agnostic architecture** with automatic fallback, making it easy to switch between providers.
|
|
|
|
## Supported Providers
|
|
|
|
| Provider | Environment Variable | Model Used | Installation |
|
|
|----------|---------------------|------------|--------------|
|
|
| **Claude (Anthropic)** | `CLAUDE_API_KEY` or `ANTHROPIC_API_KEY` | `claude-3-5-sonnet-20241022` | `npm install @anthropic-ai/sdk` |
|
|
| **OpenAI (GPT)** | `OPENAI_API_KEY` | `gpt-4o` | `npm install openai` |
|
|
| **Gemini (Google)** | `GEMINI_API_KEY` or `GOOGLE_AI_API_KEY` | `gemini-1.5-pro` | `npm install @google/generative-ai` |
|
|
|
|
---
|
|
|
|
## Quick Start
|
|
|
|
### Option 1: Claude (Recommended)
|
|
|
|
```bash
|
|
# Install package
|
|
npm install @anthropic-ai/sdk
|
|
|
|
# Set environment variable
|
|
AI_PROVIDER=claude
|
|
CLAUDE_API_KEY=sk-ant-xxxxxxxxxxxxx
|
|
```
|
|
|
|
### Option 2: OpenAI
|
|
|
|
```bash
|
|
# Install package
|
|
npm install openai
|
|
|
|
# Set environment variable
|
|
AI_PROVIDER=openai
|
|
OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxx
|
|
```
|
|
|
|
### Option 3: Gemini
|
|
|
|
```bash
|
|
# Install package
|
|
npm install @google/generative-ai
|
|
|
|
# Set environment variable
|
|
AI_PROVIDER=gemini
|
|
GEMINI_API_KEY=xxxxxxxxxxxxx
|
|
```
|
|
|
|
---
|
|
|
|
## Configuration
|
|
|
|
### 1. Set Preferred Provider (Optional)
|
|
|
|
Add to your `.env` file:
|
|
|
|
```bash
|
|
# Preferred AI provider (claude, openai, or gemini)
|
|
# Default: claude
|
|
AI_PROVIDER=claude
|
|
```
|
|
|
|
### 2. Add API Key
|
|
|
|
Add the corresponding API key for your chosen provider:
|
|
|
|
```bash
|
|
# For Claude (Anthropic)
|
|
CLAUDE_API_KEY=sk-ant-xxxxxxxxxxxxx
|
|
|
|
# For OpenAI
|
|
OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxx
|
|
|
|
# For Gemini (Google)
|
|
GEMINI_API_KEY=xxxxxxxxxxxxx
|
|
```
|
|
|
|
---
|
|
|
|
## Automatic Fallback
|
|
|
|
The system has built-in intelligence to handle provider failures:
|
|
|
|
1. **Primary**: Tries the provider specified in `AI_PROVIDER`
|
|
2. **Fallback**: If primary fails, tries other available providers in order
|
|
3. **Graceful Degradation**: If no provider is available, shows error to user
|
|
|
|
**Example Startup Logs:**
|
|
|
|
```
|
|
info: [AI Service] Preferred provider: claude
|
|
info: [AI Service] ✅ Claude provider initialized
|
|
info: [AI Service] ✅ Active provider: Claude (Anthropic)
|
|
```
|
|
|
|
**Example Fallback:**
|
|
|
|
```
|
|
info: [AI Service] Preferred provider: openai
|
|
warn: [AI Service] OpenAI API key not configured.
|
|
warn: [AI Service] Preferred provider unavailable. Trying fallbacks...
|
|
info: [AI Service] ✅ Claude provider initialized
|
|
info: [AI Service] ✅ Using fallback provider: Claude (Anthropic)
|
|
```
|
|
|
|
---
|
|
|
|
## Provider Comparison
|
|
|
|
### Claude (Anthropic)
|
|
- ✅ **Best for**: Professional, well-structured summaries
|
|
- ✅ **Strengths**: Excellent at following instructions, consistent output
|
|
- ✅ **Pricing**: Moderate (pay-per-token)
|
|
- ⚠️ **Requires**: API key from console.anthropic.com
|
|
|
|
### OpenAI (GPT-4)
|
|
- ✅ **Best for**: General-purpose text generation
|
|
- ✅ **Strengths**: Fast, widely adopted, good documentation
|
|
- ✅ **Pricing**: Moderate to high
|
|
- ⚠️ **Requires**: API key from platform.openai.com
|
|
|
|
### Gemini (Google)
|
|
- ✅ **Best for**: Cost-effective solution
|
|
- ✅ **Strengths**: Free tier available, good performance
|
|
- ✅ **Pricing**: Free tier + paid tiers
|
|
- ⚠️ **Requires**: API key from ai.google.dev
|
|
|
|
---
|
|
|
|
## Switching Providers
|
|
|
|
### Option A: Simple Switch (via .env)
|
|
|
|
Just change the `AI_PROVIDER` variable and restart the server:
|
|
|
|
```bash
|
|
# Old
|
|
AI_PROVIDER=claude
|
|
CLAUDE_API_KEY=sk-ant-xxxxxxxxxxxxx
|
|
|
|
# New
|
|
AI_PROVIDER=openai
|
|
OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxx
|
|
```
|
|
|
|
```bash
|
|
# Restart backend
|
|
npm run dev
|
|
```
|
|
|
|
### Option B: Multi-Provider Setup (Automatic Failover)
|
|
|
|
Configure multiple API keys for automatic failover:
|
|
|
|
```bash
|
|
AI_PROVIDER=claude
|
|
CLAUDE_API_KEY=sk-ant-xxxxxxxxxxxxx
|
|
OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxx
|
|
GEMINI_API_KEY=xxxxxxxxxxxxx
|
|
```
|
|
|
|
If Claude fails, the system automatically tries OpenAI, then Gemini.
|
|
|
|
---
|
|
|
|
## Testing AI Generation
|
|
|
|
### 1. Check if AI is configured:
|
|
|
|
```bash
|
|
curl http://localhost:5000/api/v1/health
|
|
```
|
|
|
|
Look for logs:
|
|
```
|
|
info: [AI Service] ✅ Active provider: Claude (Anthropic)
|
|
```
|
|
|
|
### 2. Test conclusion generation:
|
|
|
|
1. Create a workflow request
|
|
2. Complete all approvals (as final approver)
|
|
3. As initiator, click "Finalize & Close Request"
|
|
4. Click "Generate with AI"
|
|
5. Review AI-generated conclusion
|
|
6. Edit if needed
|
|
7. Finalize
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Error: "AI Service not configured"
|
|
|
|
**Solution**: Add at least one API key to `.env`:
|
|
```bash
|
|
CLAUDE_API_KEY=your-key-here
|
|
# OR
|
|
OPENAI_API_KEY=your-key-here
|
|
# OR
|
|
GEMINI_API_KEY=your-key-here
|
|
```
|
|
|
|
### Error: "Cannot find module '@anthropic-ai/sdk'"
|
|
|
|
**Solution**: Install the required package:
|
|
```bash
|
|
npm install @anthropic-ai/sdk
|
|
```
|
|
|
|
### Provider not working
|
|
|
|
**Check logs** for initialization errors:
|
|
```bash
|
|
# Successful
|
|
info: [AI Service] ✅ Claude provider initialized
|
|
|
|
# Failed
|
|
error: [AI Service] Failed to initialize Claude: Invalid API key
|
|
```
|
|
|
|
**Verify API key**:
|
|
- Claude: Should start with `sk-ant-`
|
|
- OpenAI: Should start with `sk-proj-` or `sk-`
|
|
- Gemini: No specific prefix
|
|
|
|
---
|
|
|
|
## Cost Management
|
|
|
|
### Estimated Costs (per conclusion generation):
|
|
|
|
| Provider | Tokens | Cost (approx) |
|
|
|----------|--------|---------------|
|
|
| Claude Sonnet | ~500 input + ~300 output | $0.004 |
|
|
| GPT-4o | ~500 input + ~300 output | $0.005 |
|
|
| Gemini Pro | ~500 input + ~300 output | Free tier or $0.0001 |
|
|
|
|
**Tips to reduce costs:**
|
|
- Use Gemini for development/testing (free tier)
|
|
- Use Claude/OpenAI for production
|
|
- Monitor usage via provider dashboards
|
|
|
|
---
|
|
|
|
## Security Best Practices
|
|
|
|
1. **Never commit API keys** to version control
|
|
2. **Use environment variables** for all sensitive data
|
|
3. **Rotate keys regularly** (every 3-6 months)
|
|
4. **Set rate limits** on provider dashboards
|
|
5. **Monitor usage** to detect anomalies
|
|
|
|
---
|
|
|
|
## Adding a New Provider
|
|
|
|
To add a new AI provider (e.g., Cohere, Hugging Face):
|
|
|
|
1. **Create Provider Class**:
|
|
|
|
```typescript
|
|
class NewProvider implements AIProvider {
|
|
private client: any = null;
|
|
|
|
constructor() {
|
|
const apiKey = process.env.NEW_PROVIDER_API_KEY;
|
|
if (!apiKey) return;
|
|
|
|
try {
|
|
const SDK = require('new-provider-sdk');
|
|
this.client = new SDK({ apiKey });
|
|
} catch (error) {
|
|
logger.error('Failed to initialize NewProvider:', error);
|
|
}
|
|
}
|
|
|
|
async generateText(prompt: string): Promise<string> {
|
|
// Implementation
|
|
}
|
|
|
|
isAvailable(): boolean {
|
|
return this.client !== null;
|
|
}
|
|
|
|
getProviderName(): string {
|
|
return 'NewProvider';
|
|
}
|
|
}
|
|
```
|
|
|
|
2. **Register in AIService**:
|
|
|
|
Add to constructor's switch statement and fallback array.
|
|
|
|
3. **Update Documentation**: Add to this README.
|
|
|
|
---
|
|
|
|
## Support
|
|
|
|
For issues with AI providers:
|
|
- **Claude**: https://docs.anthropic.com
|
|
- **OpenAI**: https://platform.openai.com/docs
|
|
- **Gemini**: https://ai.google.dev/docs
|
|
|
|
For system-specific issues, check application logs or contact the development team.
|
|
|