ai-agent-book 精选快照(<2MB 代码与文档,来自 github.com/bojieli/ai-agent-book)
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
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
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
"""
|
||||
术语一致性检查工具。
|
||||
|
||||
思路:对每个受关注的英文术语,预先列出它在中文里“几种常见但不同”的译法。
|
||||
扫描全书各章译文,统计每个术语实际出现了几种不同译法:
|
||||
- 只出现 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,
|
||||
}
|
||||
Reference in New Issue
Block a user