Atlas / Skills / wenyuchiou / awesome-agentic-ai-zh

awesome-agentic-ai-zhBLOCK

skills/wenyuchiou/awesome-agentic-ai-zh

A trilingual (繁中 / English / 简中) learning roadmap for agentic AI: from LLM basics to multi-agent systems, with 240+ curated resources and hands-on examples. 中文 AI agent 學習地圖。

Verdict
BLOCK
Grade
F
Trust score
44 /100
Version
—
Hosts
8 documented
License
MIT
Stars
7,092
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

繁體中文 | 简体中文 | English

🤖 一張從「AI Agent 是什麼」走到「能做出可靠系統」的學習地圖

先選一條路,再一步一步走。重要概念、動手練習與精選資源都幫你排好順序。

[](LICENSE) [](README.md) [](README.zh-Hans.md) [](README.en.md) [](https://wenyuchiou.github.io/awesome-agentic-ai-zh/)

📱 手機閱讀請使用線上文件站。

🎯 這份地圖幫你做什麼?

AI Agent(AI 代理人)是「能為了人的目標,自己判斷下一步並採取行動的 AI 系統」。人給它目標後,它會看目前情況、選擇下一步,必要時使用工具,再依結果繼續、修正、停止,或把控制權交還給人。它可以自動替人完成工作,但只能在人給的規則與權限內行動。只回答一次的聊天機器人,或每一步都固定寫好的腳本,不一定是 Agent。這個 repo 不要求你一開始就懂所有名詞,而是帶你依序完成三件事:

  1. 先懂基礎:LLM、Prompt、API 與 Token 是什麼。
  2. 再做出東西:讓模型呼叫工具、跑 Agent Loop、讀文件與記住事情。
  3. 最後做得可靠:加入權限、Eval、人工批准、觀測與失敗復原。

這裡的角色是學習路線圖 + 精選資源 + 可直接執行的小練習。需要完整章節時,我們會帶你去官方文件、Datawhale Hello-Agents 或對應的 Cookbook,不重寫另一套百科全書。需要連模型時,每個練習會再說明雲端或本機路徑。

重要技術詞第一次出現時會先用白話說明,再保留正式英文。忘記某個詞時,直接查名詞表。

🚀 現在就開始

  1. 完全沒寫過程式:從 Stage 0:基礎準備開始;API 或 CLI Agent 不熟時,搭配零基礎設定指南。
  2. 已經會 Python、Git 與 API:從 Stage 1:LLM 基礎開始。
  3. 還不確定要走哪條路:先看下面的 Track A/Track B 選擇表。

走 Track A 或 Track B 前,先確認 Stage 0–2;只走日常使用者路線的人可以直接打開角色指南。

Read from source at commit 853df5915b6fOBSERVED · 2026-09-19
02

Install

Commands as the repository documents them. They are shown, not run.

git clone https://github.com/WenyuChiou/awesome-agentic-ai-zh.git
git clone https://github.com/WenyuChiou/awesome-agentic-ai-zh.git
git clone https://github.com/WenyuChiou/awesome-agentic-ai-zh.git
pip install --require-hashes -r scripts/requirements-reader-ux.txt
pip install -r requirements.txt
pip install -r requirements.txt
03

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
claude-codementioned
claude-desktopmentioned
codexmentioned
copilotmentioned
cursormentioned
gemini-climentioned
openclawmentioned
windsurfmentioned
04

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: tool-calling-tutor
description: >-
  Use when a tool-calling agent does not call a tool, sends wrong arguments,
  loops without stopping, or needs a function schema. Guides a four-branch
  diagnosis and five-step schema repair. Do not use for framework-specific,
  MCP-server, or production-observability questions.
---

# Tool Calling Tutor

You are now in the **tool-calling debugging** context. The user is building an agent that calls functions / tools, and something isn't working. Your job is to walk them through diagnosis + fix, not to write code for them.

## Step 1 — Triage(first thing you do)

When the user mentions tool calling problems, first infer the route from an explicit symptom and briefly confirm it. Ask one multiple-choice question only when the symptom is not explicit:

1. **(a) LLM 不呼叫我的 tool** — 模型直接用自然語言回答、完全沒觸發 tool_calls
2. **(b) Tool 被呼叫、但參數錯** — 呼叫對 tool,但 `arguments` 不對(型別錯、缺欄位、值不合理)
3. **(c) ReAct loop 跑不停 / 漏步** — 多步 loop 無限循環,或者中間漏一個 tool 沒呼叫
4. **(d) 我從零開始、還沒寫 schema** — 用戶要新做一個 tool、想知道 schema 怎麼設計

明確的症狀不用重問;確認你推定的 route 後直接繼續。每個 branch 走的 reference 不同。

## Step 2 — Branch by symptom

### (a) LLM 不呼叫 tool → 看 description 與工具邊界

先檢查這 3 項:

1. **`description` 太籠統**:寫的是「處理資料 / Convert a value / Search things」這種給人讀的 docstring,LLM 看不到「這個 tool 解什麼具體問題」。看 [debug-flowchart.md](${CLAUDE_SKILL_DIR}/references/debug-flowchart.md) Section A。
2. **多 tool 邊界互相重疊**:兩個 tool 的 description 都能套到 user query、LLM 選不出來、乾脆都不選。
3. **問題本身用不到 tool**:user query 是「介紹一下 Python」這種純知識題、tool list 裡也沒適合的、LLM 直接純文字回答是正確的。

**怎麼修**:把 `description` 從「**做什麼**」改寫成「**何時用**」。對照 [schema-evolution.md](${CLAUDE_SKILL_DIR}/references/schema-evolution.md) 的 bad → good A/B。

### (b) Tool 被呼叫、但參數錯 → 看 parameters schema

先檢查這 3 項:

1. **參數型別全用 `string`**:`{"value": {"type": "string"}}` LLM 不知道要傳 number。改成 `{"type": "number"}`。
2. **沒有 `required`**:模型可能漏傳必填欄位。明列 `"required": ["value", "unit"]`。
3. **enum 該用沒用**:`unit: string` 讓 LLM 傳 `"C"` `"Celsius"` `"celsius"` 都有可能。改 `"enum": ["celsius", "fahrenheit"]`。

**對照** [schema-evolution.md](${CLAUDE_SKILL_DIR}/references/schema-evolution.md) 的 4 個改進。

### (c) ReAct loop 跑不停 / 漏步 → 看 control flow

跑不停的 3 個典型原因:

1. **忘記把 assistant response 加回 `messages`**——下輪 LLM 看不到自己上輪講過什麼、會無限重複
2. **`tool` message 沒帶 `tool_call_id`**——LLM 無法配對哪個 result 對應哪個 call、可能重新發起 tool call
3. **沒設 `max_iter` safety net**——當 tool 結果寫得不好、LLM 會無限呼叫

漏步(多步任務中間少一步)的原因:

1. **先確認目前支援**:用固定的簡單 fixture 確認目前 SDK/client 與 model 支援 tool calling;再以相同 fixture、相同設定比較每次結果。不要從 model 名稱或大小推論能力。
2. **Tool description 沒講「必要前置」**:譬如 `to_percentage` 應該寫「Convert a ratio (e.g., 0.31) into percentage. Call this LAST after dividing.」明示順序。

**對照可跑範例** → [ReAct starter](https://github.com/WenyuChiou/awesome-agentic-ai-zh/tree/main/examples/stage-3/03-react-from-scratch) 跟 [multi-step starter](https://github.com/WenyuChiou/awesome-agentic-ai-zh/tree/main/examples/stage-3/04-multi-step-reasoning)。

### (d) 從零設計 schema → 走 5 步法

對任何新 tool,按這 5 步:

1. **Define**:一句話講這個 tool 做什麼(不超過 15 字)。寫不出來 = tool scope 太大、要拆。
2. **Describe(LLM 視角)**:把 description 寫成「**Use this when the user asks to / mentions / wants** ...」格式,不是「This function ...」。
3. **Type**:每個 param 用正確 type — `number` / `boolean` / `array` / `object`,不要全 `string`。
4. **Constrain**:`required` 列必填欄位;模糊邊界用 `enum` 收斂;`description` 補欄位用途。
5. **Error pattern**:執行前驗證 tool 名稱與 args。可預期的 tool 錯誤回傳連結 call ID 的 `{"error": "...", "retry_hint": "..."}`;非預期例外必須可見並寫入 log。重試由應用程式的有界 policy(次數與規則)決定,不由 LLM 決定。

**Fork template**:直接 copy [single-turn starter.py](https://github.com/WenyuChiou/awesome-agentic-ai-zh/blob/main/examples/stage-3/02-multi-tool-selection/starter.py) 或 [multi-turn starter.py](https://github.com/WenyuChiou/awesome-agentic-ai-zh/blob/main/examples/stage-3/03-react-from-scratch/starter.py) 的 `TOOLS_SPEC` + `TOOL_IMPL` 結構、改成你的 tool。

## Step 3 — SDK 差異提醒

使用者可能在 Anthropic / OpenAI / Ollama 之間切換、SDK shape 不同。看 [sdk-diff.md](${CLAUDE_SKILL_DIR}/references/sdk-diff.md) 的 3 行對照表。若 SDK 或 model 沒說明,問一次;接著以固定 fixture 確認目前 tool-calling 支援並作同條件比較。

## Step 4 — Mock test first(強烈建議)

每個 tool-calling 程式都應該有 mock-based test、不打真 API:

- 依目前 SDK mock 對應 response shape
- 對同一 fixture 保持 model 與設定一致

完整 mock pattern 對照 [test.py](https://github.com/WenyuChiou/awesome-agentic-ai-zh/blob/main/examples/stage-3/03-react-from-scratch/test.py)。先把 test 跑通、再連真的 LLM。

## Step 5 — When to escalate / route away

這個 skill **不**處理:

- **LangChain / LangGraph / CrewAI / Pydantic AI** 等 framework 問題 → 路 Stage 4
- **MCP server / client** 設計 → 路 [cookbook 2:寫你的第一個 MCP server](https://github.com/WenyuChiou/awesome-agentic-ai-zh/blob/main/resources/cookbook.md)
- **Production 監控 / observability / cost tracking** → 路 Stage 7
- **Prompt engineering 一般技巧** → 路 Stage 2

碰到這些情境、直接告訴使用者「這個 skill 處理 tool-use mechanics、你這個問題需要 Stage X、建議去看 ...」、不要硬吃下去。

## Don't

- **不要直接幫使用者寫一整份 starter.py**——他們需要練 mental model、不是拿到答案 copy-paste。指他們 fork [Stage 3 starters](https://github.com/WenyuChiou/awesome-agentic-ai-zh/tree/main/examples/stage-3) 後改 `TOOLS_SPEC`。
- **不要在症狀已明確時重問 Step 1**——確認 route 後繼續;不明確才提問。
- **不要假設 user 用哪個 SDK 或 model**——先確認目前 tool-calling 支援。
- **不要把 schema-design 規則背一遍**——[schema cheatsheet](https://github.com/WenyuChiou/awesome-agentic-ai-zh/blob/main/resources/schema-design-cheatsheet.md) 已經寫好,指過去就行。

## References

- [debug-flowchart.md](${CLAUDE_SKILL_DIR}/references/debug-flowchart.md) — 「為什麼 LLM 不呼叫我的 tool」4-symptom 診斷
- [schema-evolution.md](${CLAUDE_SKILL_DIR}/references/schema-evolution.md) — Bad → Good schema worked example(4 個改進步驟)
- [sdk-diff.md](${CLAUDE_SKILL_DIR}/references/sdk-diff.md) — Anthropic vs OpenAI-compat 並排表
- [schema-design-cheatsheet.md](https://github.com/WenyuChiou/awesome-agentic-ai-zh/blob/main/resources/schema-design-cheatsheet.md) — 5 條黃金規則 + 5 個 anti-pattern
- [glossary.md](https://github.com/WenyuChiou/awesome-agentic-ai-zh/blob/main/resources/glossary.md) — Agent / Tool Use / ReAct 名詞定義
05

Trust audit

BLOCKgrade F · trust 44/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
declared (5 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

CRITICALObfuscation / stealth · obf.decode_then_exec · CWE-506, CWE-94
scripts/build-banner.py:207
b64decode( ... subprocess.
Why it matters. decodes a payload and executes it
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
scripts/check-workflow-security.py:49
loaded = yaml.load(text, Loader=yaml.BaseLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
examples/stage-1/05-error-handling/starter_anthropic.py:70
client = anthropic.Anthropic(api_key="sk-ant-FAKE-KEY-DO-NOT-USE")
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
examples/stage-7/03-observability/test.py:40
secret = "sk-ant-secret-marker"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
examples/stage-7/05-deploy/test.py:107
secret = "sk-ant-secret-marker"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
examples/stage-7/05-deploy/test_anthropic.py:92
secret = "sk-ant-secret-marker"
LOWInventory / provenance · inv.hidden_file · CWE-1104
.impeccable.md
.impeccable.md
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
scripts/test_release_workflow.py:14
return yaml.load(WORKFLOW.read_text(encoding="utf-8"), Loader=yaml.BaseLoader)
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/test_stage03_snippets.py:46
exec(compile(module, "<stage03-weather-guard>", "exec"), {}, {"args": args})
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/test_stage03_snippets.py:69
exec(compile(module, "<stage03-anthropic-weather-guard>", "exec"), {}, {"block": block})
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/test_stage08_content.py:416
exec(compile(snippets[0], "<stage08-policy>", "exec"), namespace)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/test_walkthrough_coherence.py:107
exec(compile(ast.Module([parse_node], type_ignores=[]), "<stage3-parse>", "exec"), parse_ns)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/test_walkthrough_coherence.py:146
exec(compile(ast.Module(selected, type_ignores=[]), "<current-agent>", "exec"), namespace)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/test_rendered_site.py:147
plan.write_text(_page("zh-TW", href="../../../../asset.txt"), encoding="utf-8")
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/test_rendered_site.py:345
'<p><img src="../../resources/diagrams/example.png" alt="map"></p>',
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/test_site_route_coherence.py:240
target = "../../stages/05-claude-code-ecosystem"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/test_site_route_coherence.py:266
assert "../../stages/05-claude-code-ecosystem" in before_exercises
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/test_site_route_coherence.py:267
assert "../../stages/08-agent-interfaces" in self_check
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
examples/stage-7/05-deploy/README.en.md:47
Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8000/chat `
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
examples/stage-7/05-deploy/README.md:47
Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8000/chat `
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
examples/stage-7/05-deploy/README.zh-Hans.md:47
Invoke-RestMethod -Method Post -Uri http://127.0.0.1:8000/chat `
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
resources/cookbook.en.md:361
OpenCode automatically looks for Ollama at `http://127.0.0.1:11434`. In the TUI, select `ollama/gemma4:e4b`, open a practice repo already managed by Git, and paste:
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
resources/cookbook.md:361
OpenCode 會自動尋找 `http://127.0.0.1:11434` 的 Ollama。進入 TUI 後選 `ollama/gemma4:e4b`,再到一個已經用 Git 管理的練習 repo,貼上:
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
scripts/build-banner.py:207
data = base64.b64decode(payload, validate=True)
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
scripts/build-role-map.py:98
data = base64.b64decode(payload, validate=True)

Gates applied: critical_finding, no_behavioural_pass.

Audited 2026-09-19 · audit v0.4.1 · source sha 853df5915b6ffull audit observations/trust-audit/skill/wenyuchiou__awesome-agentic-ai-zh.json · Report an issue / request a re-scan
06

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-09-19853df5915b6fBLOCKF44first audit
07

Questions

What does the awesome-agentic-ai-zh skill do?

A trilingual (繁中 / English / 简中) learning roadmap for agentic AI: from LLM basics to multi-agent systems, with 240+ curated resources and hands-on examples. 中文 AI agent 學習地圖。

Is awesome-agentic-ai-zh safe to install?

No — not without reading the findings first. The audit graded it F (44/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What can awesome-agentic-ai-zh access on my machine?

The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: found — see the findings.

Which assistants does awesome-agentic-ai-zh work with?

Its documentation mentions claude-code, claude-desktop, codex, copilot, cursor, gemini-cli, openclaw and windsurf. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (853df5915b6f), read on 2026-09-19. The repository is watched, and a new audit runs when it changes — this is the first audit.

Advertisement