create-mf2-app
Version:
The stack AI moves fast with.
341 lines (246 loc) • 7.74 kB
Markdown
# AI Setup Guide
This guide covers everything you need to know about setting up and using the AI features in this template.
## Quick Start
### 1. Get API Keys
You'll need at least one AI provider API key:
- **OpenAI** (recommended): [platform.openai.com](https://platform.openai.com)
- **Anthropic** (optional): [console.anthropic.com](https://console.anthropic.com)
- **Google AI** (optional): [makersuite.google.com](https://makersuite.google.com)
### 2. Configure Environment
Set your API keys in Convex:
```bash
# Required
npx convex env set OPENAI_API_KEY "sk-..."
# Optional - for different models
npx convex env set AI_CHAT_MODEL "gpt-4o-mini"
npx convex env set AI_EMBEDDING_MODEL "text-embedding-3-small"
# Optional - rate limits (defaults shown)
npx convex env set AI_MESSAGE_RATE_LIMIT "10" # per minute
npx convex env set AI_TOKEN_DAILY_LIMIT "50000" # per day
```
### 3. Test Your Setup
```bash
# Test models configuration
npx convex run ai:models:testModels
# Test AI chat
# Visit http://localhost:3000/ai/chat
```
## Features Overview
### AI Agents
Two pre-configured agents are included:
1. **Assistant Agent** (`/ai/chat`)
- General purpose AI assistant
- Helpful for various tasks
- Access to knowledge base search
2. **Support Agent** (`/ai/support`)
- Customer support focused
- Professional tone
- Escalation to human support
### Rate Limiting
Protects against abuse and controls costs:
- **Message limits**: 10 messages/minute per user
- **Token limits**: 50k tokens/day per user
- **Document uploads**: 100/day per user
- **Knowledge searches**: 30/minute per user
Customize in `convex/ai/rateLimiting.ts`.
### Usage Tracking
All AI usage is tracked for billing:
- Token usage per model
- Cost estimation
- Monthly billing periods
- Per-user attribution
View usage at `/ai/usage` (admin only).
### Knowledge Base (RAG)
Upload documents for AI to reference:
- User-specific namespaces
- Vector search with embeddings
- Automatic chunking
- Category filtering
## Cost Management
### Model Selection
Default models are optimized for cost:
| Use Case | Model | Cost/1K tokens |
|----------|-------|----------------|
| Chat | gpt-4o-mini | $0.00015 |
| Embeddings | text-embedding-3-small | $0.00002 |
### Cost Control Tips
1. **Use cheaper models in development**
```bash
npx convex env set AI_CHAT_MODEL "gpt-3.5-turbo"
```
2. **Set aggressive rate limits**
```bash
npx convex env set AI_TOKEN_DAILY_LIMIT "10000"
```
3. **Monitor usage regularly**
- Check `/ai/usage` dashboard
- Set up billing alerts
- Review monthly invoices
4. **Implement prepaid credits**
- Users purchase token credits
- Deduct from balance on usage
- Block when balance is zero
## Advanced Configuration
### Custom Agents
Create new agents in `convex/ai/agents/`:
```typescript
export const customAgent = new Agent(components.agent, {
name: "Custom Agent",
chat: getChatModel(),
instructions: "Your custom instructions",
tools: {
// Add custom tools
},
maxSteps: 5,
contextOptions: {
recentMessages: 100,
},
});
```
### Custom Tools
Add tools in `convex/ai/tools/`:
```typescript
export const customTool = createTool({
description: "Tool description",
args: z.object({
param: z.string(),
}),
handler: async (ctx, args) => {
// Tool logic
return "Result";
},
});
```
### Workflows
Complex multi-step operations in `convex/ai/workflows/`:
```typescript
export const customWorkflow = workflow.define({
args: { /* ... */ },
handler: async (step, args) => {
// Step 1
const result1 = await step.runAction(/* ... */);
// Step 2
const result2 = await step.runAction(/* ... */);
return { result1, result2 };
},
});
```
## Security Considerations
### API Key Security
- Never commit API keys to version control
- Use environment variables only
- Rotate keys regularly
- Use separate keys for dev/prod
### User Data
- Messages are stored in Convex database
- User-specific namespaces for RAG
- No data sent to AI providers beyond prompts
- Consider data retention policies
### Rate Limiting
- Prevents abuse and DoS attacks
- Controls costs from malicious users
- Implement IP-based limits if needed
- Monitor for unusual patterns
## Troubleshooting
### Common Issues
1. **"Rate limit exceeded" errors**
- Wait for limit to reset
- Increase limits if needed
- Check usage dashboard
2. **"Not authenticated" errors**
- Ensure user is logged in
- Check Clerk configuration
- Verify auth middleware
3. **High costs**
- Switch to cheaper models
- Reduce rate limits
- Implement prepaid system
- Monitor usage patterns
### Debug Mode
Enable debug logging:
```typescript
// In convex/ai/agents/assistant.ts
export const assistantAgent = new Agent(components.agent, {
// ... other config
rawRequestResponseHandler: async (ctx, { request, response }) => {
console.log("AI Request:", request);
console.log("AI Response:", response);
},
});
```
## Best Practices
### Prompt Engineering
1. **Be specific in agent instructions**
2. **Use system prompts effectively**
3. **Provide examples when possible**
4. **Test with different models**
### Context Management
1. **Limit context window size**
2. **Use RAG for large knowledge bases**
3. **Implement message pruning**
4. **Cache frequently used context**
### Error Handling
1. **Graceful degradation**
2. **User-friendly error messages**
3. **Retry with exponential backoff**
4. **Fallback to simpler models**
## Deployment
### Production Checklist
- [ ] Set production API keys
- [ ] Configure appropriate rate limits
- [ ] Enable usage tracking
- [ ] Set up monitoring alerts
- [ ] Test failover strategies
- [ ] Document support procedures
- [ ] Train support team on AI features
### Monitoring
Monitor these metrics:
- Token usage per user
- Error rates by model
- Response times
- Rate limit hits
- Cost per user
- User satisfaction
## Agent Playground
The Agent Playground provides a visual interface for testing and debugging your AI agents without writing code.
### Features
- **Thread Management**: Browse and manage conversation threads
- **Message Analysis**: Inspect message details and tool calls
- **Context Testing**: Experiment with different context options
- **Real-time Updates**: See changes as they happen
### Setup
1. **Generate an API Key**:
```bash
npx convex run --component agent apiKeys:issue '{"name":"playground"}'
```
2. **Access the Playground**:
**Option A: Hosted Version**
- Visit https://get-convex.github.io/agent/play
- Enter your deployment URL (from `.env.local`)
- Enter your API key
**Option B: Local Version**
```bash
npx @convex-dev/agent-playground
```
3. **Start Testing**:
- Select a user to view their threads
- Browse messages and tool calls
- Send test messages to threads
- Adjust context options
### API Key Management
- Generate multiple keys with different names
- Revoke a key by reissuing with the same name
- Keep keys secure - they provide full access to the playground API
### In-App Access
Visit `/ai/playground` in your app for detailed setup instructions and quick access to the playground.
## Next Steps
1. **Customize agents** for your use case
2. **Build domain-specific tools**
3. **Upload knowledge base content**
4. **Set up billing integration**
5. **Create custom workflows**
6. **Train support team**
For more information, see:
- [Convex Agent Docs](https://docs.convex.dev/agents)
- [AI SDK Documentation](https://sdk.vercel.ai/docs)
- [OpenAI Best Practices](https://platform.openai.com/docs/guides/best-practices)