Initial commit of akmon project
This commit is contained in:
195
trans_LLM/SIMPLE_TRANSLATION_README.md
Normal file
195
trans_LLM/SIMPLE_TRANSLATION_README.md
Normal file
@@ -0,0 +1,195 @@
|
||||
# 简化版 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)
|
||||
```
|
||||
Reference in New Issue
Block a user