{"id":612,"date":"2026-02-02T00:48:22","date_gmt":"2026-02-01T16:48:22","guid":{"rendered":"https:\/\/blog.itsmygo.uk\/2026\/02\/02\/claude-cookbooks-%e5%8e%9f%e5%a7%8b%e7%a2%bc%e8%a7%a3%e8%ae%80%ef%bc%9aai-%e9%96%8b%e7%99%bc%e7%9f%a5%e8%ad%98%e5%ba%ab%e7%9a%84%e5%b7%a5%e7%a8%8b%e5%8c%96%e6%b2%bb%e7%90%86%e8%a8%ad%e8%a8%88\/"},"modified":"2026-02-02T00:50:57","modified_gmt":"2026-02-01T16:50:57","slug":"claude-cookbooks-%e5%8e%9f%e5%a7%8b%e7%a2%bc%e8%a7%a3%e8%ae%80%ef%bc%9aai-%e9%96%8b%e7%99%bc%e7%9f%a5%e8%ad%98%e5%ba%ab%e7%9a%84%e5%b7%a5%e7%a8%8b%e5%8c%96%e6%b2%bb%e7%90%86%e8%a8%ad%e8%a8%88","status":"publish","type":"post","link":"https:\/\/blog.itsmygo.uk\/wordpress\/2026\/02\/02\/claude-cookbooks-%e5%8e%9f%e5%a7%8b%e7%a2%bc%e8%a7%a3%e8%ae%80%ef%bc%9aai-%e9%96%8b%e7%99%bc%e7%9f%a5%e8%ad%98%e5%ba%ab%e7%9a%84%e5%b7%a5%e7%a8%8b%e5%8c%96%e6%b2%bb%e7%90%86%e8%a8%ad%e8%a8%88\/","title":{"rendered":"Claude Cookbooks \u539f\u59cb\u78bc\u89e3\u8b80\uff1aAI \u958b\u767c\u77e5\u8b58\u5eab\u7684\u5de5\u7a0b\u5316\u6cbb\u7406\u8a2d\u8a08"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Claude Cookbooks \u662f Anthropic \u5b98\u65b9\u7dad\u8b77\u7684 Jupyter Notebook \u7bc4\u4f8b\u96c6\uff0c\u6db5\u84cb Claude API \u7684\u5404\u7a2e\u9032\u968e\u7528\u6cd5\u2014\u2014\u5f9e RAG\u3001Tool Use \u5230 Agent Patterns\u3002\u4f46\u771f\u6b63\u503c\u5f97\u6df1\u8b80\u539f\u59cb\u78bc\u7684\u4e0d\u662f\u90a3\u4e9b notebook \u7bc4\u4f8b\u672c\u8eab\uff0c\u800c\u662f\u9019\u500b\u5009\u5eab\u5982\u4f55\u7528 Claude Code \u7684 slash commands\u3001skills\u3001agents \u548c CI workflows \u5efa\u7acb\u8d77\u4e00\u5957\u300cAI \u9a45\u52d5\u7684\u54c1\u8cea\u6cbb\u7406\u7cfb\u7d71\u300d\u3002\u8b80\u5b8c\u4f60\u6703\u5b78\u5230\uff1a\u5982\u4f55\u7528 CLAUDE.md \u5b9a\u7fa9\u5c08\u6848\u5951\u7d04\u3001\u5982\u4f55\u7528 registry + schema \u7ba1\u7406\u5167\u5bb9\u76ee\u9304\u3001\u5982\u4f55\u8b93 AI \u5728 CI pipeline \u4e2d\u7576 reviewer\uff0c\u4ee5\u53ca Anthropic \u5167\u90e8\u7684 notebook \u6559\u5b78\u8a2d\u8a08\u65b9\u6cd5\u8ad6\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\">Claude Cookbooks GitHub Repository<\/a> \u2014 \u5c08\u6848\u539f\u59cb\u78bc\uff0c\u5305\u542b\u672c\u6587\u89e3\u8b80\u7684\u6240\u6709\u8a2d\u8a08\u5be6\u4f5c<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5c08\u6848\u6982\u89bd<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Claude Cookbooks \u662f\u4e00\u500b\u5305\u542b 60+ Jupyter Notebook \u7684\u6559\u5b78\u8cc7\u6e90\u5eab\uff0c\u4e3b\u8981\u4ee5 Python \u64b0\u5beb\uff0c\u4f9d\u529f\u80fd\u5206\u70ba capabilities\u3001tool_use\u3001patterns\/agents\u3001multimodal\u3001skills\u3001extended_thinking \u7b49\u76ee\u9304\u3002\u8868\u9762\u4e0a\u770b\u662f\u4e00\u500b\u6587\u4ef6\u96c6\uff0c\u4f46\u5e95\u5c64\u6709\u5b8c\u6574\u7684\u5de5\u7a0b\u5316\u57fa\u790e\u8a2d\u65bd\uff1aJSON Schema \u9a57\u8b49\u7684 registry\u3001Claude Code \u9a45\u52d5\u7684\u81ea\u52d5\u5316\u5be9\u67e5\u3001\u81ea\u8a02 skill \u7cfb\u7d71\u3001\u4ee5\u53ca\u6559\u5b78\u8a2d\u8a08\u65b9\u6cd5\u8ad6\uff08TLO\/ELO \u5b78\u7fd2\u76ee\u6a19\u9ad4\u7cfb\uff09\u3002\u6280\u8853\u68e7\u5305\u62ec Python 3.11+\u3001uv \u5957\u4ef6\u7ba1\u7406\u3001Ruff linter\u3001pre-commit hooks\u3001GitHub Actions CI\uff0c\u4ee5\u53ca <code>claude-code-action<\/code> \u6574\u5408\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u67b6\u69cb\u7e3d\u89bd<\/h2>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">claude-cookbooks\/\n\u251c\u2500\u2500 .claude\/                        <span class=\"hljs-comment\"># Claude Code \u6574\u5408\u5c64<\/span>\n\u2502   \u251c\u2500\u2500 commands\/                   <span class=\"hljs-comment\"># Slash commands\uff08CI \u8207\u672c\u5730\u5171\u7528\uff09<\/span>\n\u2502   \u2502   \u251c\u2500\u2500 notebook-review.md      <span class=\"hljs-comment\">#   notebook \u54c1\u8cea\u5be9\u67e5<\/span>\n\u2502   \u2502   \u251c\u2500\u2500 model-check.md          <span class=\"hljs-comment\">#   \u6a21\u578b\u7248\u672c\u9a57\u8b49<\/span>\n\u2502   \u2502   \u251c\u2500\u2500 link-review.md          <span class=\"hljs-comment\">#   \u9023\u7d50\u54c1\u8cea\u6aa2\u67e5<\/span>\n\u2502   \u2502   \u251c\u2500\u2500 review-pr.md            <span class=\"hljs-comment\">#   PR \u5be9\u67e5\u6d41\u7a0b<\/span>\n\u2502   \u2502   \u2514\u2500\u2500 add-registry.md         <span class=\"hljs-comment\">#   \u65b0\u589e registry \u689d\u76ee<\/span>\n\u2502   \u251c\u2500\u2500 agents\/\n\u2502   \u2502   \u2514\u2500\u2500 code-reviewer.md        <span class=\"hljs-comment\"># \u4ee3\u78bc\u5be9\u67e5 agent \u5b9a\u7fa9<\/span>\n\u2502   \u2514\u2500\u2500 skills\/\n\u2502       \u2514\u2500\u2500 cookbook-audit\/          <span class=\"hljs-comment\"># Notebook \u5be9\u8a08 skill<\/span>\n\u2502           \u251c\u2500\u2500 SKILL.md            <span class=\"hljs-comment\">#   skill \u5165\u53e3\u5b9a\u7fa9<\/span>\n\u2502           \u251c\u2500\u2500 style_guide.md      <span class=\"hljs-comment\">#   \u6559\u5b78\u8a2d\u8a08\u6307\u5357<\/span>\n\u2502           \u2514\u2500\u2500 validate_notebook.py<span class=\"hljs-comment\">#   \u81ea\u52d5\u5316\u9a57\u8b49\u8173\u672c<\/span>\n\u251c\u2500\u2500 .github\/\n\u2502   \u251c\u2500\u2500 workflows\/                  <span class=\"hljs-comment\"># CI pipeline<\/span>\n\u2502   \u2502   \u251c\u2500\u2500 claude-pr-review.yml    <span class=\"hljs-comment\">#   Claude \u9a45\u52d5\u7684 PR \u5be9\u67e5<\/span>\n\u2502   \u2502   \u251c\u2500\u2500 claude-model-check.yml  <span class=\"hljs-comment\">#   \u6a21\u578b\u7248\u672c\u81ea\u52d5\u6aa2\u67e5<\/span>\n\u2502   \u2502   \u251c\u2500\u2500 notebook-quality.yml    <span class=\"hljs-comment\">#   Notebook \u54c1\u8cea\u9598\u9580<\/span>\n\u2502   \u2502   \u2514\u2500\u2500 ...\n\u2502   \u251c\u2500\u2500 registry_schema.json        <span class=\"hljs-comment\"># Registry JSON Schema<\/span>\n\u2502   \u2514\u2500\u2500 authors_schema.json         <span class=\"hljs-comment\"># Authors JSON Schema<\/span>\n\u251c\u2500\u2500 patterns\/agents\/                <span class=\"hljs-comment\"># Agent \u8a2d\u8a08\u6a21\u5f0f\u7bc4\u4f8b<\/span>\n\u2502   \u251c\u2500\u2500 prompts\/                    <span class=\"hljs-comment\">#   \u5206\u96e2\u7684 prompt \u6a94\u6848<\/span>\n\u2502   \u2514\u2500\u2500 util.py                     <span class=\"hljs-comment\">#   \u5171\u7528\u5de5\u5177\u51fd\u5f0f<\/span>\n\u251c\u2500\u2500 claude_agent_sdk\/               <span class=\"hljs-comment\"># Claude Agent SDK \u7bc4\u4f8b<\/span>\n\u2502   \u251c\u2500\u2500 research_agent\/             <span class=\"hljs-comment\">#   \u7814\u7a76\u4ee3\u7406<\/span>\n\u2502   \u251c\u2500\u2500 chief_of_staff_agent\/       <span class=\"hljs-comment\">#   \u591a\u4ee3\u7406\u7cfb\u7d71\u7bc4\u4f8b<\/span>\n\u2502   \u2514\u2500\u2500 observability_agent\/        <span class=\"hljs-comment\">#   \u53ef\u89c0\u6e2c\u6027\u4ee3\u7406<\/span>\n\u251c\u2500\u2500 capabilities\/                   <span class=\"hljs-comment\"># \u6838\u5fc3\u80fd\u529b\u7bc4\u4f8b<\/span>\n\u251c\u2500\u2500 tool_use\/                       <span class=\"hljs-comment\"># \u5de5\u5177\u4f7f\u7528\u7bc4\u4f8b<\/span>\n\u251c\u2500\u2500 skills\/                         <span class=\"hljs-comment\"># Skills \u529f\u80fd\u7bc4\u4f8b<\/span>\n\u251c\u2500\u2500 registry.yaml                   <span class=\"hljs-comment\"># \u5167\u5bb9\u76ee\u9304\uff08schema \u9a57\u8b49\uff09<\/span>\n\u251c\u2500\u2500 authors.yaml                    <span class=\"hljs-comment\"># \u8ca2\u737b\u8005\u8cc7\u6599<\/span>\n\u251c\u2500\u2500 CLAUDE.md                       <span class=\"hljs-comment\"># \u5c08\u6848\u5951\u7d04\u6587\u4ef6<\/span>\n\u2514\u2500\u2500 CONTRIBUTING.md                 <span class=\"hljs-comment\"># \u8ca2\u737b\u6307\u5357<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">\u6838\u5fc3\u8a2d\u8a08\u89e3\u6790<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u8a2d\u8a08\u4e00\uff1aCLAUDE.md \u4f5c\u70ba\u5c08\u6848\u5951\u7d04\u2014\u2014\u70ba AI \u5354\u4f5c\u8005\u800c\u5beb\u7684 README<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Claude Cookbooks \u7684 CLAUDE.md \u4e0d\u53ea\u662f\u7d66\u4eba\u985e\u770b\u7684\u8aaa\u660e\u6587\u4ef6\uff0c\u5b83\u662f\u70ba Claude Code \u9019\u500b AI \u5354\u4f5c\u8005\u91cf\u8eab\u6253\u9020\u7684\u300c\u5c08\u6848\u5951\u7d04\u300d\u3002\u6574\u4efd\u6587\u4ef6\u7684\u8a2d\u8a08\u610f\u5716\u662f\uff1a\u8b93 AI \u5728\u9032\u5165\u5009\u5eab\u6642\uff0c\u7acb\u5373\u7406\u89e3\u958b\u767c\u898f\u7bc4\u3001\u7a0b\u5f0f\u78bc\u98a8\u683c\u3001\u53ef\u7528\u547d\u4ee4\uff0c\u4ee5\u53ca\u7d55\u5c0d\u4e0d\u80fd\u505a\u7684\u4e8b\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\/blob\/main\/CLAUDE.md\"><code>CLAUDE.md<\/code><\/a> \u2014 \u5b9a\u7fa9 Claude Code \u5728\u6b64\u5009\u5eab\u4e2d\u61c9\u9075\u5b88\u7684\u5c08\u6848\u5951\u7d04<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\">## <span class=\"hljs-selector-tag\">Key<\/span> <span class=\"hljs-selector-tag\">Rules<\/span>\n\n1. **<span class=\"hljs-selector-tag\">API<\/span> <span class=\"hljs-selector-tag\">Keys<\/span>:** <span class=\"hljs-selector-tag\">Never<\/span> <span class=\"hljs-selector-tag\">commit<\/span> `<span class=\"hljs-selector-class\">.env<\/span>` <span class=\"hljs-selector-tag\">files<\/span>. <span class=\"hljs-selector-tag\">Always<\/span> <span class=\"hljs-selector-tag\">use<\/span> `<span class=\"hljs-selector-tag\">os<\/span><span class=\"hljs-selector-class\">.environ<\/span><span class=\"hljs-selector-class\">.get<\/span>(\"<span class=\"hljs-selector-tag\">ANTHROPIC_API_KEY<\/span>\")`\n\n2. **<span class=\"hljs-selector-tag\">Dependencies<\/span>:** <span class=\"hljs-selector-tag\">Use<\/span> `<span class=\"hljs-selector-tag\">uv<\/span> <span class=\"hljs-selector-tag\">add<\/span> &lt;<span class=\"hljs-selector-tag\">package<\/span>&gt;` <span class=\"hljs-selector-tag\">or<\/span> `<span class=\"hljs-selector-tag\">uv<\/span> <span class=\"hljs-selector-tag\">add<\/span> <span class=\"hljs-selector-tag\">--dev<\/span> &lt;<span class=\"hljs-selector-tag\">package<\/span>&gt;`. <span class=\"hljs-selector-tag\">Never<\/span> <span class=\"hljs-selector-tag\">edit<\/span> <span class=\"hljs-selector-tag\">pyproject<\/span><span class=\"hljs-selector-class\">.toml<\/span> <span class=\"hljs-selector-tag\">directly<\/span>.\n\n3. **<span class=\"hljs-selector-tag\">Models<\/span>:** <span class=\"hljs-selector-tag\">Use<\/span> <span class=\"hljs-selector-tag\">current<\/span> <span class=\"hljs-selector-tag\">Claude<\/span> <span class=\"hljs-selector-tag\">models<\/span>. <span class=\"hljs-selector-tag\">Check<\/span> <span class=\"hljs-selector-tag\">docs<\/span><span class=\"hljs-selector-class\">.anthropic<\/span><span class=\"hljs-selector-class\">.com<\/span> <span class=\"hljs-selector-tag\">for<\/span> <span class=\"hljs-selector-tag\">latest<\/span> <span class=\"hljs-selector-tag\">versions<\/span>.\n   <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">Sonnet<\/span>: `<span class=\"hljs-selector-tag\">claude-sonnet-4-5-20250929<\/span>`\n   <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">Haiku<\/span>: `<span class=\"hljs-selector-tag\">claude-haiku-4-5-20251001<\/span>`\n   <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">Opus<\/span>: `<span class=\"hljs-selector-tag\">claude-opus-4-5-20251101<\/span>`\n\n4. **<span class=\"hljs-selector-tag\">Notebooks<\/span>:**\n   <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">Keep<\/span> <span class=\"hljs-selector-tag\">outputs<\/span> <span class=\"hljs-selector-tag\">in<\/span> <span class=\"hljs-selector-tag\">notebooks<\/span> (<span class=\"hljs-selector-tag\">intentional<\/span> <span class=\"hljs-selector-tag\">for<\/span> <span class=\"hljs-selector-tag\">demonstration<\/span>)\n   <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">One<\/span> <span class=\"hljs-selector-tag\">concept<\/span> <span class=\"hljs-selector-tag\">per<\/span> <span class=\"hljs-selector-tag\">notebook<\/span>\n   <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">Test<\/span> <span class=\"hljs-selector-tag\">that<\/span> <span class=\"hljs-selector-tag\">notebooks<\/span> <span class=\"hljs-selector-tag\">run<\/span> <span class=\"hljs-selector-tag\">top-to-bottom<\/span> <span class=\"hljs-selector-tag\">without<\/span> <span class=\"hljs-selector-tag\">errors<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u8a2d\u8a08\u4eae\u9ede\u5728\u65bc\u300c\u660e\u78ba\u5217\u51fa\u6a21\u578b\u7248\u672c\u300d\u2014\u2014\u9019\u4e0d\u662f\u7d66\u4eba\u8a18\u7684\uff0c\u800c\u662f\u8b93 Claude Code \u5728\u751f\u6210\u6216\u5be9\u67e5\u7a0b\u5f0f\u78bc\u6642\uff0c\u80fd\u76f4\u63a5\u6bd4\u5c0d\u662f\u5426\u4f7f\u7528\u4e86\u6b63\u78ba\u7684\u6a21\u578b\u540d\u7a31\u3002Key Rules \u7684\u6bcf\u4e00\u689d\u90fd\u662f\u53ef\u6a5f\u5668\u57f7\u884c\u7684\u7d04\u675f\uff0c\u800c\u975e\u6a21\u7cca\u7684\u5efa\u8b70\u3002\u540c\u6642\u6ce8\u610f CLAUDE.md \u4e5f\u5217\u51fa\u4e86\u6240\u6709 slash commands\uff08<code>\/notebook-review<\/code>\u3001<code>\/model-check<\/code>\u3001<code>\/link-review<\/code>\uff09\uff0c\u8b93 Claude Code \u77e5\u9053\u81ea\u5df1\u6709\u54ea\u4e9b\u80fd\u529b\u53ef\u4ee5\u8abf\u7528\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u8a2d\u8a08\u4e8c\uff1aSlash Commands \u7684 CI\/\u672c\u5730\u96d9\u7528\u8a2d\u8a08<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u9019\u500b\u5009\u5eab\u6700\u7cbe\u5de7\u7684\u8a2d\u8a08\u4e4b\u4e00\u662f\uff1a<code>.claude\/commands\/<\/code> \u4e2d\u5b9a\u7fa9\u7684 slash commands \u540c\u6642\u670d\u52d9\u5169\u500b\u5834\u666f\u2014\u2014\u958b\u767c\u8005\u5728\u672c\u5730\u4f7f\u7528 Claude Code \u6642\u53ef\u76f4\u63a5\u8abf\u7528\uff0cGitHub Actions CI \u4e5f\u900f\u904e <code>claude-code-action<\/code> \u8abf\u7528\u540c\u4e00\u5957\u547d\u4ee4\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\/blob\/main\/.claude\/commands\/notebook-review.md\"><code>.claude\/commands\/notebook-review.md<\/code><\/a> \u2014 Notebook \u54c1\u8cea\u5be9\u67e5\u547d\u4ee4\u5b9a\u7fa9<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">---\nallowed-tools: Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(<span class=\"hljs-keyword\">echo<\/span>:*),Read,Glob,Grep,WebFetch\ndescription: Comprehensive review of Jupyter notebooks <span class=\"hljs-keyword\">and<\/span> Python scripts\n---\n\n**IMPORTANT**: Only review the files explicitly listed in the prompt above. <span class=\"hljs-keyword\">Do<\/span> not search <span class=\"hljs-keyword\">for<\/span> <span class=\"hljs-keyword\">or<\/span> review additional files.\n\nReview the specified Jupyter notebooks <span class=\"hljs-keyword\">and<\/span> Python scripts using the Notebook review skill.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u6ce8\u610f frontmatter \u4e2d\u7684 <code>allowed-tools<\/code> \u5b9a\u7fa9\u2014\u2014\u9019\u662f\u4e00\u500b\u5b89\u5168\u908a\u754c\u8a2d\u8a08\u3002\u6bcf\u500b command \u53ea\u88ab\u6388\u4e88\u5b8c\u6210\u4efb\u52d9\u6240\u9700\u7684\u6700\u5c0f\u5de5\u5177\u96c6\u3002\u4f8b\u5982 <code>notebook-review<\/code> \u53ef\u4ee5\u8b80\u6a94\u548c\u641c\u5c0b\uff0c\u4f46\u4e0d\u80fd\u5beb\u5165\u6a94\u6848\uff1b\u5b83\u53ef\u4ee5\u7528 <code>gh pr comment<\/code> \u767c\u8868\u8a55\u8ad6\uff0c\u4f46\u4e0d\u80fd\u5408\u4f75 PR\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\/blob\/main\/.github\/workflows\/claude-pr-review.yml\"><code>.github\/workflows\/claude-pr-review.yml<\/code><\/a> \u2014 CI \u4e2d\u8abf\u7528 Claude Code \u9032\u884c PR \u5be9\u67e5\u7684 workflow<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">- name: Run Claude PR Review\n  uses: anthropics\/claude-code-action@v1\n  with:\n    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}\n    github_token: ${{ secrets.GITHUB_TOKEN }}\n    prompt: |\n      \/review-pr-ci ${{ steps.pr-number.outputs.number }}\n    claude_args: |\n      --allowedTools <span class=\"hljs-string\">\"SlashCommand,Task,Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr review:*),Bash(git diff:*),Bash(git log:*),Read,Glob,Grep\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">CI workflow \u900f\u904e <code>prompt: \/review-pr-ci<\/code> \u76f4\u63a5\u89f8\u767c slash command\uff0c<code>claude_args<\/code> \u518d\u52a0\u4e0a\u4e00\u5c64 allowed tools \u9650\u5236\u3002\u9019\u610f\u5473\u8457\u540c\u4e00\u500b\u5be9\u67e5\u908f\u8f2f\uff0c\u958b\u767c\u8005\u5728\u672c\u5730\u548c CI \u4e2d\u5f97\u5230\u5b8c\u5168\u4e00\u81f4\u7684\u9ad4\u9a57\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u8a2d\u8a08\u4e09\uff1a\u5206\u5c64\u5f0f Code Reviewer Agent\u2014\u2014\u5f9e Skill \u5230 Agent \u7684\u8077\u8cac\u5206\u96e2<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5009\u5eab\u5b9a\u7fa9\u4e86\u4e00\u500b\u5b8c\u6574\u7684\u4ee3\u78bc\u5be9\u67e5 agent\uff0c\u5b83\u7684\u8a2d\u8a08\u9ad4\u73fe\u4e86\u6e05\u6670\u7684\u8077\u8cac\u5206\u5c64\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\/blob\/main\/.claude\/agents\/code-reviewer.md\"><code>.claude\/agents\/code-reviewer.md<\/code><\/a> \u2014 \u4ee3\u78bc\u5be9\u67e5 agent \u7684\u5b8c\u6574\u5b9a\u7fa9<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\"><span><code class=\"hljs\">---\nname: code-reviewer\ndescription: Performs thorough code reviews for the Notebooks in the Cookbook repo...\ntools: Read, Grep, Glob, Bash, Bash(git status:*)\n---\n\nYou are a senior software engineer specializing in code reviews for Anthropic's Cookbooks repo.\n\n## SPECIFIC CHECKLIST\n\n### Notebook Structure &amp; Content\n- **Introduction Quality**:\n  - Hooks with the problem being solved (not the machinery being built)\n  - Lists 2-4 Terminal Learning Objectives (TLOs) as bullet points\n\n### Python &amp; Code Style\n- **Type Safety**: Explicit return types on functions, comprehensive type annotations\n- **Modern Python**: Use `str | None` instead of `Optional&#91;str]`\n\n### CI\/CD &amp; GitHub Actions\n- **Workflow Efficiency**:\n  - Only run on changed files where possible\n  - Restrict expensive workflows to internal contributors:\n    `if: github.event.pull_request.head.repo.full_name == github.repository`\n<\/code><\/span><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u9019\u500b agent \u5b9a\u7fa9\u4e86 300+ \u884c\u7684\u5be9\u67e5\u6e05\u55ae\uff0c\u6db5\u84cb notebook \u7d50\u69cb\u3001Python \u98a8\u683c\u3001\u5b89\u5168\u6027\u3001CI \u6548\u7387\u7b49\u9762\u5411\u3002\u7279\u5225\u503c\u5f97\u6ce8\u610f\u7684\u662f\u300cNotebook Pedagogy\u300d\u7dad\u5ea6\u2014\u2014\u5b83\u8981\u6c42 introduction \u5fc5\u9808\u300chooks with the problem being solved, not the machinery being built\u300d\uff0c\u9019\u662f Anthropic \u5167\u90e8\u7684\u6559\u5b78\u8a2d\u8a08\u7406\u5ff5\u76f4\u63a5\u5d4c\u5165\u5230\u4e86\u81ea\u52d5\u5316\u5be9\u67e5\u6d41\u7a0b\u4e2d\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u540c\u6642\u6ce8\u610f agent \u5982\u4f55\u5f15\u7528 skill\uff1acode-reviewer \u6703\u8abf\u7528 <code>cookbook-audit<\/code> skill \u4e2d\u7684 <code>style_guide.md<\/code> \u548c <code>validate_notebook.py<\/code>\uff0c\u5f62\u6210 agent -> skill -> script \u7684\u4e09\u5c64\u67b6\u69cb\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u8a2d\u8a08\u56db\uff1aRegistry + JSON Schema\u2014\u2014\u5167\u5bb9\u76ee\u9304\u7684\u7d50\u69cb\u5316\u7ba1\u7406<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5009\u5eab\u7528 <code>registry.yaml<\/code> + JSON Schema \u5efa\u7acb\u4e86\u4e00\u5957\u5167\u5bb9\u7d22\u5f15\u7cfb\u7d71\uff0c\u6bcf\u500b notebook \u90fd\u662f\u4e00\u7b46\u6709\u7d50\u69cb\u7684\u8a18\u9304\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\/blob\/main\/registry.yaml\"><code>registry.yaml<\/code><\/a> \u2014 \u6240\u6709 cookbook \u7684\u7d50\u69cb\u5316\u76ee\u9304<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">- title: Automatic context compaction\n  <span class=\"hljs-attr\">description<\/span>: Manage context limits <span class=\"hljs-keyword\">in<\/span> long-running agentic workflows by automatically\n    compressing conversation history.\n  path: tool_use\/automatic-context-compaction.ipynb\n  <span class=\"hljs-attr\">authors<\/span>:\n  - PedramNavid\n  <span class=\"hljs-attr\">date<\/span>: <span class=\"hljs-string\">'2025-11-24'<\/span>\n  <span class=\"hljs-attr\">categories<\/span>:\n  - Tools\n  - Agent Patterns\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\/blob\/main\/.github\/registry_schema.json\"><code>.github\/registry_schema.json<\/code><\/a> \u2014 \u5b9a\u7fa9 registry \u689d\u76ee\u7684 JSON Schema<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n  <span class=\"hljs-attr\">\"properties\"<\/span>: {\n    <span class=\"hljs-attr\">\"categories\"<\/span>: {\n      <span class=\"hljs-attr\">\"type\"<\/span>: <span class=\"hljs-string\">\"array\"<\/span>,\n      <span class=\"hljs-attr\">\"items\"<\/span>: {\n        <span class=\"hljs-attr\">\"type\"<\/span>: <span class=\"hljs-string\">\"string\"<\/span>,\n        <span class=\"hljs-attr\">\"enum\"<\/span>: &#91;\n          <span class=\"hljs-string\">\"Agent Patterns\"<\/span>, <span class=\"hljs-string\">\"Claude Agent SDK\"<\/span>, <span class=\"hljs-string\">\"Evals\"<\/span>,\n          <span class=\"hljs-string\">\"Fine-Tuning\"<\/span>, <span class=\"hljs-string\">\"Multimodal\"<\/span>, <span class=\"hljs-string\">\"Integrations\"<\/span>,\n          <span class=\"hljs-string\">\"Observability\"<\/span>, <span class=\"hljs-string\">\"RAG &amp; Retrieval\"<\/span>, <span class=\"hljs-string\">\"Responses\"<\/span>,\n          <span class=\"hljs-string\">\"Skills\"<\/span>, <span class=\"hljs-string\">\"Thinking\"<\/span>, <span class=\"hljs-string\">\"Tools\"<\/span>\n        ]\n      },\n      <span class=\"hljs-attr\">\"minItems\"<\/span>: <span class=\"hljs-number\">1<\/span>\n    }\n  },\n  <span class=\"hljs-attr\">\"required\"<\/span>: &#91;<span class=\"hljs-string\">\"title\"<\/span>, <span class=\"hljs-string\">\"path\"<\/span>, <span class=\"hljs-string\">\"categories\"<\/span>, <span class=\"hljs-string\">\"authors\"<\/span>, <span class=\"hljs-string\">\"date\"<\/span>]\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Schema \u900f\u904e <code>enum<\/code> \u9650\u5b9a\u4e86\u5206\u985e\u8a5e\u5f59\u8868\u2014\u2014\u53ea\u6709 12 \u500b\u9810\u5b9a\u7fa9\u985e\u5225\u3002\u9019\u9632\u6b62\u4e86\u5206\u985e\u6df7\u4e82\uff08\u4f8b\u5982\u6709\u4eba\u5beb\u300ctool-use\u300d\u3001\u6709\u4eba\u5beb\u300cToolUse\u300d\uff09\u3002\u52a0\u4e0a <code>add-registry<\/code> slash command\uff0c\u65b0\u589e notebook \u6642 Claude Code \u6703\u81ea\u52d5\u8b80\u53d6 notebook \u5167\u5bb9\u3001\u751f\u6210\u7b26\u5408 schema \u7684\u689d\u76ee\u3001\u6aa2\u67e5 authors.yaml \u4e2d\u7684\u4f5c\u8005\u8cc7\u8a0a\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u8a2d\u8a08\u4e94\uff1a\u6559\u5b78\u8a2d\u8a08\u65b9\u6cd5\u8ad6\u2014\u2014TLO\/ELO \u5b78\u7fd2\u76ee\u6a19\u9ad4\u7cfb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u9019\u500b\u5009\u5eab\u6700\u7368\u7279\u7684\u8a2d\u8a08\u4e0d\u662f\u7a0b\u5f0f\u78bc\uff0c\u800c\u662f\u4e00\u5957\u5b8c\u6574\u7684\u6559\u5b78\u8a2d\u8a08\u65b9\u6cd5\u8ad6\uff0c\u88ab\u7de8\u78bc\u5230\u4e86 <code>style_guide.md<\/code> \u548c\u5be9\u67e5\u6d41\u7a0b\u4e2d\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\/blob\/main\/.claude\/skills\/cookbook-audit\/style_guide.md\"><code>.claude\/skills\/cookbook-audit\/style_guide.md<\/code><\/a> \u2014 \u5b9a\u7fa9 notebook \u6559\u5b78\u8a2d\u8a08\u6a19\u6e96<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># 1. Introduction<\/span>\n\nPurpose: Frame the notebook around the problem being solved <span class=\"hljs-keyword\">and<\/span> the value\ndelivered, not the machinery being built.\n\nGood:\nYour engineering team<span class=\"hljs-string\">'s GitHub Actions workflows fail for dozens of reasons:\nflaky tests, dependency conflicts, infrastructure issues, or real bugs.\nManually triaging which failures need immediate attention versus which\ncan wait wastes hours of senior engineer time every week.\n\nBad:\nIn this notebook we will build a research agent. Research agents are useful\nbecause they can search the internet and analyze information. We will use\nthe Claude Code SDK to create an agent with the WebSearch tool.\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Style guide \u660e\u78ba\u5340\u5206\u4e86\u300c\u554f\u984c\u5c0e\u5411\u300dvs.\u300c\u6a5f\u5236\u5c0e\u5411\u300d\u7684\u5beb\u6cd5\uff0c\u4e26\u7528 TLO\uff08Terminal Learning Objectives\uff09\u548c ELO\uff08Enabling Learning Objectives\uff09\u4f86\u7d50\u69cb\u5316\u6bcf\u500b notebook \u7684\u5b78\u7fd2\u5951\u7d04\u3002\u9019\u4e0d\u662f\u5b78\u8853\u6982\u5ff5\u7684\u5806\u780c\u2014\u2014\u5b83\u88ab\u5d4c\u5165\u5230 <code>validate_notebook.py<\/code> \u8173\u672c\u548c code-reviewer agent \u7684\u5be9\u67e5\u6e05\u55ae\u4e2d\uff0c\u6210\u70ba\u53ef\u81ea\u52d5\u5316\u6aa2\u67e5\u7684\u54c1\u8cea\u9598\u9580\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Content Philosophy \u90e8\u5206\u4e5f\u660e\u78ba\u5b9a\u7fa9\u4e86 Cookbook\u300c\u4e0d\u662f\u4ec0\u9ebc\u300d\uff1a<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">### What Cookbooks Are NOT<\/span>\n\nCookbooks are not pure tutorials: We assume users have basic technical skills\nCookbooks are not comprehensive explanations: We don<span class=\"hljs-string\">'t teach transformer architecture\nCookbooks are not reference docs: We don'<\/span>t exhaustively document every parameter\nCookbooks are not simple tips <span class=\"hljs-keyword\">and<\/span> tricks: We don<span class=\"hljs-string\">'t teach \"hacks\"\nCookbooks are not production-ready code: They showcase use cases, not production patterns\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u8a2d\u8a08\u516d\uff1aNotebook \u81ea\u52d5\u5316\u9a57\u8b49\u2014\u2014\u5f9e Secret Detection \u5230\u7d50\u69cb\u6aa2\u67e5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>validate_notebook.py<\/code> \u662f\u4e00\u500b\u7cbe\u5fc3\u8a2d\u8a08\u7684\u81ea\u52d5\u5316\u54c1\u8cea\u9598\u9580\uff0c\u57f7\u884c\u591a\u5c64\u6aa2\u67e5\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\/blob\/main\/.claude\/skills\/cookbook-audit\/validate_notebook.py\"><code>.claude\/skills\/cookbook-audit\/validate_notebook.py<\/code><\/a> \u2014 Notebook \u81ea\u52d5\u5316\u9a57\u8b49\u8173\u672c<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">class<\/span> <span class=\"hljs-selector-tag\">NotebookValidator<\/span>:\n    <span class=\"hljs-selector-tag\">def<\/span> <span class=\"hljs-selector-tag\">run_all_checks<\/span>(<span class=\"hljs-selector-tag\">self<\/span>):\n        \"\"\"<span class=\"hljs-selector-tag\">Run<\/span> <span class=\"hljs-selector-tag\">all<\/span> <span class=\"hljs-selector-tag\">validation<\/span> <span class=\"hljs-selector-tag\">checks<\/span>.\"\"\"\n        <span class=\"hljs-selector-tag\">self<\/span><span class=\"hljs-selector-class\">.check_hardcoded_secrets<\/span>()\n        <span class=\"hljs-selector-tag\">self<\/span><span class=\"hljs-selector-class\">.check_introduction<\/span>()\n        <span class=\"hljs-selector-tag\">self<\/span><span class=\"hljs-selector-class\">.check_pip_install_output<\/span>()\n        <span class=\"hljs-selector-tag\">self<\/span><span class=\"hljs-selector-class\">.check_code_explanations<\/span>()\n        <span class=\"hljs-selector-tag\">self<\/span><span class=\"hljs-selector-class\">.check_verbose_output<\/span>()\n        <span class=\"hljs-selector-tag\">self<\/span><span class=\"hljs-selector-class\">.check_variable_names<\/span>()\n        <span class=\"hljs-selector-tag\">self<\/span><span class=\"hljs-selector-class\">.check_model_constant<\/span>()\n        <span class=\"hljs-selector-tag\">self<\/span><span class=\"hljs-selector-class\">.check_deprecated_patterns<\/span>()\n        <span class=\"hljs-selector-tag\">self<\/span><span class=\"hljs-selector-class\">.check_conclusion<\/span>()\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u9a57\u8b49\u908f\u8f2f\u6db5\u84cb 9 \u500b\u7dad\u5ea6\u3002\u503c\u5f97\u6ce8\u610f\u7684\u8a2d\u8a08\u7d30\u7bc0\u5305\u62ec\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li><strong>Secret detection \u7684\u964d\u7d1a\u7b56\u7565<\/strong>\uff1a\u512a\u5148\u4f7f\u7528 <code>detect-secrets<\/code> \u5de5\u5177\uff08\u652f\u63f4\u81ea\u8a02 baseline \u548c plugin\uff09\uff0c\u4f46\u82e5\u5de5\u5177\u4e0d\u53ef\u7528\u5247\u81ea\u52d5\u964d\u7d1a\u5230\u57fa\u65bc regex \u7684\u7c21\u55ae\u6aa2\u6e2c\u3002<\/li>\n\n\n<li><strong>Model \u7248\u672c\u9a57\u8b49<\/strong>\uff1a\u4e0d\u53ea\u6aa2\u67e5\u6a21\u578b\u540d\u7a31\u662f\u5426\u6709\u6548\uff0c\u9084\u7dad\u8b77\u4e86\u4e00\u500b deprecated models \u6620\u5c04\u8868\uff0c\u80fd\u544a\u8a34\u4f60\u300c\u7528 claude-opus-4-1 \u662f\u904e\u6642\u7684\uff0c\u8acb\u66f4\u65b0\u5230 claude-opus-4-5\u300d\u3002<\/li>\n\n\n<li><strong>\u7d50\u69cb\u5316\u554f\u984c\u5206\u7d1a<\/strong>\uff1a\u5c07\u554f\u984c\u5206\u70ba <code>issues<\/code>\uff08critical\uff0c\u5fc5\u9808\u4fee\u5fa9\uff09\u548c <code>warnings<\/code>\uff08should review\uff09\uff0c\u53cd\u6620\u5728 exit code \u4e2d\u2014\u2014\u53ea\u6709 critical issues \u6703\u5c0e\u81f4 CI \u5931\u6557\u3002<\/li>\n\n\n<li><strong>Markdown \u8f49\u63db<\/strong>\uff1a\u9a57\u8b49\u524d\u5148\u5c07 notebook \u8f49\u70ba markdown\uff08\u6392\u9664 output\uff09\uff0c\u65b9\u4fbf\u4eba\u5de5\u548c AI \u5be9\u67e5\uff0c\u907f\u514d\u8655\u7406\u539f\u59cb <code>.ipynb<\/code> JSON \u7684\u8907\u96dc\u6027\u3002<\/li>\n\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u8a2d\u8a08\u4e03\uff1aAgent Patterns \u7684\u62bd\u8c61\u5c64\u2014\u2014util.py \u7684\u6975\u7c21\u8a2d\u8a08<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Agent \u8a2d\u8a08\u6a21\u5f0f\u7bc4\u4f8b\u4e2d\u7684 <code>util.py<\/code> \u53ea\u6709\u5169\u500b\u51fd\u5f0f\uff0c\u4f46\u9ad4\u73fe\u4e86\u91cd\u8981\u7684\u62bd\u8c61\u539f\u5247\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\/blob\/main\/patterns\/agents\/util.py\"><code>patterns\/agents\/util.py<\/code><\/a> \u2014 Agent \u6a21\u5f0f\u7684\u5171\u7528\u5de5\u5177\u5c64<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">def llm_call(prompt: str, <span class=\"hljs-attr\">system_prompt<\/span>: str = <span class=\"hljs-string\">\"\"<\/span>, model=<span class=\"hljs-string\">\"claude-sonnet-4-5\"<\/span>) -&gt; str:\n    <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"Calls the model with the given prompt and returns the response.\"<\/span><span class=\"hljs-string\">\"\"<\/span>\n    client = Anthropic(api_key=os.environ&#91;<span class=\"hljs-string\">\"ANTHROPIC_API_KEY\"<\/span>])\n    messages = &#91;{<span class=\"hljs-string\">\"role\"<\/span>: <span class=\"hljs-string\">\"user\"<\/span>, <span class=\"hljs-string\">\"content\"<\/span>: prompt}]\n    response = client.messages.create(\n        model=model, max_tokens=<span class=\"hljs-number\">4096<\/span>, system=system_prompt,\n        messages=messages, temperature=<span class=\"hljs-number\">0.1<\/span>,\n    )\n    <span class=\"hljs-keyword\">return<\/span> response.content&#91;<span class=\"hljs-number\">0<\/span>].text\n\ndef extract_xml(text: str, <span class=\"hljs-attr\">tag<\/span>: str) -&gt; str:\n    <span class=\"hljs-string\">\"\"<\/span><span class=\"hljs-string\">\"Extracts the content of the specified XML tag from the given text.\"<\/span><span class=\"hljs-string\">\"\"<\/span>\n    match = re.search(f<span class=\"hljs-string\">\"&lt;{tag}&gt;(.*?)&lt;\/{tag}&gt;\"<\/span>, text, re.DOTALL)\n    <span class=\"hljs-keyword\">return<\/span> match.group(<span class=\"hljs-number\">1<\/span>) <span class=\"hljs-keyword\">if<\/span> match <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-string\">\"\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><code>llm_call<\/code> \u5c07 API \u547c\u53eb\u62bd\u8c61\u70ba\u300cprompt in, text out\u300d\u7684\u7d14\u51fd\u5f0f\uff0c\u8b93 notebook \u4e2d\u7684 agent \u6a21\u5f0f\u7bc4\u4f8b\uff08Prompt Chaining\u3001Routing\u3001Parallelization\uff09\u80fd\u805a\u7126\u5728\u6a21\u5f0f\u672c\u8eab\u800c\u975e API \u7d30\u7bc0\u3002<code>extract_xml<\/code> \u5247\u662f\u4e00\u500b\u8f15\u91cf\u7684\u7d50\u69cb\u5316\u8f38\u51fa\u89e3\u6790\u5668\u2014\u2014\u7528 XML tag \u4f86\u7d50\u69cb\u5316 LLM \u56de\u61c9\uff0c\u6bd4 JSON \u66f4\u5bec\u5bb9\u3001\u66f4\u4e0d\u5bb9\u6613\u56e0\u683c\u5f0f\u554f\u984c\u800c\u5931\u6557\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u8a2d\u8a08\u516b\uff1aPrompt \u5206\u96e2\u539f\u5247\u2014\u2014Agent \u5b9a\u7fa9\u8207 Prompt \u6a94\u6848\u7684\u89e3\u8026<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Agent patterns \u7bc4\u4f8b\u5c07 prompt \u6a94\u6848\u7368\u7acb\u5230 <code>prompts\/<\/code> \u76ee\u9304\uff0c\u800c\u975e\u5d4c\u5165 notebook code cells \u4e2d\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\/blob\/main\/patterns\/agents\/prompts\/research_lead_agent.md\"><code>patterns\/agents\/prompts\/research_lead_agent.md<\/code><\/a> \u2014 \u7814\u7a76\u4e3b\u5c0e agent \u7684 system prompt<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">research_process<\/span>&gt;<\/span>\nFollow this process to break down the user's question:\n1. **Assessment and breakdown**: Analyze and break down the user's prompt\n2. **Query type determination**: Explicitly state your reasoning on what type:\n   * **Depth-first query**: When the problem requires multiple perspectives\n   * **Breadth-first query**: When the problem can be broken into distinct sub-questions\n   * **Straightforward query**: When the problem is focused, well-defined\n3. **Detailed research plan development**: Based on the query type, develop a plan\n4. **Methodical plan execution**: Execute the plan fully, using parallel subagents\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">research_process<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">subagent_count_guidelines<\/span>&gt;<\/span>\n1. Simple\/Straightforward queries: create 1 subagent\n2. Standard complexity: 2-3 subagents\n3. Medium complexity: 3-5 subagents\n4. High complexity: 5-10 subagents (maximum 20)\n**IMPORTANT**: Never create more than 20 subagents unless strictly necessary.\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">subagent_count_guidelines<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u9019\u500b prompt \u8a2d\u8a08\u9ad4\u73fe\u4e86\u5e7e\u500b\u9ad8\u7d1a\u6280\u5de7\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li><strong>\u67e5\u8a62\u5206\u985e\u7b56\u7565<\/strong>\uff08Depth-first \/ Breadth-first \/ Straightforward\uff09\uff1a\u5148\u5224\u65b7\u554f\u984c\u985e\u578b\uff0c\u518d\u6c7a\u5b9a\u7814\u7a76\u7b56\u7565\u548c subagent \u6578\u91cf\u3002<\/li>\n\n\n<li><strong>\u8cc7\u6e90\u9810\u7b97\u6a5f\u5236<\/strong>\uff1a\u660e\u78ba\u9650\u5236 subagent \u6578\u91cf\u4e0a\u9650\uff0820\uff09\uff0c\u4e26\u6309\u554f\u984c\u8907\u96dc\u5ea6\u5206\u7d1a\u3002<\/li>\n\n\n<li><strong>XML tag \u7d50\u69cb\u5316<\/strong>\uff1a\u7528 <code>&lt;research_process&gt;<\/code>\u3001<code>&lt;delegation_instructions&gt;<\/code> \u7b49 XML tag \u7d44\u7e54 prompt \u7684\u4e0d\u540c\u6bb5\u843d\uff0c\u8b93 prompt \u81ea\u8eab\u6210\u70ba\u53ef\u7dad\u8b77\u7684\u7d50\u69cb\u5316\u6587\u4ef6\u3002<\/li>\n\n\n<li><strong>\u53cd\u6a21\u5f0f\u9632\u8b77<\/strong>\uff1a\u300cNEVER create a subagent to generate the final report\u300d\u2014\u2014\u9632\u6b62 agent \u628a\u6838\u5fc3\u4efb\u52d9\u59d4\u8a17\u51fa\u53bb\u3002<\/li>\n\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u8a2d\u8a08\u4e5d\uff1aMemory Tool Handler\u2014\u2014\u8def\u5f91\u5b89\u5168\u8207 Command Pattern<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>tool_use\/memory_tool.py<\/code> \u5be6\u4f5c\u4e86\u4e00\u500b\u5b8c\u6574\u7684\u8a18\u61b6\u9ad4\u5de5\u5177\u8655\u7406\u5668\uff0c\u5c55\u793a\u4e86 Claude Tool Use \u7684 client-side \u5be6\u4f5c\u6700\u4f73\u5be6\u8e10\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\/blob\/main\/tool_use\/memory_tool.py\"><code>tool_use\/memory_tool.py<\/code><\/a> \u2014 \u8a18\u61b6\u9ad4\u5de5\u5177\u7684 client-side \u5be6\u4f5c<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\"><span><code class=\"hljs\">class MemoryToolHandler:\n    def _validate_path(self, path: str) -&gt; Path:\n        \"\"\"Validate and resolve memory paths to prevent directory traversal attacks.\"\"\"\n        if not path.startswith(\"\/memories\"):\n            raise ValueError(f\"Path must start with \/memories, got: {path}.\")\n\n        relative_path = path&#91;len(\"\/memories\"):].lstrip(\"\/\")\n        full_path = (self.memory_root \/ relative_path).resolve()\n\n        try:\n            full_path.relative_to(self.memory_root.resolve())\n        except ValueError as e:\n            raise ValueError(\n                f\"Path '{path}' would escape \/memories directory.\"\n            ) from e\n        return full_path\n\n    def execute(self, **params: Any) -&gt; dict&#91;str, str]:\n        \"\"\"Execute a memory tool command.\"\"\"\n        command = params.get(\"command\")\n        try:\n            if command == \"view\": return self._view(params)\n            elif command == \"create\": return self._create(params)\n            elif command == \"str_replace\": return self._str_replace(params)\n            elif command == \"insert\": return self._insert(params)\n            elif command == \"delete\": return self._delete(params)\n            elif command == \"rename\": return self._rename(params)\n        except ValueError as e:\n            return {\"error\": str(e)}\n<\/code><\/span><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u9019\u88e1\u6709\u5169\u500b\u6838\u5fc3\u8a2d\u8a08\u7406\u5ff5\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li><strong>\u8def\u5f91\u5b89\u5168<\/strong>\uff1a<code>_validate_path<\/code> \u5148\u6aa2\u67e5\u524d\u7db4\u3001\u7136\u5f8c resolve \u7d55\u5c0d\u8def\u5f91\u3001\u6700\u5f8c\u7528 <code>relative_to<\/code> \u78ba\u8a8d\u8def\u5f91\u6c92\u6709\u9003\u9038\u51fa sandbox\u3002\u9019\u662f\u9632\u6b62 directory traversal \u653b\u64ca\u7684\u6a19\u6e96\u505a\u6cd5\uff0c\u5728 AI tool use \u5834\u666f\u4e2d\u5c24\u5176\u91cd\u8981\u2014\u2014\u56e0\u70ba\u8def\u5f91\u662f\u7531 LLM \u751f\u6210\u7684\uff0c\u4e0d\u53ef\u4fe1\u3002<\/li>\n\n\n<li><strong>Command Pattern<\/strong>\uff1a<code>execute()<\/code> \u65b9\u6cd5\u5c07\u4e0d\u540c\u64cd\u4f5c\uff08view\u3001create\u3001str_replace \u7b49\uff09\u7d71\u4e00\u5230\u4e00\u500b\u5165\u53e3\u9ede\uff0c\u6bcf\u500b\u64cd\u4f5c\u8fd4\u56de <code>dict[str, str]<\/code>\uff08\u542b success \u6216 error key\uff09\uff0c\u70ba Claude \u63d0\u4f9b\u4e00\u81f4\u7684\u56de\u61c9\u683c\u5f0f\u3002<\/li>\n\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u8a2d\u8a08\u5341\uff1aCI \u4e2d\u7684 AI \u5b88\u9580\u54e1\u2014\u2014\u5206\u5c64\u5b89\u5168\u6a21\u578b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub Actions workflows \u8a2d\u8a08\u4e86\u4e00\u500b\u7cbe\u5de7\u7684\u5206\u5c64\u5b89\u5168\u6a21\u578b\uff0c\u6c7a\u5b9a\u300c\u8ab0\u80fd\u89f8\u767c\u4ec0\u9ebc\u300d\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\/blob\/main\/.github\/workflows\/notebook-quality.yml\"><code>.github\/workflows\/notebook-quality.yml<\/code><\/a> \u2014 Notebook \u54c1\u8cea\u6aa2\u67e5 CI workflow<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Only run for internal contributors (not forks) unless manually triggered<\/span>\n<span class=\"hljs-keyword\">if<\/span>: github.event_name == <span class=\"hljs-string\">'workflow_dispatch'<\/span> ||\n    github.event.pull_request.head.repo.full_name == github.repository\n\n<span class=\"hljs-comment\"># API tests only for maintainers (costs money)<\/span>\n- name: Execute notebooks (API Testing)\n  <span class=\"hljs-keyword\">if<\/span>: |\n    github.event_name == <span class=\"hljs-string\">'push'<\/span> ||\n    github.event.pull_request.author_association == <span class=\"hljs-string\">'MEMBER'<\/span> ||\n    github.event.pull_request.author_association == <span class=\"hljs-string\">'OWNER'<\/span>\n\n<span class=\"hljs-comment\"># Mock testing for external contributors<\/span>\n- name: Execute notebooks (Mock Testing)\n  <span class=\"hljs-keyword\">if<\/span>: |\n    github.event_name == <span class=\"hljs-string\">'pull_request'<\/span> &amp;&amp;\n    github.event.pull_request.author_association != <span class=\"hljs-string\">'MEMBER'<\/span> &amp;&amp;\n    github.event.pull_request.author_association != <span class=\"hljs-string\">'OWNER'<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">\u4e09\u5c64\u7b56\u7565\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>\u5167\u90e8\u6210\u54e1<\/strong>\uff1a\u5b8c\u6574 API \u6e2c\u8a66\uff08\u82b1\u8cbb API credits\uff09<\/li>\n\n\n<li><strong>\u5916\u90e8\u8ca2\u737b\u8005<\/strong>\uff1a\u7d50\u69cb\u9a57\u8b49 + Mock \u6e2c\u8a66\uff08\u96f6\u6210\u672c\uff09<\/li>\n\n\n<li><strong>\u624b\u52d5\u89f8\u767c<\/strong>\uff1a<code>workflow_dispatch<\/code> \u4f5c\u70ba\u9003\u751f\u8259\u53e3<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u7576 notebook \u9a57\u8b49\u767c\u73fe\u554f\u984c\u6642\uff0cworkflow \u4e0d\u53ea\u662f\u8b93 CI \u5931\u6557\u2014\u2014\u5b83\u6703\u547c\u53eb <code>claude-code-action<\/code> \u8b80\u53d6\u9a57\u8b49\u8f38\u51fa\uff0c\u751f\u6210\u4e00\u689d\u53cb\u5584\u7684 PR comment\uff0c\u89e3\u91cb\u554f\u984c\u6240\u5728\u548c\u4fee\u5fa9\u65b9\u5f0f\u3002AI \u4e0d\u53ea\u662f\u8a55\u5224\u8005\uff0c\u4e5f\u662f\u8001\u5e2b\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prompt \u8a2d\u8a08\u89e3\u8b80<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5009\u5eab\u5305\u542b\u5169\u5957\u7cbe\u5fc3\u8a2d\u8a08\u7684 prompt \u9ad4\u7cfb\uff0c\u5206\u5225\u670d\u52d9\u4e0d\u540c\u76ee\u7684\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u7814\u7a76 Agent \u7684 Prompt \u67b6\u69cb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\/blob\/main\/patterns\/agents\/prompts\/research_lead_agent.md\"><code>patterns\/agents\/prompts\/research_lead_agent.md<\/code><\/a> \u2014 \u7814\u7a76\u4e3b\u5c0e agent \u7684\u5b8c\u6574 system prompt<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Research lead agent \u7684 prompt \u9577\u9054 400+ \u884c\uff0c\u7d50\u69cb\u70ba\uff1a<code>&lt;research_process&gt;<\/code> -> <code>&lt;subagent_count_guidelines&gt;<\/code> -> <code>&lt;delegation_instructions&gt;<\/code> -> <code>&lt;answer_formatting&gt;<\/code> -> <code>&lt;important_guidelines&gt;<\/code>\u3002\u503c\u5f97\u5b78\u7fd2\u7684\u8a2d\u8a08\u6280\u5de7\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>\u5206\u985e\u6c7a\u7b56\u6a39<\/strong>\uff1a\u5148\u8b58\u5225\u67e5\u8a62\u985e\u578b\uff08depth-first\/breadth-first\/straightforward\uff09\uff0c\u518d\u5339\u914d\u5c0d\u61c9\u7684\u7814\u7a76\u7b56\u7565\u3002\u6bcf\u500b\u985e\u578b\u90fd\u63d0\u4f9b\u4e86\u5177\u9ad4\u7684 example\uff0c\u964d\u4f4e LLM \u7684\u5224\u65b7\u4e0d\u78ba\u5b9a\u6027\u3002<\/li>\n\n\n<li><strong>\u8cc7\u6e90\u63a7\u7ba1<\/strong>\uff1a\u660e\u78ba\u8a2d\u5b9a subagent \u6578\u91cf\u4e0a\u9650\uff0c\u4e26\u89e3\u91cb\u70ba\u4ec0\u9ebc\u2014\u2014\u300cMore subagents = more overhead. Only add subagents when they provide distinct value.\u300d<\/li>\n\n\n<li><strong>OODA \u5faa\u74b0<\/strong>\uff1asubagent prompt \u4e2d\u8981\u6c42\u57f7\u884c Observe-Orient-Decide-Act \u5faa\u74b0\uff0c\u9019\u662f\u8ecd\u4e8b\u6c7a\u7b56\u7406\u8ad6\u5728 AI agent \u4e2d\u7684\u61c9\u7528\u3002<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Citations Agent \u7684\u7cbe\u78ba\u5ea6\u8a2d\u8a08<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\/blob\/main\/patterns\/agents\/prompts\/citations_agent.md\"><code>patterns\/agents\/prompts\/citations_agent.md<\/code><\/a> \u2014 \u5f15\u7528\u6a19\u8a3b agent \u7684 prompt<\/p>\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">**Rules:**\n- <span class=\"hljs-keyword\">Do<\/span> NOT modify the &lt;synthesized_text&gt; in any way - keep all content <span class=\"hljs-number\">100<\/span>% identical\n- Pay careful attention to whitespace: <span class=\"hljs-keyword\">DO<\/span> NOT add <span class=\"hljs-keyword\">or<\/span> remove any whitespace\n- ONLY add citations where the source documents directly support claims\n\n**Citation guidelines:**\n- Avoid citing unnecessarily: Not every statement needs a citation\n- Cite meaningful semantic units: Citations should span complete thoughts\n- Minimize sentence fragmentation: Avoid multiple citations within a single sentence\n- No redundant citations close to each other\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Citation agent \u7684\u8a2d\u8a08\u6838\u5fc3\u662f\u300c\u7cbe\u78ba\u5ea6\u512a\u5148\u300d\u2014\u2014\u5b83\u4e0d\u7522\u751f\u65b0\u5167\u5bb9\uff0c\u53ea\u5728\u65e2\u6709\u6587\u672c\u4e0a\u6dfb\u52a0\u5f15\u7528\u6a19\u8a18\u3002\u898f\u5247\u7684\u56b4\u683c\u7a0b\u5ea6\uff08\u300ckeep all content 100% identical\u300d\u3001\u300cDO NOT add or remove any whitespace\u300d\uff09\u53cd\u6620\u4e86 Anthropic \u5c0d LLM \u8f38\u51fa\u53ef\u63a7\u6027\u7684\u8ffd\u6c42\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u8a2d\u8a08\u7406\u5ff5\u8403\u53d6<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>AI \u4f5c\u70ba CI \u53c3\u8207\u8005\uff0c\u800c\u975e\u65c1\u89c0\u8005<\/strong> \u2014 \u50b3\u7d71 CI \u53ea\u8dd1 lint \u548c test\uff0c\u9019\u500b\u5009\u5eab\u8b93 Claude \u76f4\u63a5\u53c3\u8207 PR \u5be9\u67e5\u3001\u6a21\u578b\u7248\u672c\u9a57\u8b49\u3001\u9023\u7d50\u54c1\u8cea\u6aa2\u67e5\u3002slash commands \u7684 CI\/\u672c\u5730\u96d9\u7528\u8a2d\u8a08\uff0c\u78ba\u4fdd\u958b\u767c\u8005\u548c CI \u7528\u540c\u4e00\u5957\u908f\u8f2f\u3002\u9019\u500b\u6a21\u5f0f\u53ef\u4ee5\u76f4\u63a5\u61c9\u7528\u5230\u4efb\u4f55\u9700\u8981 AI-in-the-loop \u54c1\u8cea\u63a7\u5236\u7684\u5c08\u6848\u3002<\/li>\n\n\n<li><strong>Allowed-tools \u4f5c\u70ba\u5b89\u5168\u908a\u754c<\/strong> \u2014 \u6bcf\u500b command \u548c agent \u90fd\u5b9a\u7fa9\u4e86\u7cbe\u78ba\u7684\u5de5\u5177\u767d\u540d\u55ae\uff08\u5982 <code>Bash(gh pr comment:*)<\/code> \u800c\u975e <code>Bash(*)<\/code>\uff09\u3002\u9019\u4e0d\u53ea\u662f\u5b89\u5168\u8003\u91cf\uff0c\u66f4\u662f\u8077\u8cac\u908a\u754c\u7684\u660e\u78ba\u5316\u2014\u2014reviewer \u4e0d\u8a72\u6709 merge \u7684\u6b0a\u9650\u3002\u5728\u8a2d\u8a08 AI agent \u7cfb\u7d71\u6642\uff0c\u6700\u5c0f\u6b0a\u9650\u539f\u5247\u61c9\u8a72\u5f9e\u5de5\u5177\u5c64\u958b\u59cb\u3002<\/li>\n\n\n<li><strong>\u6559\u5b78\u8a2d\u8a08\u65b9\u6cd5\u8ad6\u7684\u5de5\u7a0b\u5316<\/strong> \u2014 TLO\/ELO \u5b78\u7fd2\u76ee\u6a19\u9ad4\u7cfb\u3001\u300c\u554f\u984c\u5c0e\u5411\u800c\u975e\u6a5f\u5236\u5c0e\u5411\u300d\u7684\u5beb\u4f5c\u539f\u5247\u3001style guide \u4e2d\u7684 Good\/Bad \u5c0d\u6bd4\u7bc4\u4f8b\u2014\u2014\u9019\u4e9b\u6559\u5b78\u8a2d\u8a08\u7406\u5ff5\u88ab\u7de8\u78bc\u5230\u4e86 skill \u5b9a\u7fa9\u3001\u9a57\u8b49\u8173\u672c\u548c\u5be9\u67e5\u6e05\u55ae\u4e2d\u3002\u5982\u679c\u4f60\u4e5f\u5728\u7dad\u8b77\u6280\u8853\u6587\u4ef6\u5eab\uff0c\u5c07\u5beb\u4f5c\u6a19\u6e96\u5f9e\u300c\u6307\u5357\u300d\u8f49\u5316\u70ba\u300c\u53ef\u81ea\u52d5\u5316\u9a57\u8b49\u7684\u898f\u5247\u300d\u662f\u503c\u5f97\u501f\u93e1\u7684\u65b9\u5411\u3002<\/li>\n\n\n<li><strong>Registry \u4f5c\u70ba Single Source of Truth<\/strong> \u2014 \u7528 JSON Schema \u9a57\u8b49\u7684 <code>registry.yaml<\/code> \u53d6\u4ee3\u9b06\u6563\u7684 README \u5217\u8868\uff0c\u914d\u5408 <code>add-registry<\/code> slash command \u81ea\u52d5\u5316\u689d\u76ee\u751f\u6210\u3002\u9019\u500b\u6a21\u5f0f\u9069\u7528\u65bc\u4efb\u4f55\u9700\u8981\u7ba1\u7406\u5927\u91cf\u5167\u5bb9\/\u6a21\u7d44\u7684\u5c08\u6848\u2014\u2014\u4ee5 schema \u7d04\u675f\u7d50\u69cb\uff0c\u4ee5\u81ea\u52d5\u5316\u5de5\u5177\u964d\u4f4e\u4eba\u70ba\u932f\u8aa4\u3002<\/li>\n\n\n<li><strong>Prompt \u5206\u96e2\u8207\u7d50\u69cb\u5316<\/strong> \u2014 \u5c07 prompt \u5f9e\u7a0b\u5f0f\u78bc\u4e2d\u5206\u96e2\u5230\u7368\u7acb\u7684 <code>.md<\/code> \u6a94\u6848\uff0c\u7528 XML tag \u7d44\u7e54 prompt \u5167\u90e8\u7d50\u69cb\u3002\u9019\u8b93 prompt \u53ef\u4ee5\u88ab\u7248\u672c\u63a7\u5236\u3001\u88ab diff\u3001\u88ab\u7368\u7acb\u5be9\u67e5\u2014\u2014\u8ddf\u7a0b\u5f0f\u78bc\u4e00\u6a23\u5c0d\u5f85\u3002<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u5ef6\u4f38\u601d\u8003<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u9019\u500b\u5009\u5eab\u5c55\u793a\u7684\u6838\u5fc3\u601d\u60f3\u662f\uff1a<strong>\u7528\u7ba1\u7406\u7a0b\u5f0f\u78bc\u7684\u65b9\u5f0f\u7ba1\u7406\u5167\u5bb9<\/strong>\u3002\u7576\u4f60\u7dad\u8b77\u7684\u4e0d\u53ea\u662f\u7a0b\u5f0f\u78bc\uff0c\u9084\u6709\u6280\u8853\u6587\u4ef6\u3001\u6559\u5b78\u6750\u6599\u3001API \u7bc4\u4f8b\u6642\uff0c\u53ef\u4ee5\u501f\u9451\u4ee5\u4e0b\u505a\u6cd5\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li><strong>\u70ba AI \u5354\u4f5c\u8005\u5beb README<\/strong>\uff1a\u5982\u679c\u4f60\u7684\u5718\u968a\u4f7f\u7528 Claude Code \u6216\u985e\u4f3c\u5de5\u5177\uff0c\u5728 CLAUDE.md \u4e2d\u5b9a\u7fa9\u660e\u78ba\u7684\u898f\u5247\u3001\u6a21\u578b\u7248\u672c\u3001\u7981\u6b62\u4e8b\u9805\u3002\u4e0d\u8981\u5047\u8a2d AI \u6703\u5f9e\u7a0b\u5f0f\u78bc\u4e2d\u300c\u63a8\u65b7\u300d\u51fa\u898f\u7bc4\u3002<\/li>\n\n\n<li><strong>\u7d71\u4e00 CI \u8207\u672c\u5730\u7684\u54c1\u8cea\u6aa2\u67e5\u908f\u8f2f<\/strong>\uff1a\u5c07\u5be9\u67e5\u908f\u8f2f\u5b9a\u7fa9\u70ba slash commands \u6216 scripts\uff0c\u8b93\u958b\u767c\u8005\u5728\u672c\u5730\u53ef\u4ee5\u8dd1\u540c\u4e00\u5957\u6aa2\u67e5\uff0c\u800c\u975e\u53ea\u5728 CI \u4e2d\u624d\u767c\u73fe\u554f\u984c\u3002<\/li>\n\n\n<li><strong>\u6f38\u9032\u5f0f\u5b89\u5168\u6a21\u578b<\/strong>\uff1a\u91dd\u5c0d\u4e0d\u540c\u8ca2\u737b\u8005\u5c64\u7d1a\uff08maintainer vs. external contributor\uff09\u8a2d\u5b9a\u4e0d\u540c\u7684 CI \u884c\u70ba\u2014\u2014\u65e2\u4fdd\u8b77 API credits\uff0c\u53c8\u4e0d\u963b\u64cb\u793e\u7fa4\u53c3\u8207\u3002<\/li>\n\n\n<li><strong>\u5c07 Prompt \u7576\u7a0b\u5f0f\u78bc\u7ba1\u7406<\/strong>\uff1a\u653e\u5728\u7248\u672c\u63a7\u5236\u4e2d\u3001\u7528\u7d50\u69cb\u5316\u683c\u5f0f\uff08XML tags\uff09\u7d44\u7e54\u3001\u5206\u96e2\u5230\u7368\u7acb\u6a94\u6848\u3002Prompt \u7684\u54c1\u8cea\u76f4\u63a5\u5f71\u97ff agent \u7684\u884c\u70ba\uff0c\u503c\u5f97\u8ddf\u7522\u54c1\u7a0b\u5f0f\u78bc\u4e00\u6a23\u5c0d\u5f85\u3002<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Vibe Coding\uff1a\u628a\u89c0\u5ff5\u8b8a\u6210\u7a0b\u5f0f\u78bc<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0b\u662f\u4f60\u53ef\u4ee5\u76f4\u63a5\u7d66 AI \u7684 prompt \u6307\u4ee4\uff0c\u5c07\u672c\u6587\u4ecb\u7d39\u7684\u8a2d\u8a08\u89c0\u5ff5\u61c9\u7528\u5230\u4f60\u7684\u5c08\u6848\u4e2d\uff1a<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u70ba AI \u5354\u4f5c\u8005\u64b0\u5beb\u5c08\u6848\u5951\u7d04\uff08CLAUDE.md\uff09<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5834\u666f<\/strong>\uff1a\u4f60\u7684\u5718\u968a\u958b\u59cb\u4f7f\u7528 Claude Code \u6216\u5176\u4ed6 AI \u7de8\u78bc\u5de5\u5177\uff0c\u4f46 AI \u6bcf\u6b21\u90fd\u8981\u91cd\u65b0\u7406\u89e3\u5c08\u6848\u6163\u4f8b\uff0c\u7522\u51fa\u7684\u7a0b\u5f0f\u78bc\u98a8\u683c\u4e0d\u4e00\u81f4\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7d66 AI \u7684\u6307\u4ee4<\/strong>\uff1a<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u8acb\u5206\u6790\u6211\u7684\u5c08\u6848\u7d50\u69cb\u548c\u73fe\u6709\u7684\u8a2d\u5b9a\u6a94\uff08package.json \/ pyproject.toml \/ tsconfig.json \u7b49\uff09\uff0c\u70ba\u6211\u751f\u6210\u4e00\u4efd CLAUDE.md \u5c08\u6848\u5951\u7d04\u6587\u4ef6\u3002\u5167\u5bb9\u9700\u5305\u542b\uff1a<br>1. Key Rules \u6bb5\u843d\uff1a\u5217\u51fa 5-8 \u689d\u53ef\u6a5f\u5668\u57f7\u884c\u7684\u958b\u767c\u898f\u7bc4\uff08\u4e0d\u662f\u6a21\u7cca\u5efa\u8b70\uff09\uff0c\u5305\u62ec\u5957\u4ef6\u7ba1\u7406\u6307\u4ee4\u3001\u7a0b\u5f0f\u78bc\u98a8\u683c\u3001\u7981\u6b62\u4e8b\u9805<br>2. \u660e\u78ba\u5217\u51fa\u5c08\u6848\u4f7f\u7528\u7684 model \u7248\u672c\u6216\u91cd\u8981\u4f9d\u8cf4\u7248\u672c\u865f<br>3. \u5e38\u7528\u6307\u4ee4\u6bb5\u843d\uff1a\u5217\u51fa build\u3001test\u3001lint\u3001deploy \u7684\u5b8c\u6574\u547d\u4ee4<br>4. \u5c08\u6848\u67b6\u69cb\u6982\u89bd\uff1a\u7528\u6a39\u72c0\u5716\u8aaa\u660e\u76ee\u9304\u7d50\u69cb\u548c\u6bcf\u500b\u76ee\u9304\u7684\u8077\u8cac<br>5. \u4e0d\u80fd\u505a\u7684\u4e8b\u6e05\u55ae\uff1a\u5217\u51fa\u7d55\u5c0d\u7981\u6b62\u7684\u64cd\u4f5c\uff08\u4f8b\u5982\u4e0d\u8981\u76f4\u63a5\u7de8\u8f2f\u67d0\u4e9b\u81ea\u52d5\u751f\u6210\u7684\u6a94\u6848\u3001\u4e0d\u8981 commit .env\uff09<br><br>\u53c3\u8003 Claude Cookbooks \u7684 CLAUDE.md \u8a2d\u8a08\u6a21\u5f0f\uff1a\u6bcf\u689d\u898f\u5247\u90fd\u8981\u5177\u9ad4\u5230 AI \u53ef\u4ee5\u76f4\u63a5\u64da\u6b64\u5224\u65b7\u5c0d\u932f\uff0c\u800c\u975e\u300c\u76e1\u91cf\u4fdd\u6301\u4e00\u81f4\u300d\u9019\u7a2e\u6a21\u7cca\u63cf\u8ff0\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6548\u679c<\/strong>\uff1aAI \u6703\u6383\u63cf\u4f60\u7684\u5c08\u6848\u7d50\u69cb\uff0c\u7522\u51fa\u4e00\u4efd\u7d50\u69cb\u5316\u7684 CLAUDE.md\uff0c\u672a\u4f86\u6240\u6709 AI \u5354\u4f5c\u8005\uff08\u5305\u62ec CI \u4e2d\u7684 AI\uff09\u9032\u5165\u5c08\u6848\u6642\u90fd\u80fd\u7acb\u5373\u9075\u5b88\u4e00\u81f4\u7684\u898f\u7bc4\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u7528 Slash Command \u7d71\u4e00 CI \u8207\u672c\u5730\u7684\u54c1\u8cea\u6aa2\u67e5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5834\u666f<\/strong>\uff1a\u4f60\u60f3\u8b93 Claude Code \u5728\u672c\u5730\u548c GitHub Actions CI \u4e2d\u57f7\u884c\u76f8\u540c\u7684\u7a0b\u5f0f\u78bc\u5be9\u67e5\u908f\u8f2f\uff0c\u907f\u514d\u300c\u672c\u5730\u901a\u904e\u3001CI \u624d\u767c\u73fe\u554f\u984c\u300d\u7684\u60c5\u6cc1\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7d66 AI \u7684\u6307\u4ee4<\/strong>\uff1a<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u6211\u60f3\u70ba\u5c08\u6848\u5efa\u7acb\u4e00\u5957 Claude Code \u7684 slash command \u9ad4\u7cfb\uff0c\u5be6\u73fe CI \u8207\u672c\u5730\u5171\u7528\u540c\u4e00\u5957\u5be9\u67e5\u908f\u8f2f\u3002\u8acb\u5e6b\u6211\uff1a<br>1. \u5728 <code>.claude\/commands\/<\/code> \u76ee\u9304\u5efa\u7acb\u4e00\u500b <code>review.md<\/code> slash command\uff0c\u7528 frontmatter \u5b9a\u7fa9 allowed-tools\uff08\u63a1\u7528\u6700\u5c0f\u6b0a\u9650\u539f\u5247\uff0c\u53ea\u6388\u4e88\u8b80\u53d6\u548c\u641c\u5c0b\u76f8\u95dc\u5de5\u5177\uff0c\u53c3\u8003 Claude Cookbooks \u7684 allowed-tools \u5b89\u5168\u908a\u754c\u8a2d\u8a08\uff09<br>2. \u5728\u547d\u4ee4\u5167\u5bb9\u4e2d\u5b9a\u7fa9\u5be9\u67e5\u6e05\u55ae\uff0c\u6db5\u84cb\uff1a[\u66ff\u63db\u70ba\u4f60\u7684\u5c08\u6848\u95dc\u6ce8\u9805\u76ee\uff0c\u4f8b\u5982\uff1a\u578b\u5225\u5b89\u5168\u3001\u932f\u8aa4\u8655\u7406\u3001\u6e2c\u8a66\u8986\u84cb\u7387\u3001\u547d\u540d\u6163\u4f8b]<br>3. \u5efa\u7acb\u5c0d\u61c9\u7684 <code>.github\/workflows\/claude-review.yml<\/code>\uff0c\u4f7f\u7528 <code>anthropics\/claude-code-action@v1<\/code> \u8abf\u7528\u540c\u4e00\u500b slash command<br>4. CI workflow \u4e2d\u9700\u5340\u5206\u5167\u90e8\u6210\u54e1\uff08\u5b8c\u6574\u5be9\u67e5\uff09\u548c\u5916\u90e8\u8ca2\u737b\u8005\uff08\u50c5\u7d50\u69cb\u6aa2\u67e5\uff09\uff0c\u63a1\u7528 Claude Cookbooks \u7684\u5206\u5c64\u5b89\u5168\u6a21\u578b\u8a2d\u8a08<br><br>\u6bcf\u500b command \u7684 allowed-tools \u8981\u7cbe\u78ba\u5230\u64cd\u4f5c\u5c64\u7d1a\uff08\u5982 <code>Bash(gh pr comment:*)<\/code> \u800c\u975e <code>Bash(*)<\/code>\uff09\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6548\u679c<\/strong>\uff1aAI \u6703\u751f\u6210\u4e00\u7d44 slash command \u5b9a\u7fa9\u6a94\u548c\u5c0d\u61c9\u7684 CI workflow\uff0c\u958b\u767c\u8005\u5728\u672c\u5730\u8f38\u5165 <code>\/review<\/code> \u548c CI \u81ea\u52d5\u89f8\u767c\u6642\u57f7\u884c\u5b8c\u5168\u76f8\u540c\u7684\u5be9\u67e5\u908f\u8f2f\uff0c\u4e26\u4e14\u6bcf\u500b\u89d2\u8272\u53ea\u6709\u6700\u5c0f\u5fc5\u8981\u6b0a\u9650\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u7528 JSON Schema \u5efa\u7acb\u5167\u5bb9\u76ee\u9304\u7ba1\u7406\u7cfb\u7d71<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5834\u666f<\/strong>\uff1a\u4f60\u7684\u5c08\u6848\u7ba1\u7406\u5927\u91cf\u5167\u5bb9\uff08API \u7bc4\u4f8b\u3001\u6559\u5b78\u6587\u4ef6\u3001\u8a2d\u5b9a\u7bc4\u672c\u7b49\uff09\uff0c\u76ee\u524d\u7528 README \u624b\u52d5\u5217\u8868\u7ba1\u7406\uff0c\u7d93\u5e38\u51fa\u73fe\u683c\u5f0f\u4e0d\u4e00\u81f4\u6216\u907a\u6f0f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7d66 AI \u7684\u6307\u4ee4<\/strong>\uff1a<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u6211\u7684\u5c08\u6848\u4e2d\u6709 [\u66ff\u63db\u70ba\u4f60\u7684\u5167\u5bb9\u985e\u578b\uff0c\u4f8b\u5982\uff1aAPI \u7bc4\u4f8b notebook \/ \u8a2d\u5b9a\u7bc4\u672c \/ \u6559\u5b78\u6587\u4ef6] \u9700\u8981\u7d71\u4e00\u7ba1\u7406\u3002\u8acb\u53c3\u8003 Claude Cookbooks \u7684 Registry + JSON Schema \u8a2d\u8a08\u6a21\u5f0f\uff0c\u5e6b\u6211\u5efa\u7acb\uff1a<br>1. \u4e00\u500b <code>registry.yaml<\/code> \u6a94\u6848\uff0c\u70ba\u6bcf\u500b\u5167\u5bb9\u9805\u76ee\u5b9a\u7fa9\u7d50\u69cb\u5316\u689d\u76ee\uff08title\u3001description\u3001path\u3001categories\u3001authors\u3001date\uff09<br>2. \u4e00\u500b <code>registry_schema.json<\/code>\uff0c\u7528 JSON Schema \u7d04\u675f registry \u7684\u7d50\u69cb\uff0c\u7279\u5225\u662f\u7528 <code>enum<\/code> \u9650\u5b9a\u5206\u985e\u8a5e\u5f59\u8868\uff0c\u9632\u6b62\u5206\u985e\u540d\u7a31\u6df7\u4e82<br>3. \u4e00\u500b CI \u9a57\u8b49\u6b65\u9a5f\uff0c\u5728 PR \u6642\u81ea\u52d5\u6aa2\u67e5 registry.yaml \u662f\u5426\u7b26\u5408 schema<br>4. \uff08\u53ef\u9078\uff09\u4e00\u500b <code>.claude\/commands\/add-registry.md<\/code> slash command\uff0c\u8b93 Claude Code \u81ea\u52d5\u8b80\u53d6\u65b0\u589e\u5167\u5bb9\u4e26\u751f\u6210\u7b26\u5408 schema \u7684 registry \u689d\u76ee<br><br>\u5206\u985e\u8a5e\u5f59\u8868\u5148\u5b9a\u7fa9\u4ee5\u4e0b\u985e\u5225\uff1a[\u66ff\u63db\u70ba\u4f60\u7684\u5206\u985e]\u3002schema \u8981\u8a2d\u5b9a required fields \u78ba\u4fdd\u6bcf\u7b46\u8a18\u9304\u5b8c\u6574\u3002<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6548\u679c<\/strong>\uff1aAI \u6703\u5efa\u7acb\u5b8c\u6574\u7684 registry \u7ba1\u7406\u7cfb\u7d71\uff0c\u6240\u6709\u5167\u5bb9\u7d22\u5f15\u90fd\u6709 schema \u9a57\u8b49\uff0c\u65b0\u589e\u5167\u5bb9\u6642\u53ef\u4ee5\u81ea\u52d5\u5316\u751f\u6210\u689d\u76ee\uff0c\u907f\u514d\u4eba\u70ba\u932f\u8aa4\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5be6\u4f5c Tool Use \u7684\u8def\u5f91\u5b89\u5168\u9a57\u8b49<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5834\u666f<\/strong>\uff1a\u4f60\u6b63\u5728\u958b\u767c\u8b93 AI agent \u64cd\u4f5c\u6a94\u6848\u7cfb\u7d71\u7684\u5de5\u5177\uff08Tool Use\uff09\uff0c\u9700\u8981\u9632\u6b62 LLM \u751f\u6210\u7684\u8def\u5f91\u9003\u9038\u51fa\u9810\u671f\u76ee\u9304\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7d66 AI \u7684\u6307\u4ee4<\/strong>\uff1a<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u6211\u6b63\u5728\u5be6\u4f5c\u4e00\u500b\u8b93 Claude \u64cd\u4f5c\u7684\u81ea\u8a02\u5de5\u5177\uff0c\u9700\u8981\u8655\u7406\u6a94\u6848\u8def\u5f91\u3002\u8acb\u53c3\u8003 Claude Cookbooks \u4e2d Memory Tool Handler \u7684\u8def\u5f91\u5b89\u5168\u8a2d\u8a08\u548c Command Pattern\uff0c\u5e6b\u6211\u5be6\u4f5c\uff1a<br>1. \u4e00\u500b <code>_validate_path()<\/code> \u65b9\u6cd5\uff1a\u5148\u6aa2\u67e5\u8def\u5f91\u524d\u7db4\u662f\u5426\u5728\u5141\u8a31\u7bc4\u570d\u5167\uff0c\u7136\u5f8c\u7528 <code>Path.resolve()<\/code> \u89e3\u6790\u7d55\u5c0d\u8def\u5f91\uff0c\u6700\u5f8c\u7528 <code>relative_to()<\/code> \u78ba\u8a8d\u8def\u5f91\u6c92\u6709\u9003\u9038\u51fa sandbox \u76ee\u9304\u3002\u9019\u4e09\u6b65\u9a57\u8b49\u7f3a\u4e00\u4e0d\u53ef\uff0c\u662f\u9632\u6b62 directory traversal \u653b\u64ca\u7684\u6a19\u6e96\u505a\u6cd5\u3002<br>2. \u4e00\u500b <code>execute()<\/code> \u5165\u53e3\u65b9\u6cd5\uff1a\u63a1\u7528 Command Pattern\uff0c\u5c07\u4e0d\u540c\u64cd\u4f5c\uff08view\u3001create\u3001update\u3001delete\uff09\u7d71\u4e00\u5230\u4e00\u500b\u5165\u53e3\u9ede<br>3. \u6bcf\u500b\u64cd\u4f5c\u90fd\u8fd4\u56de\u4e00\u81f4\u7684 <code>dict[str, str]<\/code> \u683c\u5f0f\uff08\u5305\u542b success \u6216 error key\uff09\uff0c\u65b9\u4fbf Claude \u89e3\u6790\u5de5\u5177\u56de\u61c9<br>4. \u6240\u6709 ValueError \u7d71\u4e00\u5728 execute() \u5c64\u6355\u7372\u4e26\u8f49\u70ba error \u56de\u61c9\uff0c\u4e0d\u8b93\u4f8b\u5916\u6d29\u6f0f\u5230 Claude<br><br>\u6211\u7684 sandbox \u6839\u76ee\u9304\u662f\uff1a[\u66ff\u63db\u70ba\u4f60\u7684\u76ee\u9304\u8def\u5f91]<br>\u9700\u8981\u652f\u63f4\u7684\u64cd\u4f5c\u6709\uff1a[\u66ff\u63db\u70ba\u4f60\u9700\u8981\u7684\u64cd\u4f5c]<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6548\u679c<\/strong>\uff1aAI \u6703\u751f\u6210\u4e00\u500b\u5b89\u5168\u7684\u5de5\u5177\u8655\u7406\u5668\uff0c\u5305\u542b\u4e09\u5c64\u8def\u5f91\u9a57\u8b49\u3001\u7d71\u4e00\u7684 command dispatch\u3001\u4e00\u81f4\u7684\u56de\u61c9\u683c\u5f0f\uff0c\u9069\u5408\u4f5c\u70ba\u4efb\u4f55 AI tool use \u5be6\u4f5c\u7684\u5b89\u5168\u57fa\u5e95\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5c07 Prompt \u5206\u96e2\u70ba\u53ef\u7248\u63a7\u7684\u7368\u7acb\u6a94\u6848<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5834\u666f<\/strong>\uff1a\u4f60\u7684 AI agent \u5c08\u6848\u4e2d\uff0csystem prompt \u90fd\u5beb\u6b7b\u5728\u7a0b\u5f0f\u78bc\u88e1\uff0c\u96e3\u4ee5\u8ffd\u8e64\u8b8a\u66f4\u3001\u9032\u884c A\/B \u6e2c\u8a66\u3001\u6216\u8b93\u975e\u5de5\u7a0b\u5e2b\u53c3\u8207 prompt \u8abf\u6574\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7d66 AI \u7684\u6307\u4ee4<\/strong>\uff1a<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u8acb\u5e6b\u6211\u91cd\u69cb\u5c08\u6848\u4e2d\u7684 prompt \u7ba1\u7406\u65b9\u5f0f\uff0c\u63a1\u7528 Claude Cookbooks \u7684 Prompt \u5206\u96e2\u539f\u5247\uff1a<br>1. \u5c07\u6240\u6709\u5d4c\u5165\u5728\u7a0b\u5f0f\u78bc\u4e2d\u7684 system prompt \u62bd\u53d6\u5230 <code>prompts\/<\/code> \u76ee\u9304\u4e0b\u7684\u7368\u7acb <code>.md<\/code> \u6a94\u6848<br>2. \u6bcf\u500b prompt \u6a94\u6848\u5167\u90e8\u7528 XML tag \u7d44\u7e54\u4e0d\u540c\u6bb5\u843d\uff08\u4f8b\u5982 <code>&lt;role&gt;<\/code>\u3001<code>&lt;instructions&gt;<\/code>\u3001<code>&lt;constraints&gt;<\/code>\u3001<code>&lt;output_format&gt;<\/code>\uff09\uff0c\u8b93 prompt \u81ea\u8eab\u6210\u70ba\u7d50\u69cb\u5316\u6587\u4ef6<br>3. \u5728\u7a0b\u5f0f\u78bc\u4e2d\u5efa\u7acb\u4e00\u500b <code>load_prompt(name: str) -&gt; str<\/code> \u5de5\u5177\u51fd\u5f0f\uff0c\u8ca0\u8cac\u8b80\u53d6\u548c\u5feb\u53d6 prompt \u6a94\u6848<br>4. \u5982\u679c prompt \u4e2d\u6709\u9700\u8981\u52d5\u614b\u66ff\u63db\u7684\u90e8\u5206\uff0c\u7528 <code>{{variable_name}}<\/code> \u4f54\u4f4d\u7b26\u6a19\u8a18\uff0cload_prompt \u652f\u63f4 keyword arguments \u66ff\u63db<br><br>\u76ee\u524d\u6211\u7684 prompt \u5206\u6563\u5728\u9019\u4e9b\u6a94\u6848\u4e2d\uff1a[\u66ff\u63db\u70ba\u4f60\u7684\u6a94\u6848\u8def\u5f91]<br>\u6bcf\u500b prompt \u7684\u7528\u9014\u662f\uff1a[\u7c21\u8ff0\u6bcf\u500b prompt \u7684\u529f\u80fd]<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6548\u679c<\/strong>\uff1aAI \u6703\u5c07\u6563\u843d\u5728\u7a0b\u5f0f\u78bc\u5404\u8655\u7684 prompt \u7d71\u4e00\u62bd\u53d6\u5230\u7368\u7acb\u6a94\u6848\uff0c\u7528 XML tag \u7d50\u69cb\u5316\u7d44\u7e54\uff0c\u4e26\u5efa\u7acb\u8f09\u5165\u5de5\u5177\u51fd\u5f0f\u3002\u4e4b\u5f8c prompt \u53ef\u4ee5\u88ab\u7248\u672c\u63a7\u5236\u3001\u88ab diff\u3001\u88ab\u7368\u7acb\u5be9\u67e5\uff0c\u8ddf\u7a0b\u5f0f\u78bc\u4e00\u6a23\u5c0d\u5f85\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5ef6\u4f38\u95b1\u8b80<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><a href=\"https:\/\/github.com\/anthropics\/claude-cookbooks\">Claude Cookbooks GitHub Repository<\/a> \u2014 \u672c\u6587\u89e3\u8b80\u7684\u5c08\u6848\u539f\u59cb\u78bc\uff0c\u5305\u542b\u6240\u6709 slash commands\u3001agents\u3001skills \u5b9a\u7fa9\u548c CI workflows\uff0c\u503c\u5f97\u76f4\u63a5\u95b1\u8b80 <code>.claude\/<\/code> \u76ee\u9304\u4e0b\u7684\u5b8c\u6574\u5be6\u4f5c<\/li>\n\n\n<li><a href=\"https:\/\/www.anthropic.com\/research\/building-effective-agents\">Building Effective Agents \u2014 Anthropic Research<\/a> \u2014 Anthropic \u5b98\u65b9\u7684 agent \u8a2d\u8a08\u6a21\u5f0f\u6307\u5357\uff0c\u5b9a\u7fa9\u4e86 Prompt Chaining\u3001Routing\u3001Parallelization \u7b49\u7d44\u5408\u5f0f\u6a21\u5f0f\uff0c\u662f Cookbooks \u4e2d agent patterns \u7bc4\u4f8b\u7684\u7406\u8ad6\u57fa\u790e<\/li>\n\n\n<li><a href=\"https:\/\/www.anthropic.com\/engineering\/claude-code-best-practices\">Claude Code: Best Practices for Agentic Coding \u2014 Anthropic Engineering<\/a> \u2014 Anthropic \u5de5\u7a0b\u5718\u968a\u64b0\u5beb\u7684 Claude Code \u6700\u4f73\u5be6\u8e10\uff0c\u6db5\u84cb CLAUDE.md \u64b0\u5beb\u539f\u5247\u3001slash commands \u8a2d\u8a08\u3001subagent \u4f7f\u7528\u7b56\u7565\uff0c\u8207\u672c\u6587\u89e3\u8b80\u7684\u5c08\u6848\u5951\u7d04\u8a2d\u8a08\u76f4\u63a5\u76f8\u95dc<\/li>\n\n\n<li><a href=\"https:\/\/claude.com\/blog\/using-claude-md-files\">Using CLAUDE.md Files: Customizing Claude Code for Your Codebase<\/a> \u2014 \u5b98\u65b9 Blog \u6df1\u5165\u8aaa\u660e CLAUDE.md \u7684\u968e\u5c64\u5f0f\u8f09\u5165\u6a5f\u5236\u548c\u9032\u968e\u7528\u6cd5\uff0c\u5e6b\u52a9\u7406\u89e3\u672c\u6587\u300c\u70ba AI \u5354\u4f5c\u8005\u5beb README\u300d\u7684\u8a2d\u8a08\u610f\u5716<\/li>\n\n\n<li><a href=\"https:\/\/code.claude.com\/docs\/en\/github-actions\">Claude Code GitHub Actions \u5b98\u65b9\u6587\u4ef6<\/a> \u2014 claude-code-action \u7684\u5b8c\u6574\u8a2d\u5b9a\u6307\u5357\uff0c\u5305\u542b allowed-tools \u5b89\u5168\u6a21\u578b\u3001\u89f8\u767c\u689d\u4ef6\u8a2d\u5b9a\u3001\u4f01\u696d\u74b0\u5883\u6574\u5408\u7b49\uff0c\u662f\u5be6\u4f5c\u672c\u6587 CI\/\u672c\u5730\u96d9\u7528\u8a2d\u8a08\u7684\u5fc5\u5099\u53c3\u8003<\/li>\n\n\n<li><a href=\"https:\/\/docs.claude.com\/en\/docs\/build-with-claude\/prompt-engineering\/use-xml-tags\">Use XML Tags to Structure Your Prompts \u2014 Claude Docs<\/a> \u2014 Anthropic \u5b98\u65b9\u7684 XML tag prompt \u7d50\u69cb\u5316\u6307\u5357\uff0c\u89e3\u91cb\u70ba\u4ec0\u9ebc XML tag \u80fd\u63d0\u5347 Claude \u7684\u6307\u4ee4\u7406\u89e3\u7cbe\u78ba\u5ea6\uff0c\u662f\u672c\u6587 Prompt \u5206\u96e2\u539f\u5247\u7684\u6280\u8853\u57fa\u790e<\/li>\n\n<\/ul>\n\n\n<div class=\"wp-like-post__wrapper\" style=\"\"><button type=\"button\" class=\"wp-like-post__button \" style=\"height: 30px; color: #000000;\" data-post-id=\"612\" data-total-likes=\"0\" data-likes-from-user=\"0\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" width=\"30\" height=\"30\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6.633 10.5c.806 0 1.533-.446 2.031-1.08a9.041 9.041 0 012.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 00.322-1.672V3a.75.75 0 01.75-.75A2.25 2.25 0 0116.5 4.5c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 01-2.649 7.521c-.388.482-.987.729-1.605.729H13.48c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 00-1.423-.23H5.904M14.25 9h2.25M5.904 18.75c.083.205.173.405.27.602.197.4-.078.898-.523.898h-.908c-.889 0-1.713-.518-1.972-1.368a12 12 0 01-.521-3.507c0-1.553.295-3.036.831-4.398C3.387 10.203 4.167 9.75 5 9.75h1.053c.472 0 .745.556.5.96a8.958 8.958 0 00-1.302 4.665c0 1.194.232 2.333.654 3.375z\" \/><\/svg><\/button><div class=\"wp-like-post__count\"\">0<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Claude Cookbooks \u662f Anthropic \u5b98\u65b9\u7dad\u8b77\u7684 Jupyter Notebook \u7bc4\u4f8b\u96c6 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rolpb_likes":0,"footnotes":""},"categories":[555],"tags":[430,247,399,581,504,240,582],"class_list":["post-612","post","type-post","status-publish","format-standard","hentry","category-ai-agent-github","tag-ai-agent","tag-ci-cd","tag-claude-code","tag-jupyter-notebook","tag-prompt-engineering","tag-python","tag-582"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":7}},"_links":{"self":[{"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/posts\/612","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/comments?post=612"}],"version-history":[{"count":1,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/posts\/612\/revisions"}],"predecessor-version":[{"id":613,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/posts\/612\/revisions\/613"}],"wp:attachment":[{"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/media?parent=612"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/categories?post=612"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.itsmygo.uk\/wordpress\/wp-json\/wp\/v2\/tags?post=612"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}