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

This commit is contained in:
2026-08-20 13:12:50 +00:00
commit b119135836
10275 changed files with 3284984 additions and 0 deletions
+112
View File
@@ -0,0 +1,112 @@
from pathlib import Path
from xml.etree import ElementTree
ROOT = Path(__file__).resolve().parents[1]
CHAPTER_1_LOCALE_ANCHORS = {
"es": {
2: ("Posentrenamiento", "externalizado"),
3: ("Prompt del sistema", "Sin historial"),
},
"ja": {
2: ("ポストトレーニング", "外部化学習"),
3: ("システム", "操作の繰り返し"),
},
"tr": {
2: ("Eğitim sonrası", "Dışsallaştırılmış öğrenme"),
3: ("Sistem istemi", "Tekrarlanan işlemler"),
},
}
CHAPTER_3_LOCALE_ANCHORS = {
"ar": {
10: ("ملخص عالمي", "الوثيقة الأصلية"),
12: ("غير وكيلي", "ReAct"),
},
"es": {
10: ("Resumen general", "Documento original"),
12: ("no agéntico", "ReAct"),
},
"hu": {
10: ("globális összegzés", "Eredeti dokumentum"),
12: ("Nem ágenses RAG", "ReAct"),
},
"id": {
10: ("Ringkasan global", "Dokumen asli"),
12: ("RAG non-agentik", "ReAct"),
},
"ja": {
10: ("全体要約", "元の文書"),
12: ("非エージェント", "ReAct"),
},
"ru": {
10: ("Глобальное резюме", "Исходный документ"),
12: ("Неагентный RAG", "ReAct"),
},
"ta": {
10: ("Global summary", "Original document"),
12: ("ஏஜெண்டிக் RAG", "ReAct"),
},
"tr": {
10: ("Genel özet", "Orijinal belge"),
12: ("Agentic olmayan RAG", "ReAct"),
},
}
def svg_text(locale: str, chapter: int, figure: int) -> str:
path = ROOT / f"book-{locale}" / "images" / f"fig{chapter}-{figure}.svg"
root = ElementTree.parse(path).getroot()
return "\n".join(text.strip() for text in root.itertext() if text.strip())
def assert_anchors(locale: str, chapter: int, figure: int, anchors: tuple[str, ...]) -> None:
text = " ".join(svg_text(locale, chapter, figure).split()).casefold()
for anchor in anchors:
assert (
anchor.casefold() in text
), f"{locale} Figure {chapter}-{figure} is missing {anchor!r}"
def test_chapter_1_localized_figures_match_their_captions():
for locale, localized_anchors in CHAPTER_1_LOCALE_ANCHORS.items():
for figure, anchors in localized_anchors.items():
assert_anchors(locale, 1, figure, anchors)
assert_anchors(locale, 1, 4, ("convert_currency", "assistant.reasoning"))
assert_anchors(locale, 1, 5, ("$web_search", "code_interpreter"))
assert_anchors("es", 1, 6, ("while not done:", "SWE-bench"))
def test_chapter_3_localized_figures_match_their_captions():
common_anchors = {
5: ("BM25", ""),
6: ("Word2Vec", "2013"),
7: ("O(",),
9: ("0.87", "8.4"),
13: ("knowledge_base_search", "code_interpreter"),
14: ("ACME", "Anthropic"),
}
for locale, localized_anchors in CHAPTER_3_LOCALE_ANCHORS.items():
for figure, anchors in common_anchors.items():
assert_anchors(locale, 3, figure, anchors)
for figure, anchors in localized_anchors.items():
assert_anchors(locale, 3, figure, anchors)
for locale in CHAPTER_3_LOCALE_ANCHORS:
assert_anchors(locale, 3, 11, ("-A", "-B"))
assert_anchors("es", 3, 8, ("Score(Q,D)", "IDF"))
def test_chapter_4_localized_figures_match_their_captions():
expected_anchors = {
1: ("server/discover", "tools/list"),
2: ("discover_tools", "list_contributors"),
3: ("NVDA", "50K"),
}
for locale in ("es", "tr"):
for figure, anchors in expected_anchors.items():
assert_anchors(locale, 4, figure, anchors)