# AI模型接入系统 - 配置说明 ## 📋 配置文件说明 所有配置都在 `.env` 文件中统一管理。 ### 1. 基础配置 ```env # QQ机器人配置 BOT_APPID=你的机器人APPID BOT_SECRET=你的机器人SECRET # 日志配置 LOG_LEVEL=INFO # 沙箱模式 SANDBOX_MODE=False ``` ### 2. AI主模型配置 ```env # AI主模型配置 AI_PROVIDER=openai # 可选: openai, anthropic, deepseek, qwen AI_MODEL=gpt-4 AI_API_KEY=你的API密钥 AI_API_BASE=https://api.openai.com/v1 # 可选 ``` **支持的模型提供商**: - `openai` - OpenAI (GPT-4, GPT-3.5-turbo等) - `anthropic` - Anthropic Claude - `deepseek` - DeepSeek - `qwen` - 通义千问 ### 3. AI嵌入模型配置(用于RAG) ```env # AI嵌入模型配置(用于RAG记忆检索) AI_EMBED_PROVIDER=openai # 可选: openai, deepseek, qwen AI_EMBED_MODEL=text-embedding-3-small AI_EMBED_API_KEY= # 留空则使用 AI_API_KEY AI_EMBED_API_BASE= # 留空则使用 AI_API_BASE # 向量数据库配置 AI_USE_VECTOR_DB=true # 是否使用Chroma向量数据库(推荐),false则使用JSON存储 ``` **为什么需要嵌入模型?** 嵌入模型用于将文本转换为向量,实现RAG(检索增强生成)功能: - 长期记忆的向量检索 - 相似对话的智能查找 - 上下文相关性匹配 **向量数据库配置**: 系统支持两种存储方式: 1. **Chroma向量数据库**(推荐):专业的向量存储,支持高效检索和持久化 2. **JSON文件存储**:简单的文件存储,适合测试和小规模使用 ```env AI_USE_VECTOR_DB=true # 使用Chroma(推荐) # AI_USE_VECTOR_DB=false # 使用JSON存储 ``` **数据迁移**: 如果你之前使用JSON存储,现在想切换到Chroma,可以使用迁移工具: ```bash # 预览迁移(不实际执行) python -m src.ai.migrate_data --dry-run # 执行迁移 python -m src.ai.migrate_data ``` **嵌入模型配置说明**: 1. **使用OpenAI嵌入模型**(推荐): ```env AI_EMBED_PROVIDER=openai AI_EMBED_MODEL=text-embedding-3-small # 或 text-embedding-3-large AI_EMBED_API_KEY= # 留空使用主模型的key ``` 2. **使用DeepSeek嵌入模型**: ```env AI_EMBED_PROVIDER=deepseek AI_EMBED_MODEL=deepseek-chat # DeepSeek使用同一个模型 AI_EMBED_API_KEY= # 留空使用主模型的key ``` 3. **不配置嵌入模型**: - 如果不配置,系统会尝试使用主模型的嵌入功能 - 如果主模型不支持(如Claude),RAG功能将降级为基于重要性的检索 ## 🔧 配置示例 ### 示例1: 使用OpenAI(推荐) ```env # 主模型 AI_PROVIDER=openai AI_MODEL=gpt-4 AI_API_KEY=sk-xxx # 嵌入模型(使用OpenAI的嵌入模型) AI_EMBED_PROVIDER=openai AI_EMBED_MODEL=text-embedding-3-small AI_EMBED_API_KEY= # 留空,使用主模型的key ``` ### 示例2: 使用Claude + OpenAI嵌入 ```env # 主模型(Claude) AI_PROVIDER=anthropic AI_MODEL=claude-3-5-sonnet-20241022 AI_API_KEY=sk-ant-xxx # 嵌入模型(OpenAI,因为Claude不提供嵌入) AI_EMBED_PROVIDER=openai AI_EMBED_MODEL=text-embedding-3-small AI_EMBED_API_KEY=sk-xxx # 需要单独的OpenAI key ``` ### 示例3: 使用DeepSeek ```env # 主模型 AI_PROVIDER=deepseek AI_MODEL=deepseek-chat AI_API_KEY=sk-xxx AI_API_BASE=https://api.deepseek.com/v1 # 嵌入模型(使用同一个DeepSeek模型) AI_EMBED_PROVIDER=deepseek AI_EMBED_MODEL=deepseek-chat AI_EMBED_API_KEY= # 留空,使用主模型的key AI_EMBED_API_BASE= # 留空,使用主模型的base ``` ### 示例4: 不使用RAG(最简配置) ```env # 只配置主模型,不配置嵌入模型 AI_PROVIDER=openai AI_MODEL=gpt-4 AI_API_KEY=sk-xxx # 不配置嵌入模型 # AI_EMBED_PROVIDER= # AI_EMBED_MODEL= ``` 这种情况下,记忆系统会降级为基于重要性的检索,不使用向量相似度。 ## 📊 嵌入模型对比 | 模型 | 提供商 | 维度 | 性能 | 成本 | |------|--------|------|------|------| | text-embedding-3-small | OpenAI | 1536 | 快 | 低 | | text-embedding-3-large | OpenAI | 3072 | 慢 | 高 | | deepseek-chat | DeepSeek | - | 中 | 低 | **推荐**: - 一般使用:`text-embedding-3-small` - 高精度需求:`text-embedding-3-large` - 成本敏感:使用主模型的嵌入功能或不使用RAG ## ⚙️ 高级配置 ### 自定义API地址 ```env # 使用代理或自建服务 AI_API_BASE=https://your-proxy.com/v1 AI_EMBED_API_BASE=https://your-proxy.com/v1 ``` ### 使用不同的API密钥 ```env # 主模型使用一个key AI_API_KEY=sk-main-xxx # 嵌入模型使用另一个key AI_EMBED_API_KEY=sk-embed-xxx ``` ## 🔍 验证配置 启动机器人后,查看日志: ``` ✅ AI配置: openai/gpt-4 ✅ 嵌入模型初始化: openai/text-embedding-3-small ✅ AI客户端初始化完成: openai/gpt-4 ``` 如果看到这些日志,说明配置成功! ## ❓ 常见问题 **Q: 必须配置嵌入模型吗?** A: 不是必须的。如果不配置,RAG功能会降级,但基本功能仍可用。 **Q: Claude不支持嵌入怎么办?** A: 配置OpenAI的嵌入模型作为补充,或者不使用RAG功能。 **Q: 嵌入模型可以和主模型不同吗?** A: 可以!推荐使用OpenAI的嵌入模型,即使主模型是其他提供商。 **Q: 如何降低成本?** A: 使用 `text-embedding-3-small` 或不配置嵌入模型。 ## 📚 相关文档 - [快速开始](AI_QUICKSTART.md) - [完整文档](../src/ai/docs/README.md) - [实现总结](AI_IMPLEMENTATION.md)