Files
liqiang b119135836
Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s
ai-agent-book 精选快照(<2MB 代码与文档,来自 github.com/bojieli/ai-agent-book)
2026-08-20 13:12:50 +00:00

140 lines
5.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
术语一致性检查工具。
思路:对每个受关注的英文术语,预先列出它在中文里“几种常见但不同”的译法。
扫描全书各章译文,统计每个术语实际出现了几种不同译法:
- 只出现 1 种 → 全书一致;
- 出现 >= 2 种 → 术语漂移(不一致)。
这不是给模型评分,而是用确定性的字符串匹配,客观度量“同一术语是否全书统一”。
"""
# 每个术语:canonical 为推荐/术语表规定译法;variants 为若干“互不相同”的常见译法。
# 注意:variants 之间尽量不互为子串,避免重复计数(如“嵌入向量”归入“嵌入”一族)。
TRACKED_TERMS = [
{"en": "token", "canonical": "词元", "variants": ["词元", "令牌", "标记", "token"]},
{"en": "embedding", "canonical": "嵌入", "variants": ["嵌入", "词向量", "向量表示"]},
{"en": "prompt", "canonical": "提示词", "variants": ["提示词", "提示语", "提示"]},
{"en": "inference", "canonical": "推理", "variants": ["推理", "推断"]},
{"en": "latency", "canonical": "时延", "variants": ["延迟", "时延", "延时"]},
{"en": "attention", "canonical": "注意力", "variants": ["注意力", "关注度"]},
{"en": "transformer", "canonical": "Transformer", "variants": ["Transformer", "变换器", "转换器"]},
{"en": "throughput", "canonical": "吞吐量", "variants": ["吞吐量", "吞吐率", "通量"]},
{"en": "fine-tuning", "canonical": "微调", "variants": ["微调", "精调"]},
]
import re
def _strip_code(text):
"""去掉围栏代码块与行内代码:代码按翻译指南原样保留英文,不应计入术语一致性统计。"""
text = re.sub(r"```.*?```", " ", text, flags=re.DOTALL)
text = re.sub(r"`[^`]*`", " ", text)
return text
# 编辑部“指定术语”(house style):为几个术语规定一个明确的、区别于模型默认译法的译名。
# 这些译法都是合法且更精确的选择,用来考察“共享术语表能否把指定译法贯彻到全书”。
# mandated:术语表规定的译法;default:模型自由翻译时常用的默认译法。
MANDATED_TERMS = [
{"en": "token", "mandated": "词元", "default": "标记"},
{"en": "prompt", "mandated": "提示词", "default": "提示"},
{"en": "latency", "mandated": "时延", "default": "延迟"},
{"en": "embedding", "mandated": "嵌入向量", "default": "嵌入"},
]
def check_adherence(translations):
"""
术语表遵从率:对每个“指定术语”,统计在出现该概念的章节里,
有多少章使用了术语表规定的译法(而非默认译法)。
这是管理者模式的核心价值:共享术语表能把指定译法贯彻到每一章;
单 Agent 看不到术语表,只能用自己的默认译法。
"""
rows = []
hit_total = 0
concept_total = 0
for t in MANDATED_TERMS:
m, d = t["mandated"], t["default"]
chapters_with_concept = 0
chapters_adhered = 0
for name, raw in translations.items():
text = _strip_code(raw)
has_m = m in text
# default 若是 mandated 的子串(如“嵌入”是“嵌入向量”子串),需去掉 mandated 再判断
has_d = (d in text.replace(m, "")) if d in m else (d in text)
if has_m or has_d:
chapters_with_concept += 1
if has_m:
chapters_adhered += 1
if chapters_with_concept:
concept_total += chapters_with_concept
hit_total += chapters_adhered
rows.append({
"en": t["en"], "mandated": m, "default": d,
"adhered": chapters_adhered, "total": chapters_with_concept,
})
rate = hit_total / concept_total if concept_total else 1.0
return {"rows": rows, "rate": rate}
def _variant_in_chapter(text, variant, other_variants):
"""
判断某个 variant 是否在 text 中“独立”出现。
对“提示”这种会成为“提示词/提示语”子串的情况:仅当去掉更长 variant 后仍出现才算。
"""
longer = [v for v in other_variants if variant in v and v != variant]
if not longer:
return variant in text
tmp = text
for v in longer:
tmp = tmp.replace(v, "")
return variant in tmp
def analyze(translations):
"""
translations{chapter_name: 译文文本}
返回:
results:每个术语的分析(用到哪些译法、是否一致、各章用法)
consistent_terms / total_terms / rate
"""
results = []
consistent = 0
total = 0
for term in TRACKED_TERMS:
variants = term["variants"]
used = {} # variant -> [出现该译法的章节]
for name, raw in translations.items():
text = _strip_code(raw)
for v in variants:
others = [x for x in variants if x != v]
if _variant_in_chapter(text, v, others):
used.setdefault(v, []).append(name)
if not used:
# 全书都没出现该术语,跳过统计
continue
total += 1
distinct = list(used.keys())
is_consistent = len(distinct) == 1
if is_consistent:
consistent += 1
results.append(
{
"en": term["en"],
"canonical": term["canonical"],
"distinct_used": distinct,
"consistent": is_consistent,
"by_variant": used,
}
)
rate = consistent / total if total else 1.0
return {
"results": results,
"consistent_terms": consistent,
"total_terms": total,
"rate": rate,
}