用 DeepSeek API 做了个佛经翻译器,分享 Prompt 工程和前端实现思路 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
XR843
V2EX    分享创造

用 DeepSeek API 做了个佛经翻译器,分享 Prompt 工程和前端实现思路

  •  1
     
  •   XR843 4 天前 217 次点击

    最近做了个佛教文献翻译器,纯前端实现,分享下技术细节。

    背景

    翻译佛经时发现通用翻译器对专业术语处理很差,比如「般若」被翻成 wisdom ,丢失了 Prajā 的深层含义。于是自己动手做了一个。

    在线体验: https://xr843.github.io/Buddhist-AI-Translator GitHub: https://github.com/xr843/Buddhist-AI-Translator

    技术栈

    • 纯前端: HTML5 + CSS3 + Javascript ES6+
    • AI: DeepSeek API
    • 语音: Web Speech API
    • 无框架,零依赖

    核心实现

    1. Prompt 工程

    最关键的是让 AI 理解佛学语境,我的 prompt 结构:

    function createTranslationPrompt(text, sourceLang, targetLang) { let prompt = `将${sourceDesc}翻译为${targetDesc}:\n\n${text}\n\n`; if (targetLang === 'zh') { prompt += '要求:准确翻译佛教术语,使用现代中文。'; } else if (targetLang === 'zh-classical') { prompt += '要求:翻译为文言文,保持庄严性。'; } else { prompt += '要求:准确翻译,保持佛教术语的正确性。'; } prompt += '\n\n 直接返回翻译结果,无需引号或解释。'; return prompt; } 关键点: - 明确指定目标语言风格 - 要求直接返回结果,减少后处理 - 针对不同语言给不同指令 ### 2. 术语数据库 内置了 50+ 佛教术语对照表,作为兜底: const buddhistTerms = { '般若波罗蜜多心经': 'The Heart of the Perfection of Wisdom Sutra / ', '观自在菩萨': 'Avalokiteshvara Bodhisattva / ', '涅': 'Nirvana / ', '菩萨': 'Bodhisattva / ', // ... }; 当 API 挂掉时,用术语库做基础翻译。 ### 3. 缓存策略 为了减少 API 调用和提升响应速度: const translatiOnCache= new Map(); const MAX_CACHE_SIZE = 100; function getCacheKey(text, sourceLang, targetLang) { return `${sourceLang}->${targetLang}:${text.trim()}`; } // LRU 清理 function cleanCache() { if (translationCache.size >= MAX_CACHE_SIZE) { const firstKey = translationCache.keys().next().value; translationCache.delete(firstKey); } } 相同文本+语言对直接返回缓存,秒级响应。 ### 4. XSS 防护 AI 返回的内容不可信,必须转义: function escapeHtml(text) { const div = document.createElement('div'); div.textCOntent= text; return div.innerHTML; } // 输出时转义 resultDiv.innerHTML = `<div class="translation-text">${escapeHtml(translationResult)}</div>`; ### 5. API 调用优化 const cOntroller= new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 15000); const respOnse= await fetch(API_CONFIG.baseURL, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${API_CONFIG.apiKey}` }, body: JSON.stringify({ model: 'deepseek-chat', messages: [...], temperature: 0.1, // 低温度保证一致性 max_tokens: 800, stream: false }), signal: controller.signal }); - 15 秒超时,避免长时间等待 - temperature 设 0.1 ,翻译需要稳定输出 - 非流式响应,简化处理逻辑 遇到的坑 1. DeepSeek 返回带引号 - AI 经常把翻译结果用引号包起来,需要后处理去掉 2. 语音合成分段 - 长文本一次性朗读会卡,需要按句子分段 3. 梵文字体 - 部分浏览器不支持 Devanagari ,需要加载 Google Fonts ## 效果 | 指标 | 数据 | |----------|-------------| | 首次翻译 | 1-3 秒 | | 缓存命中 | <100ms | | 代码量 | ~1400 行 JS | | 包大小 | 0 (无依赖) | ## 总结 纯前端 + LLM API 的组合很适合做这类垂直领域工具: - 开发快,部署简单 (GitHub Pages 直接托管) - 用户自带 API Key ,无服务器成本 - Prompt 工程 + 术语库,解决专业领域翻译问题 代码完全开源,欢迎 PR: https://github.com/xr843/Buddhist-AI-Translator --- 有问题欢迎讨论,也欢迎推荐其他需要补充的佛教术语。 ---
    XR843
        1
    XR843  
    OP
       4 天前
    为什么要做这个项目?

    翻译佛经时发现通用翻译器对专业术语处理很不理想,比如:

    - 「般若」→ 被翻成 wisdom ,但它是 Prajā,指超越二元对立的智慧
    - 「空」→ 被翻成 emptiness ,但它是 ūnyatā,指无自性
    - 「涅」→ 有时被翻成 death ,完全错误

    在线体验: https://xr843.github.io/Buddhist-AI-Translator
    GitHub: https://github.com/xr843/Buddhist-AI-Translator

    详细技术实现见 GitHub README 。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4345 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 51ms UTC 01:07 PVG 09:07 LAX 17:07 JFK 20:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86