Files
akmon/trans_LLM/SIMPLE_TRANSLATION_README.md
2026-01-20 08:04:15 +08:00

4.5 KiB
Raw Blame History

简化版 Supabase 自动翻译服务

这是一个简化版的自动翻译脚本,专门用于翻译 ak_contents 表的内容,使用 Supabase 和 RageFlow 接口。

功能特点

  • 直接连接 Supabase 数据库
  • 使用 RageFlow API 调用大模型翻译
  • 支持批量翻译多种语言
  • 自动保存翻译结果到 ak_content_translations
  • 简单的质量评估
  • 避重复翻译
  • 错误处理和日志记录

快速开始

1. 安装依赖

pip install aiohttp asyncio

2. 配置参数

复制 .env.example.env 并填入您的配置:

cp .env.example .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 中的配置:

config = TranslationConfig(
    supabase_url="YOUR_SUPABASE_URL",
    supabase_key="YOUR_SUPABASE_KEY", 
    rageflow_api_key="YOUR_RAGEFLOW_KEY"
)

然后运行:

python simple_translation_service.py

方法2作为模块使用

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 表(源内容)

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 表(翻译结果)

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 使用方法

获取待翻译内容

contents = await service.get_contents_to_translate(limit=10)

翻译单个内容

translation = await service.translate_content_item(content, "en")

批量翻译

results = await service.batch_translate(
    target_languages=["en", "ja", "fr"],
    limit=20
)

支持的语言

  • en: English (英文)
  • ja: Japanese (日文)
  • fr: French (法文)
  • de: German (德文)
  • es: Spanish (西班牙文)

输出示例

{
  "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

logging.basicConfig(level=logging.DEBUG)