Spaces:
Running
Running
File size: 7,558 Bytes
8587b71 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 |
# NarratoAI 大模型服务使用指南
## 📖 概述
NarratoAI 项目已完成大模型服务的全面重构,提供了统一、模块化、可扩展的大模型集成架构。新架构支持多种大模型供应商,具有严格的输出格式验证和完善的错误处理机制。
## 🏗️ 架构概览
### 核心组件
```
app/services/llm/
├── __init__.py # 模块入口
├── base.py # 抽象基类
├── manager.py # 服务管理器
├── unified_service.py # 统一服务接口
├── validators.py # 输出格式验证器
├── exceptions.py # 异常类定义
├── migration_adapter.py # 迁移适配器
├── config_validator.py # 配置验证器
├── test_llm_service.py # 测试脚本
└── providers/ # 提供商实现
├── __init__.py
├── gemini_provider.py
├── gemini_openai_provider.py
├── openai_provider.py
├── qwen_provider.py
├── deepseek_provider.py
└── siliconflow_provider.py
```
### 支持的供应商
#### 视觉模型供应商
- **Gemini** (原生API + OpenAI兼容)
- **QwenVL** (通义千问视觉)
- **Siliconflow** (硅基流动)
#### 文本生成模型供应商
- **OpenAI** (标准OpenAI API)
- **Gemini** (原生API + OpenAI兼容)
- **DeepSeek** (深度求索)
- **Qwen** (通义千问)
- **Siliconflow** (硅基流动)
## ⚙️ 配置说明
### 配置文件格式
在 `config.toml` 中配置大模型服务:
```toml
[app]
# 视觉模型提供商配置
vision_llm_provider = "gemini"
# Gemini 视觉模型
vision_gemini_api_key = "your_gemini_api_key"
vision_gemini_model_name = "gemini-2.0-flash-lite"
vision_gemini_base_url = "https://generativelanguage.googleapis.com/v1beta"
# QwenVL 视觉模型
vision_qwenvl_api_key = "your_qwen_api_key"
vision_qwenvl_model_name = "qwen2.5-vl-32b-instruct"
vision_qwenvl_base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"
# 文本模型提供商配置
text_llm_provider = "openai"
# OpenAI 文本模型
text_openai_api_key = "your_openai_api_key"
text_openai_model_name = "gpt-4o-mini"
text_openai_base_url = "https://api.openai.com/v1"
# DeepSeek 文本模型
text_deepseek_api_key = "your_deepseek_api_key"
text_deepseek_model_name = "deepseek-chat"
text_deepseek_base_url = "https://api.deepseek.com"
```
### 配置验证
使用配置验证器检查配置是否正确:
```python
from app.services.llm.config_validator import LLMConfigValidator
# 验证所有配置
results = LLMConfigValidator.validate_all_configs()
# 打印验证报告
LLMConfigValidator.print_validation_report(results)
# 获取配置建议
suggestions = LLMConfigValidator.get_config_suggestions()
```
## 🚀 使用方法
### 1. 统一服务接口(推荐)
```python
from app.services.llm.unified_service import UnifiedLLMService
# 图片分析
results = await UnifiedLLMService.analyze_images(
images=["path/to/image1.jpg", "path/to/image2.jpg"],
prompt="请描述这些图片的内容",
provider="gemini", # 可选,不指定则使用配置中的默认值
batch_size=10
)
# 文本生成
text = await UnifiedLLMService.generate_text(
prompt="请介绍人工智能的发展历史",
system_prompt="你是一个专业的AI专家",
provider="openai", # 可选
temperature=0.7,
response_format="json" # 可选,支持JSON格式输出
)
# 解说文案生成(带验证)
narration_items = await UnifiedLLMService.generate_narration_script(
prompt="根据视频内容生成解说文案...",
validate_output=True # 自动验证输出格式
)
# 字幕分析
analysis = await UnifiedLLMService.analyze_subtitle(
subtitle_content="字幕内容...",
validate_output=True
)
```
### 2. 直接使用服务管理器
```python
from app.services.llm.manager import LLMServiceManager
# 获取视觉模型提供商
vision_provider = LLMServiceManager.get_vision_provider("gemini")
results = await vision_provider.analyze_images(images, prompt)
# 获取文本模型提供商
text_provider = LLMServiceManager.get_text_provider("openai")
text = await text_provider.generate_text(prompt)
```
### 3. 迁移适配器(向后兼容)
```python
from app.services.llm.migration_adapter import create_vision_analyzer
# 兼容旧的接口
analyzer = create_vision_analyzer("gemini", api_key, model, base_url)
results = await analyzer.analyze_images(images, prompt)
```
## 🔍 输出格式验证
### 解说文案验证
```python
from app.services.llm.validators import OutputValidator
# 验证解说文案格式
try:
narration_items = OutputValidator.validate_narration_script(output)
print(f"验证成功,共 {len(narration_items)} 个片段")
except ValidationError as e:
print(f"验证失败: {e.message}")
```
### JSON输出验证
```python
# 验证JSON格式
try:
data = OutputValidator.validate_json_output(output)
print("JSON格式验证成功")
except ValidationError as e:
print(f"JSON验证失败: {e.message}")
```
## 🧪 测试和调试
### 运行测试脚本
```bash
# 运行完整的LLM服务测试
python app/services/llm/test_llm_service.py
```
测试脚本会验证:
- 配置有效性
- 提供商信息获取
- 文本生成功能
- JSON格式生成
- 字幕分析功能
- 解说文案生成功能
### 调试技巧
1. **启用详细日志**:
```python
from loguru import logger
logger.add("llm_service.log", level="DEBUG")
```
2. **清空提供商缓存**:
```python
UnifiedLLMService.clear_cache()
```
3. **检查提供商信息**:
```python
info = UnifiedLLMService.get_provider_info()
print(info)
```
## ⚠️ 注意事项
### 1. API密钥安全
- 不要在代码中硬编码API密钥
- 使用环境变量或配置文件管理密钥
- 定期轮换API密钥
### 2. 错误处理
- 所有LLM服务调用都应该包装在try-catch中
- 使用适当的异常类型进行错误处理
- 实现重试机制处理临时性错误
### 3. 性能优化
- 合理设置批处理大小
- 使用缓存避免重复调用
- 监控API调用频率和成本
### 4. 模型选择
- 根据任务类型选择合适的模型
- 考虑成本和性能的平衡
- 定期更新到最新的模型版本
## 🔧 扩展新供应商
### 1. 创建提供商类
```python
# app/services/llm/providers/new_provider.py
from ..base import TextModelProvider
class NewTextProvider(TextModelProvider):
@property
def provider_name(self) -> str:
return "new_provider"
@property
def supported_models(self) -> List[str]:
return ["model-1", "model-2"]
async def generate_text(self, prompt: str, **kwargs) -> str:
# 实现具体的API调用逻辑
pass
```
### 2. 注册提供商
```python
# app/services/llm/providers/__init__.py
from .new_provider import NewTextProvider
LLMServiceManager.register_text_provider('new_provider', NewTextProvider)
```
### 3. 添加配置支持
```toml
# config.toml
text_new_provider_api_key = "your_api_key"
text_new_provider_model_name = "model-1"
text_new_provider_base_url = "https://api.newprovider.com/v1"
```
## 📞 技术支持
如果在使用过程中遇到问题:
1. 首先运行测试脚本检查配置
2. 查看日志文件了解详细错误信息
3. 检查API密钥和网络连接
4. 参考本文档的故障排除部分
---
*最后更新: 2025-01-07*
|