brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
tool-calling-tutorUse 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.
Independent GitHub snapshot · Automated classification · Original documentation governs
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.
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:
arguments 不對(型別錯、缺欄位、值不合理)明確的症狀不用重問;確認你推定的 route 後直接繼續。每個 branch 走的 reference 不同。
先檢查這 3 項:
description 太籠統:寫的是「處理資料 / Convert a value / Search things」這種給人讀的 docstring,LLM 看不到「這個 tool 解什麼具體問題」。看 debug-flowchart.md Section A。怎麼修:把 description 從「做什麼」改寫成「何時用」。對照 schema-evolution.md 的 bad → good A/B。
先檢查這 3 項:
string:{"value": {"type": "string"}} LLM 不知道要傳 number。改成 {"type": "number"}。required:模型可能漏傳必填欄位。明列 "required": ["value", "unit"]。unit: string 讓 LLM 傳 "C" "Celsius" "celsius" 都有可能。改 "enum": ["celsius", "fahrenheit"]。對照 schema-evolution.md 的 4 個改進。
跑不停的 3 個典型原因:
messages——下輪 LLM 看不到自己上輪講過什麼、會無限重複tool message 沒帶 tool_call_id——LLM 無法配對哪個 result 對應哪個 call、可能重新發起 tool callmax_iter safety net——當 tool 結果寫得不好、LLM 會無限呼叫漏步(多步任務中間少一步)的原因:
to_percentage 應該寫「Convert a ratio (e.g., 0.31) into percentage. Call this LAST after dividing.」明示順序。對照可跑範例 → ReAct starter 跟 multi-step starter。
對任何新 tool,按這 5 步:
number / boolean / array / object,不要全 string。required 列必填欄位;模糊邊界用 enum 收斂;description 補欄位用途。{"error": "...", "retry_hint": "..."};非預期例外必須可見並寫入 log。重試由應用程式的有界 policy(次數與規則)決定,不由 LLM 決定。Fork template:直接 copy single-turn starter.py 或 multi-turn starter.py 的 TOOLS_SPEC + TOOL_IMPL 結構、改成你的 tool。
使用者可能在 Anthropic / OpenAI / Ollama 之間切換、SDK shape 不同。看 sdk-diff.md 的 3 行對照表。若 SDK 或 model 沒說明,問一次;接著以固定 fixture 確認目前 tool-calling 支援並作同條件比較。
每個 tool-calling 程式都應該有 mock-based test、不打真 API:
完整 mock pattern 對照 test.py。先把 test 跑通、再連真的 LLM。
這個 skill 不處理:
碰到這些情境、直接告訴使用者「這個 skill 處理 tool-use mechanics、你這個問題需要 Stage X、建議去看 ...」、不要硬吃下去。
TOOLS_SPEC。