196 lines
4.5 KiB
Markdown
196 lines
4.5 KiB
Markdown
# 简化版 Supabase 自动翻译服务
|
||
|
||
这是一个简化版的自动翻译脚本,专门用于翻译 `ak_contents` 表的内容,使用 Supabase 和 RageFlow 接口。
|
||
|
||
## 功能特点
|
||
|
||
- ✅ 直接连接 Supabase 数据库
|
||
- ✅ 使用 RageFlow API 调用大模型翻译
|
||
- ✅ 支持批量翻译多种语言
|
||
- ✅ 自动保存翻译结果到 `ak_content_translations` 表
|
||
- ✅ 简单的质量评估
|
||
- ✅ 避重复翻译
|
||
- ✅ 错误处理和日志记录
|
||
|
||
## 快速开始
|
||
|
||
### 1. 安装依赖
|
||
|
||
```bash
|
||
pip install aiohttp asyncio
|
||
```
|
||
|
||
### 2. 配置参数
|
||
|
||
复制 `.env.example` 为 `.env` 并填入您的配置:
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
```
|
||
|
||
编辑 `.env` 文件:
|
||
```env
|
||
SUPABASE_URL=https://your-project.supabase.co
|
||
SUPABASE_KEY=your-supabase-anon-key
|
||
RAGEFLOW_API_KEY=your-rageflow-api-key
|
||
```
|
||
|
||
### 3. 使用脚本
|
||
|
||
#### 方法1:直接修改脚本配置
|
||
编辑 `simple_translation_service.py` 中的配置:
|
||
|
||
```python
|
||
config = TranslationConfig(
|
||
supabase_url="YOUR_SUPABASE_URL",
|
||
supabase_key="YOUR_SUPABASE_KEY",
|
||
rageflow_api_key="YOUR_RAGEFLOW_KEY"
|
||
)
|
||
```
|
||
|
||
然后运行:
|
||
```bash
|
||
python simple_translation_service.py
|
||
```
|
||
|
||
#### 方法2:作为模块使用
|
||
```python
|
||
import asyncio
|
||
from simple_translation_service import SimpleTranslationService, TranslationConfig
|
||
|
||
async def translate_contents():
|
||
config = TranslationConfig(
|
||
supabase_url="YOUR_SUPABASE_URL",
|
||
supabase_key="YOUR_SUPABASE_KEY",
|
||
rageflow_api_key="YOUR_RAGEFLOW_KEY"
|
||
)
|
||
|
||
async with SimpleTranslationService(config) as service:
|
||
# 翻译为英文和日文,限制5条记录
|
||
results = await service.batch_translate(
|
||
target_languages=["en", "ja"],
|
||
limit=5
|
||
)
|
||
print(f"翻译完成: {results['summary']}")
|
||
|
||
# 运行
|
||
asyncio.run(translate_contents())
|
||
```
|
||
|
||
## 数据库要求
|
||
|
||
确保您的 Supabase 数据库中存在以下表:
|
||
|
||
### ak_contents 表(源内容)
|
||
```sql
|
||
CREATE TABLE ak_contents (
|
||
id UUID PRIMARY KEY,
|
||
title TEXT,
|
||
content TEXT,
|
||
category_id UUID,
|
||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||
);
|
||
```
|
||
|
||
### ak_content_translations 表(翻译结果)
|
||
```sql
|
||
CREATE TABLE ak_content_translations (
|
||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
content_id UUID REFERENCES ak_contents(id),
|
||
language VARCHAR(10) NOT NULL,
|
||
title TEXT,
|
||
content TEXT,
|
||
quality_score FLOAT DEFAULT 0.0,
|
||
translated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||
translation_source VARCHAR(50) DEFAULT 'manual',
|
||
UNIQUE(content_id, language)
|
||
);
|
||
```
|
||
|
||
## API 使用方法
|
||
|
||
### 获取待翻译内容
|
||
```python
|
||
contents = await service.get_contents_to_translate(limit=10)
|
||
```
|
||
|
||
### 翻译单个内容
|
||
```python
|
||
translation = await service.translate_content_item(content, "en")
|
||
```
|
||
|
||
### 批量翻译
|
||
```python
|
||
results = await service.batch_translate(
|
||
target_languages=["en", "ja", "fr"],
|
||
limit=20
|
||
)
|
||
```
|
||
|
||
## 支持的语言
|
||
|
||
- `en`: English (英文)
|
||
- `ja`: Japanese (日文)
|
||
- `fr`: French (法文)
|
||
- `de`: German (德文)
|
||
- `es`: Spanish (西班牙文)
|
||
|
||
## 输出示例
|
||
|
||
```json
|
||
{
|
||
"total_contents": 5,
|
||
"target_languages": ["en", "ja"],
|
||
"results": {
|
||
"content-uuid-1": {
|
||
"en": {
|
||
"success": true,
|
||
"quality_score": 0.9,
|
||
"title_preview": "Translated title preview..."
|
||
},
|
||
"ja": {
|
||
"success": true,
|
||
"quality_score": 0.85,
|
||
"title_preview": "翻訳されたタイトルのプレビュー..."
|
||
}
|
||
}
|
||
},
|
||
"summary": {
|
||
"successful": 8,
|
||
"failed": 2,
|
||
"skipped": 0
|
||
}
|
||
}
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. **API 限制**: 脚本会在每次翻译请求之间添加1秒延迟,避免触发API限制
|
||
2. **避免重复**: 自动检查是否已存在翻译,避免重复翻译
|
||
3. **错误处理**: 包含完整的错误处理和日志记录
|
||
4. **质量评估**: 提供基于长度比例的简单质量评分
|
||
|
||
## 扩展功能
|
||
|
||
如果需要更多功能,可以考虑:
|
||
- 添加更多翻译提供商(OpenAI、Google Translate等)
|
||
- 实现更复杂的质量评估算法
|
||
- 添加人工审核工作流
|
||
- 支持增量翻译(定时任务)
|
||
- 添加翻译缓存机制
|
||
|
||
## 故障排除
|
||
|
||
### 常见错误
|
||
|
||
1. **连接错误**: 检查 Supabase URL 和 API Key 是否正确
|
||
2. **权限错误**: 确保 Supabase API Key 有读写权限
|
||
3. **翻译失败**: 检查 RageFlow API Key 和网络连接
|
||
4. **数据库错误**: 确保表结构正确且存在
|
||
|
||
### 调试模式
|
||
将日志级别设置为 DEBUG:
|
||
```python
|
||
logging.basicConfig(level=logging.DEBUG)
|
||
```
|