
FastAPI 多语言文档 LLM 翻译质量控制_llm-test.md 测试文件的设计与提示词工程实践【免费下载链接】fastapiFastAPI framework, high performance, easy to learn, fast to code, ready for production项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi本文以 FastAPI 仓库中的 docs/hi/docs/_llm-test.md 为切入点完整讲解该 LLM 翻译测试文件的定位、测试工作流与全部测试项代码片段、引号、代码块、标签页、链接、abbr/dfn、标题、术语表等并结合 scripts/translate.py 与 scripts/general-llm-prompt.md 的源码说明这些测试项如何逐一对应通用提示词中的具体规则以及翻译如何被自动校验与重试。读完后你能理解 FastAPI 官方文档多语言体系是如何用测试文档 提示词来控制 LLM 翻译质量并实现可回归验证的。一、这个测试文件到底在测什么docs/hi/docs/_llm-test.md 的标题就是 “LLM परीक्षण फ़ाइल”印地语LLM 测试文件。它不是面向最终用户的教程页而是一份针对翻译 LLM 的行为测试集验证执行文档翻译的 LLM 是否能正确理解并遵守 scripts/translate.py 中的general_prompt通用提示词以及docs/{语言代码}/llm-prompt.md中的语言专属提示词——两者在运行时会被拼接在一起送入模型。从源码看这一拼接逻辑非常直接scripts/translate.py 在模块加载时读取通用提示词general_prompt_path Path(__file__).absolute().parent / general-llm-prompt.md general_prompt general_prompt_path.read_text(encodingutf-8)随后 scripts/translate.py 中的get_prompt()函数把三部分按序组装成最终 prompt通用提示词general_prompt其中[placeholder_for_additional_instructions]占位符会被替换为附加指令语言专属提示词docs/{语言}/llm-prompt.md的内容若存在旧译文还会加入只在必要时更新、逐行保留原文、最小化 diff等增量更新约束并以%%%...%%%包裹旧译文最后附上目标语言名称和被%%%...%%%包裹的英文原文。_llm-test.md中放置的每一组测试都会原样呈现在提示词设计者prompt designer所选择的语言专属提示词的上下文里因此它是检验通用规则 语言规则组合效果的最小回归测试。二、测试工作流从放置提示词到幂等再翻译原文档给出了标准使用流程结合 scripts/translate.py 的translate_page命令可以完整还原放置语言专属提示词在docs/{语言代码}/llm-prompt.md中维护该语言的翻译约定例如 docs/hi/llm-prompt.md 为 Hindi 语言定义了约 60 条术语取舍规则如 path 不要音译为 पाथ、request / response 保留英文等。翻译本测试文件运行translate.py的translate-page命令对应translate_page()函数支持LANGUAGE与EN_PATH环境变量生成docs/{语言代码}/docs/_llm-test.md。源码中该命令会断言language ! en英文是源语言读取语言提示词把英文原文与旧译文一起送入模型scripts/translate.py。检查译文是否正确逐项核对下文的测试项确认 LLM 遵守了代码片段不译、标题 hash 保留、链接地址不改写等规则。改进提示词若发现错误修改语言专属提示词、通用提示词或英文源文档。手工修正剩余问题使该文件本身成为一份合格译文。再次运行翻译验证幂等性理想结果是 LLM 对已有的良好译文不做任何改动。这意味着通用提示词与该语言提示词已达到当前能力上限偶尔出现随机性改动是正常的因为 LLM 不是确定性算法。值得注意的是源码中的自动重试机制translate_page最多尝试 3 次MAX_ATTEMPTS 3见 scripts/translate.py每次尝试后调用check_translation()定义于 scripts/doc_parsing_utils.py做结构校验若校验抛出ValueError则把错误信息写入additional_instructionsCurrent translation fails validation checks ...追加进 prompt 重新生成并将本次输出作为旧译文参与下一次提示组装。也就是说提示词本身内置了把校验失败信息回灌给模型的纠错闭环。三、测试项逐条解析每条测试对应一条提示词规则_llm-test.md的每个章节都采用测试परीक्षण/ 信息जानकारी标签页对的结构前者是可被翻译的实际样本后者说明该样本考察的规则及其在通用提示词中的对应小节。以下完整继承这些测试样本并补充源码侧的规则原文。3.1 代码片段Code snippets测试样本行内代码यह एक कोड स्निपेट है: foo। और यह एक और कोड स्निपेट है: bar। और एक और: baz quux।考察规则行内代码片段的内容必须原样保留。对应 scripts/general-llm-prompt.md 的### Content of code snippets一节Do not translate the content of code snippets, keep the original in English. For example,list,dict, keep them as is.3.2 引号Quotes测试样本嵌套引号的经典陷阱句कल, मेरे दोस्त ने लिखा: अगर आप गलत को सही लिखते हैं, तो आपने उसे गलत लिखा है। ...考察点这是 LLM 容易翻译错误的句子原文档的 note 明确提示LLM 很可能会错误翻译它并建议观察再次翻译时它能否保持住已修正的译文。提示词设计者可以自行决定是否把普通引号转为排版引号typographic quotes原样保留也可以。例如 docs/de/llm-prompt.md 中的### Quotes小节就给出了德语的具体约定。3.3 代码片段中的引号Quotes in code snippets测试样本代码内的字符串字面量含嵌套引号的困难用例pip install foo[bar] this, that fI like {oranges if orange else apples}考察规则代码片段内部的引号必须原样保留这是 3.1 规则的强化用例——f-string 嵌套引号是最容易破坏代码语义的场景。3.4 代码块Code blocks测试样本覆盖 bash、console、Python 三类围栏代码块# ब्रह्मांड के लिए अभिवादन प्रिंट करें echo Hello universe$ font color#4E9A06fastapi/font run u styletext-decoration-style:solidmain.py/u span stylebackground-color:#009485font color#D3D7CF FastAPI /font/span Starting server Searching for package file structure// Code नाम की डायरेक्टरी बनाएँ $ mkdir code // उस डायरेक्टरी में जाएँ $ cd codewont_work() # यह काम नहीं करेगा works(foobar) # यह काम करता है 考察规则代码块中的代码不得改动唯一例外是该语言代码块内的注释comments。对应 scripts/general-llm-prompt.md 的### Content of code blocks一节其中给出三组完整的源English→ 结果German对照示例bash 块只译注释含 HTML 标签但无注释的 console 块一字不改含 5 条//注释的 console 块则把注释全部译为德语而命令保持原样。该节还规定了 Mermaid 图的同步规则若现有译文的 Mermaid 图与英文源图仅差少数已译词汇应沿用译文版人工译者特意翻译过的词不能被回退成英文。3.5 标签页与彩色提示框Tabs and colored boxes测试样本MkDocs Material 的 admonition 块/// note | टिप्पणी कुछ पाठ /// /// note | तकनीकी विवरण ... /// tip | सुझाव / /// warning | चेतावनी / /// danger | खतरा考察规则这些特殊块与标签页Tab块的标题翻译要追加在竖线|之后。对应通用提示词的两个小节### Special blocksscripts/general-llm-prompt.md保持/// note这一行不变翻译追加在竖线后如/// note | Nota### Tab blocksscripts/general-llm-prompt.md//// tab | {tab title}中竖线前的部分含竖线保持原样翻译标签标题与标签内容结尾的四个斜杠////保持不变。3.6 外部链接与内部链接Web and internal links测试样本考察链接文本要翻译、链接地址不翻译指向页内标题的锚点链接如[...](#code-snippets)内部文件链接如index.md#installation形式的 Markdown 链接指向其他项目文档站的外部链接分别指向 CSScss/styles.css、JSjs/logic.js、图片img/foo.jpg的静态资源链接指向 FastAPI 文档站对应语言版首页的绝对链接——这是唯一链接地址要跟着语言变化的情况。考察规则对应 scripts/general-llm-prompt.md 的### Links一节规则相当细致相对 URL 只译链接文本URL 及其中任何部分都不译非 FastAPI 文档站的绝对 URL 只译文本、URL 不动恰好以 FastAPI 官方文档站域名开头的绝对 URL则要在域名后插入语言代码https://fastapi.tiangolo.com/{语言代码}[原 URL 剩余部分]指向静态资源图片、CSS、JS的 URL 一律不加语言代码内部链接只译文本锚点片段#之后永不翻译且不得随意新增锚点若现有译文的锚点与英文源不一致属于错误须改回英文源的锚点链接语法必须镜像英文源源用 Markdown 式链接译文就用 Markdown 式源用 HTML 式a标签译文也用 HTML 式。3.7 HTML abbr 元素测试样本分两类部分为虚构缩写title 只含完整短语abbr titleGetting Things Done - ...GTD/abbr、abbr titleless than - ...lt/abbr、XWT、PSGI 等title 含完整短语 冒号 补充说明如 MDN含为开发者编写的补充说明、abbr titleInput/Output - ...: ...I/O/abbr。考察规则对应 scripts/general-llm-prompt.md 的### HTML abbr elements一节包含多个转换模式scheme完整短语型abbr title{full phrase}{缩写}/abbr→abbr title{full phrase} - {完整短语译文}{缩写}/abbr若目标语言主要使用 ASCII 字母且译文与原文相同或以相同字母开头则只给译文省去原文短语 冒号 说明型完整短语后追加破折号与短语译文其余说明部分正常翻译特殊保护规则若现有译文中存在英文源里没有的额外 abbr 元素人工译者手动添加用于向该语言读者解释英文词必须保留不得删除——除非整句因英文源删除而一并删除。3.8 HTML dfn 元素测试样本dfn title...集群的定义说明...क्लस्टर/dfn dfn title...深度学习的定义说明...डीप लर्निंग/dfn考察规则对应 scripts/general-llm-prompt.md 的### HTML dfn elements一节翻译dfn内部文本与title属性但 title 中不要保留英文原文与 abbr 的规则不同——abbr 要求保留原文dfn 不要求。3.9 标题Headings测试样本三个带 hash 的三级标题### एक वेबऐप विकसित करें - एक ट्यूटोरियल { #develop-a-webapp-a-tutorial } ### टाइप हिंट्स और -एनोटेशन्स { #type-hints-and-annotations } ### सुपर- और सबक्लासेज़ { #super-and-subclasses }考察规则对标题唯一的硬性要求是——花括号中的 hash 部分必须原样保留这样指向标题的链接才不会断裂。对应 scripts/general-llm-prompt.md 的### Headings一节示例## Alternative API docs { #alternative-api-docs }译为## Documentación de la API alternativa { #alternative-api-docs }。语言侧的补充约定可参考 docs/de/llm-prompt.md 中的### Headings小节。3.10 文档中使用的术语Terms used in the docs测试样本是一份覆盖 FastAPI 文档高频词汇的印地语术语清单原文档明确说明这既不是完整清单也不是标准清单其用途是帮助提示词设计者判断哪些术语需要给 LLM 补充辅助指令——比如当 LLM 把好的译文改回较差译法时或在某词变格/形态变化上出错时。对应通用提示词中的术语约定并可参考 docs/de/llm-prompt.md 的### List of English terms and their preferred German translations小节。原文档收录的术语类别及代表性词条如下完整类别覆盖原文档类别代表性词条印地语第二人称与省略आप / आपकाउदा.例如、आदि等等类型标注fooएकintके रूप में作为 int 的 foo等文档称谓ट्यूटोरियल - उपयोगकर्ता गाइड教程 - 用户指南、उन्नत उपयोगकर्ता गाइड进阶用户指南、SQLModel 文档、API 文档、自动文档领域词数据科学、深度学习、机器学习、依赖注入、HTTP Basic 认证、HTTP Digest、ISO 格式、JSON Schema 标准常用状态词弃用、设计designed、无效、立即、标准、默认、大小写敏感 / 不敏感服务端动词服务一个应用 / 服务一个页面serve应用app、application请求/响应request、response、错误响应路径操作路径操作、路径操作装饰器、路径操作函数各类 bodybody、请求体、响应体、JSON 体、表单体、文件体、函数体各类参数parameter、body/path/query/cookie/header/form/函数参数事件事件、启动事件、服务器启动、关闭事件、lifespan 事件处理器handler、事件处理器、异常处理器、处理handle模型model、Pydantic 模型、数据模型、数据库模型、表单模型、模型对象类体系class、基类、父类、子类、子类child、兄弟类、类方法头header(s)、Authorization 头、转发头forwarded依赖注入体系依赖注入系统、依赖dependency、可依赖项dependable、依赖方dependent并发I/O 密集、CPU 密集、并发性、并行性、多处理环境变量env var、环境变量、PATH、PATH变量安全认证authentication及提供方、授权authorization及其表单/提供方、用户认证与系统认证用户两种语态CLICLI、命令行接口角色server、client云云提供商、云服务阶段开发、开发阶段集合类型dict、字典、枚举enumeration、enum、enum 成员编解码编码器、解码器、编码、解码异常异常、抛出raise语法表达式、语句前后端前端、后端社区GitHub 讨论、GitHub issue性能性能、性能优化返回返回类型、返回值安全方案安全、安全方案security scheme任务task、后台任务、任务函数模板模板、模板引擎类型类型注解、类型提示工作进程服务器 worker、Uvicorn worker、Gunicorn Worker、worker 进程、worker 类、工作负载workload部署部署deployment、部署deploySDKSDK、软件开发工具包标识符/生态词APIRouter、requirements.txt、Bearer Token、破坏性变更breaking change、bug、按钮、可调用对象callable、代码、commit、上下文管理器、协程、数据库会话、磁盘、域domain、引擎、伪 Xfake X、HTTP GET 方法、item、library、lifespan、锁lock、middleware、移动应用、模块、挂载mounting、网络、源origin、override、载荷payload、处理器processor、属性property、代理proxy、Pull Request、查询query、RAM、远程机器、状态码、字符串、标签tag、Web 框架、通配符、返回return、验证validate这份术语表与 docs/hi/llm-prompt.md 中保留英文、禁止音译的强制清单互为补充前者是观察样本让设计者发现 LLM 会在哪些词上出问题后者是执行规则规定这些词最终必须怎么写。四、测试文件在自动化流水线中的位置从源码结构看_llm-test.md之所以被放在每个语言的docs/{语言}/docs/目录下是因为它会像普通文档一样进入翻译与校验流水线从而获得真实的回归测试能力命令集scripts/translate.py 的commands_json列出了translate-page、translate-lang、update-outdated、add-missing、update-and-add、remove-removable六个命令默认执行remove-removable、update-outdated、add-missing。update-outdated一类命令重新翻译已有译文时get_prompt()会走旧译文分支把逐行保留、最小化 diff的增量更新约束注入 prompt——这正是工作流第 6 步再次翻译验证 LLM 是否乱改背后的机制。语言发现get_llm_translatable()scripts/translate.py以存在docs/{lang}/llm-prompt.md作为该语言可被 LLM 翻译的判据因此提示词文件本身就是各语言翻译能力的开关。不翻译范围non_translated_sectionsscripts/translate.py声明了reference/、release-notes.md、translations.md等不参与翻译的区块测试文件的目录docs/{lang}/docs/不在其中故每次全量更新都会覆盖_llm-test.md形成天然回归点。Git 提交验证tests/test_translate.py 用临时 Git 仓库验证commit_translation_changes()只为docs/下的翻译文件生成提交如 Update translations for es (update-outdated)且无关文件改动不会被纳入——保证翻译机器人在仓库中的提交是干净、可审计的。五、可复用的实践经验把提示词测试文档化_llm-test.md的本质是一份提示词验收测试——用真实格式样本而非抽象描述固化每条翻译规则任何提示词改动都可以通过重新翻译该文件 对比 diff来回归验证。幂等性是质量上限指标对已经正确的译文再次翻译应当零改动这一标准比翻译一次是否正确更严格能有效暴露提示词中改得好与不乱改两类能力的短板。规则分层通用规则代码片段不译、hash 保留、链接规则放general_prompt语言相关取舍术语表、引号风格、标题约定放docs/{语言}/llm-prompt.md测试文件放在docs/{语言}/docs/下让两种规则在同一个真实翻译场景中同时受检。校验失败回灌translate_page的三次重试 check_translation()报错信息回灌 prompt 的设计scripts/translate.py说明结构校验 错误反馈是约束 LLM 输出的可靠补充手段值得在其他 LLM 内容生成流水线中借鉴。【免费下载链接】fastapiFastAPI framework, high performance, easy to learn, fast to code, ready for production项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考