142. 创建一个包含一些有缺陷代码的文件142. 创建一个包含一些有缺陷代码的文件
153. 运行一个代理,自动查找并修复错误153. 运行一个代理,自动查找并修复错误
16 16
17<h2 id="prerequisites">17## 前置条件
18 前置条件
19</h2>
20 18
21* **Node.js 18+** 或 **Python 3.10+**19* **Node.js 18+** 或 **Python 3.10+**
22* 一个 **Anthropic 账户**。如果您还没有账户,[在此注册](https://platform.claude.com/)。20* 一个 **Anthropic 账户**。如果您还没有账户,[在此注册](https://platform.claude.com/)。
23 21
24<h2 id="setup">22## 设置
25 设置
26</h2>
27
28<Steps>
29 <Step title="创建项目文件夹">
30 为此快速开始创建一个新目录:
31 23
32 ```bash theme={null}24**1. 创建项目文件夹**
33 mkdir my-agent
34 cd my-agent
35 ```
36
37 对于你自己的项目,你可以从任何文件夹运行 SDK;默认情况下,它将有权访问该目录及其子目录中的文件。
38 </Step>
39
40 <Step title="安装 SDK">
41 为你的语言安装 Agent SDK 包:
42 25
43 <Tabs>26为此快速开始创建一个新目录:
44 <Tab title="TypeScript(新项目)">
45 ```bash theme={null}
46 npm init -y
47 npm pkg set type=module
48 npm install @anthropic-ai/claude-agent-sdk
49 npm install --save-dev tsx
50 ```
51 27
52 在 `package.json` 中设置 `"type": "module"` 让你的代理脚本使用顶级 `await`,而 [tsx](https://tsx.hirok.io) 直接运行 TypeScript 文件。npm 在安装成功时会打印 `added N packages`。28```bash theme={null}
53 </Tab>29mkdir my-agent
30cd my-agent
31```
32
33对于你自己的项目,你可以从任何文件夹运行 SDK;默认情况下,它将有权访问该目录及其子目录中的文件。
34
35**2. 安装 SDK**
36
37为你的语言安装 Agent SDK 包:
38
39**TypeScript(新项目)**
54 40
55 <Tab title="TypeScript(现有项目)">41```bash theme={null}
56 ```bash theme={null}42npm init -y
57 npm install @anthropic-ai/claude-agent-sdk43npm pkg set type=module
58 npm install --save-dev tsx44npm install @anthropic-ai/claude-agent-sdk
59 ```45npm install --save-dev tsx
46```
47
48在 `package.json` 中设置 `"type": "module"` 让你的代理脚本使用顶级 `await`,而 [tsx](https://tsx.hirok.io) 直接运行 TypeScript 文件。npm 在安装成功时会打印 `added N packages`。
49
50**TypeScript(现有项目)**
51
52```bash theme={null}
53npm install @anthropic-ai/claude-agent-sdk
54npm install --save-dev tsx
55```
60 56
61 [tsx](https://tsx.hirok.io) 直接运行 TypeScript 文件。如果你的项目使用 CommonJS,将你的代理脚本命名为 `agent.mts` 而不是 `agent.ts`。`.mts` 扩展名使 tsx 将文件视为 ES 模块,所以顶级 `await` 可以工作,而无需将整个项目转换为 ES 模块。在本快速开始中后面的创建和运行步骤中使用 `agent.mts` 代替 `agent.ts`。57[tsx](https://tsx.hirok.io) 直接运行 TypeScript 文件。如果你的项目使用 CommonJS,将你的代理脚本命名为 `agent.mts` 而不是 `agent.ts`。`.mts` 扩展名使 tsx 将文件视为 ES 模块,所以顶级 `await` 可以工作,而无需将整个项目转换为 ES 模块。在本快速开始中后面的创建和运行步骤中使用 `agent.mts` 代替 `agent.ts`。
62 </Tab>58
59**Python(uv)**
60
61[安装 uv](https://docs.astral.sh/uv/),一个快速的 Python 包管理器,可以自动处理虚拟环境。然后初始化一个项目并添加 SDK:
62
63```bash theme={null}
64uv init
65uv add claude-agent-sdk
66```
67
68**Python(pip)**
69
70创建并激活虚拟环境,然后安装该包。
71
72在 macOS 或 Linux 上:
73
74```bash theme={null}
75python3 -m venv .venv
76source .venv/bin/activate
77pip install claude-agent-sdk
78```
63 79
64 <Tab title="Python(uv)">80在 Windows 上:
65 [安装 uv](https://docs.astral.sh/uv/),一个快速的 Python 包管理器,可以自动处理虚拟环境。然后初始化一个项目并添加 SDK:
66 81
67 ```bash theme={null}82```powershell theme={null}
68 uv init83py -m venv .venv
69 uv add claude-agent-sdk84.venv\Scripts\Activate.ps1
70 ```85pip install claude-agent-sdk
71 </Tab>86```
72 87
73 <Tab title="Python(pip)">88如果 PowerShell 因执行策略错误而阻止 `Activate.ps1`,请先运行 `Set-ExecutionPolicy -Scope Process RemoteSigned`。
74 创建并激活虚拟环境,然后安装该包。
75 89
76 在 macOS 或 Linux 上:90> [!NOTE]
91>
92> TypeScript 和 Python SDK 都捆绑了一个本地 Claude Code 二进制文件,所以大多数安装不需要单独安装 Claude Code。某些安装没有捆绑的二进制文件:
93>
94> * 如果 pip 安装了 Python SDK 的源代码分发而不是平台 wheel,例如在 ARM64 Windows 上,则不会捆绑任何二进制文件。[本地安装 Claude Code](/docs/zh-CN/setup#install-claude-code)。Python SDK 在你的 `PATH` 上找到它。
95> * TypeScript SDK 通过 npm 可选依赖项安装其二进制文件,所以跳过它们的安装,例如 `npm ci --omit=optional`,即使在支持的平台上也不会获得二进制文件。重新安装而不跳过可选依赖项,或 [本地安装 Claude Code](/docs/zh-CN/setup#install-claude-code) 并将 `pathToClaudeCodeExecutable` 设置为其路径。
77 96
78 ```bash theme={null}97**3. 设置你的 API 密钥**
79 python3 -m venv .venv
80 source .venv/bin/activate
81 pip install claude-agent-sdk
82 ```
83 98
84 在 Windows 上:99从 [Claude 控制台](https://platform.claude.com/)获取 API 密钥,然后在你将运行代理的 shell 中将其设置为环境变量:
85 100
86 ```powershell theme={null}101**macOS / Linux**
87 py -m venv .venv
88 .venv\Scripts\Activate.ps1
89 pip install claude-agent-sdk
90 ```
91 102
92 如果 PowerShell 因执行策略错误而阻止 `Activate.ps1`,请先运行 `Set-ExecutionPolicy -Scope Process RemoteSigned`。103```bash theme={null}
93 </Tab>104export ANTHROPIC_API_KEY=your-api-key
94 </Tabs>105```
95 106
96 <Note>107**Windows(PowerShell)**
97 TypeScript 和 Python SDK 都捆绑了一个本地 Claude Code 二进制文件,所以大多数安装不需要单独安装 Claude Code。某些安装没有捆绑的二进制文件:
98 108
99 * 如果 pip 安装了 Python SDK 的源代码分发而不是平台 wheel,例如在 ARM64 Windows 上,则不会捆绑任何二进制文件。[本地安装 Claude Code](/docs/zh-CN/setup#install-claude-code)。Python SDK 在你的 `PATH` 上找到它。109```powershell theme={null}
100 * TypeScript SDK 通过 npm 可选依赖项安装其二进制文件,所以跳过它们的安装,例如 `npm ci --omit=optional`,即使在支持的平台上也不会获得二进制文件。重新安装而不跳过可选依赖项,或 [本地安装 Claude Code](/docs/zh-CN/setup#install-claude-code) 并将 `pathToClaudeCodeExecutable` 设置为其路径。110$env:ANTHROPIC_API_KEY = "your-api-key"
101 </Note>111```
102 </Step>
103 112
104 <Step title="设置你的 API 密钥">113SDK 从运行你的代理的进程的环境中读取密钥;它不会自动加载 `.env` 文件。如果你将密钥保存在 `.env` 文件中,请自己加载它,例如使用 `dotenv` 包,然后再调用 SDK。
105 从 [Claude 控制台](https://platform.claude.com/)获取 API 密钥,然后在你将运行代理的 shell 中将其设置为环境变量:
106 114
107 <Tabs>115SDK 还支持通过第三方 API 提供商进行身份验证:
108 <Tab title="macOS / Linux">
109 ```bash theme={null}
110 export ANTHROPIC_API_KEY=your-api-key
111 ```
112 </Tab>
113 116
114 <Tab title="Windows(PowerShell)">117* **Amazon Bedrock**:设置 `CLAUDE_CODE_USE_BEDROCK=1` 环境变量并配置 AWS 凭证
115 ```powershell theme={null}118* **Claude Platform on AWS**:设置 `CLAUDE_CODE_USE_ANTHROPIC_AWS=1` 和 `ANTHROPIC_AWS_WORKSPACE_ID`,然后配置 AWS 凭证
116 $env:ANTHROPIC_API_KEY = "your-api-key"119* **Google Cloud 的 Agent Platform**:设置 `CLAUDE_CODE_USE_VERTEX=1` 环境变量并配置 Google Cloud 凭证
117 ```120* **Microsoft Foundry**:设置 `CLAUDE_CODE_USE_FOUNDRY=1` 环境变量并配置 Azure 凭证
118 </Tab>
119 </Tabs>
120 121
121 SDK 从运行你的代理的进程的环境中读取密钥;它不会自动加载 `.env` 文件。如果你将密钥保存在 `.env` 文件中,请自己加载它,例如使用 `dotenv` 包,然后再调用 SDK。122有关详细信息,请参阅 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws)、[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 或 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 的设置指南。
122 123
123 SDK 还支持通过第三方 API 提供商进行身份验证:124> [!NOTE]
124 125>
125 * **Amazon Bedrock**:设置 `CLAUDE_CODE_USE_BEDROCK=1` 环境变量并配置 AWS 凭证126> 除非事先获得批准,否则 Anthropic 不允许第三方开发者为其产品(包括基于 Claude Agent SDK 构建的 Agent)提供 claude.ai 登录或速率限制。请改用本文档中描述的 API 密钥身份验证方法。
126 * **Claude Platform on AWS**:设置 `CLAUDE_CODE_USE_ANTHROPIC_AWS=1` 和 `ANTHROPIC_AWS_WORKSPACE_ID`,然后配置 AWS 凭证
127 * **Google Cloud 的 Agent Platform**:设置 `CLAUDE_CODE_USE_VERTEX=1` 环境变量并配置 Google Cloud 凭证
128 * **Microsoft Foundry**:设置 `CLAUDE_CODE_USE_FOUNDRY=1` 环境变量并配置 Azure 凭证
129
130 有关详细信息,请参阅 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Claude Platform on AWS](/docs/zh-CN/claude-platform-on-aws)、[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 或 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry) 的设置指南。
131 127
132 <Note>128## 创建一个有缺陷的文件
133 除非事先获得批准,否则 Anthropic 不允许第三方开发者为其产品(包括基于 Claude Agent SDK 构建的 Agent)提供 claude.ai 登录或速率限制。请改用本文档中描述的 API 密钥身份验证方法。
134 </Note>
135 </Step>
136</Steps>
137
138<h2 id="create-a-buggy-file">
139 创建一个有缺陷的文件
140</h2>
141 129
142此快速开始将引导你构建一个可以查找和修复代码中错误的代理。首先,你需要一个包含一些有意错误的文件供代理修复。在 `my-agent` 目录中创建 `utils.py` 并粘贴以下代码:130此快速开始将引导你构建一个可以查找和修复代码中错误的代理。首先,你需要一个包含一些有意错误的文件供代理修复。在 `my-agent` 目录中创建 `utils.py` 并粘贴以下代码:
143 131
1581. `calculate_average([])` 会因除以零而崩溃1461. `calculate_average([])` 会因除以零而崩溃
1592. `get_user_name(None)` 会因 TypeError 而崩溃1472. `get_user_name(None)` 会因 TypeError 而崩溃
160 148
161<h2 id="build-an-agent-that-finds-and-fixes-bugs">149## 构建一个查找和修复错误的代理
162 构建一个查找和修复错误的代理
163</h2>
164 150
165如果你使用 Python SDK,创建 `agent.py`,或者如果使用 TypeScript,创建 `agent.ts`。如果你现有的项目使用 CommonJS,请改用 `agent.mts`:151如果你使用 Python SDK,创建 `agent.py`,或者如果使用 TypeScript,创建 `agent.ts`。如果你现有的项目使用 CommonJS,请改用 `agent.mts`:
166 152
167<CodeGroup>153```python Python theme={null}
168 ```python Python theme={null}154import asyncio
169 import asyncio155from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage
170 from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage
171 156
172 157
173 async def main():158async def main():
174 # Agentic loop: streams messages as Claude works159 # Agentic loop: streams messages as Claude works
175 async for message in query(160 async for message in query(
176 prompt="Review utils.py for bugs that would cause crashes. Fix any issues you find.",161 prompt="Review utils.py for bugs that would cause crashes. Fix any issues you find.",
190 print(f"Done: {message.subtype}") # 最终结果175 print(f"Done: {message.subtype}") # 最终结果
191 176
192 177
193 asyncio.run(main())178asyncio.run(main())
194 ```179```
195 180
196 ```typescript TypeScript theme={null}181```typescript TypeScript theme={null}
197 import { query } from "@anthropic-ai/claude-agent-sdk";182import { query } from "@anthropic-ai/claude-agent-sdk";
198 183
199 // Agentic loop: streams messages as Claude works184// Agentic loop: streams messages as Claude works
200 for await (const message of query({185for await (const message of query({
201 prompt: "Review utils.py for bugs that would cause crashes. Fix any issues you find.",186 prompt: "Review utils.py for bugs that would cause crashes. Fix any issues you find.",
202 options: {187 options: {
203 allowedTools: ["Read", "Edit", "Glob"], // 自动批准这些工具188 allowedTools: ["Read", "Edit", "Glob"], // 自动批准这些工具
204 permissionMode: "acceptEdits" // 自动批准文件编辑189 permissionMode: "acceptEdits" // 自动批准文件编辑
205 }190 }
206 })) {191})) {
207 // 打印人类可读的输出192 // 打印人类可读的输出
208 if (message.type === "assistant" && message.message?.content) {193 if (message.type === "assistant" && message.message?.content) {
209 for (const block of message.message.content) {194 for (const block of message.message.content) {
216 } else if (message.type === "result") {201 } else if (message.type === "result") {
217 console.log(`Done: ${message.subtype}`); // 最终结果202 console.log(`Done: ${message.subtype}`); // 最终结果
218 }203 }
219 }204}
220 ```205```
221</CodeGroup>
222 206
223此代码有三个主要部分:207此代码有三个主要部分:
224 208
232 216
233循环内的消息处理过滤人类可读的输出。如果没有过滤,你会看到原始消息对象,包括系统初始化和内部状态,这对调试很有用,但通常很冗长。217循环内的消息处理过滤人类可读的输出。如果没有过滤,你会看到原始消息对象,包括系统初始化和内部状态,这对调试很有用,但通常很冗长。
234 218
235<Note>219> [!NOTE]
236 此示例使用流式传输来实时显示进度。如果你不需要实时输出(例如,对于后台作业或 CI 管道),你可以一次性收集所有消息。有关详细信息,请参阅[流式传输与单轮模式](/docs/zh-CN/agent-sdk/streaming-vs-single-mode)。220>
237</Note>221> 此示例使用流式传输来实时显示进度。如果你不需要实时输出(例如,对于后台作业或 CI 管道),你可以一次性收集所有消息。有关详细信息,请参阅[流式传输与单轮模式](/docs/zh-CN/agent-sdk/streaming-vs-single-mode)。
238 222
239<h3 id="run-your-agent">223### 运行你的代理
240 运行你的代理
241</h3>
242 224
243你的代理已准备好。使用以下命令运行它:225你的代理已准备好。使用以下命令运行它:
244 226
245<Tabs>227**TypeScript**
246 <Tab title="TypeScript">228
247 ```bash theme={null}229```bash theme={null}
248 npx tsx agent.ts230npx tsx agent.ts
249 ```231```
250 232
251 如果你将脚本命名为 `agent.mts`,请改为运行 `npx tsx agent.mts`。233如果你将脚本命名为 `agent.mts`,请改为运行 `npx tsx agent.mts`。
252 </Tab>
253 234
254 <Tab title="Python(uv)">235**Python(uv)**
255 ```bash theme={null}236
256 uv run agent.py237```bash theme={null}
257 ```238uv run agent.py
258 </Tab>239```
259 240
260 <Tab title="Python(pip)">241**Python(pip)**
261 使用你仍然激活的虚拟环境:
262 242
263 ```bash theme={null}243使用你仍然激活的虚拟环境:
264 python agent.py244
265 ```245```bash theme={null}
266 </Tab>246python agent.py
267</Tabs>247```
268 248
269运行时,代理会打印其推理和它调用的每个工具,最后以 `Done: success` 结束。运行后,检查 `utils.py`。你会看到处理空列表和空用户的防御性代码。你的代理自主地:249运行时,代理会打印其推理和它调用的每个工具,最后以 `Done: success` 结束。运行后,检查 `utils.py`。你会看到处理空列表和空用户的防御性代码。你的代理自主地:
270 250
274 254
275这就是 Agent SDK 的与众不同之处:Claude 直接执行工具,而不是要求你实现它们。255这就是 Agent SDK 的与众不同之处:Claude 直接执行工具,而不是要求你实现它们。
276 256
277<Note>257> [!NOTE]
278 如果你看到身份验证错误,例如 `Not logged in` 或 `Invalid API key`,请确保你已在运行代理的 shell 中设置了 `ANTHROPIC_API_KEY` 环境变量。SDK 不会自动加载 `.env` 文件。258>
279 259> 如果你看到身份验证错误,例如 `Not logged in` 或 `Invalid API key`,请确保你已在运行代理的 shell 中设置了 `ANTHROPIC_API_KEY` 环境变量。SDK 不会自动加载 `.env` 文件。
280 有关这些和其他身份验证错误的原因和修复,请参阅错误参考中的[身份验证错误](/docs/zh-CN/errors#authentication-errors)。260>
281</Note>261> 有关这些和其他身份验证错误的原因和修复,请参阅错误参考中的[身份验证错误](/docs/zh-CN/errors#authentication-errors)。
282 262
283<h3 id="try-other-prompts">263### 尝试其他提示
284 尝试其他提示
285</h3>
286 264
287现在你的代理已设置好,尝试一些不同的提示:265现在你的代理已设置好,尝试一些不同的提示:
288 266
290* `"Add type hints to all functions in utils.py"`268* `"Add type hints to all functions in utils.py"`
291* `"Create a README.md documenting the functions in utils.py"`269* `"Create a README.md documenting the functions in utils.py"`
292 270
293<h3 id="customize-your-agent">271### 自定义你的代理
294 自定义你的代理
295</h3>
296 272
297你可以通过更改选项来修改代理的行为。以下是一些示例:273你可以通过更改选项来修改代理的行为。以下是一些示例:
298 274
299**添加网络搜索功能:**275**添加网络搜索功能:**
300 276
301<CodeGroup>277```python Python theme={null}
302 ```python Python theme={null}278options = ClaudeAgentOptions(
303 options = ClaudeAgentOptions(
304 allowed_tools=["Read", "Edit", "Glob", "WebSearch"], permission_mode="acceptEdits"279 allowed_tools=["Read", "Edit", "Glob", "WebSearch"], permission_mode="acceptEdits"
305 )280)
306 ```281```
307 282
308 ```typescript TypeScript hidelines={1,-1} theme={null}283```typescript TypeScript hidelines={1,-1} theme={null}
309 const _ = {284const _ = {
310 options: {285 options: {
311 allowedTools: ["Read", "Edit", "Glob", "WebSearch"],286 allowedTools: ["Read", "Edit", "Glob", "WebSearch"],
312 permissionMode: "acceptEdits"287 permissionMode: "acceptEdits"
313 }288 }
314 };289};
315 ```290```
316</CodeGroup>
317 291
318**给 Claude 一个自定义系统提示:**292**给 Claude 一个自定义系统提示:**
319 293
320<CodeGroup>294```python Python theme={null}
321 ```python Python theme={null}295options = ClaudeAgentOptions(
322 options = ClaudeAgentOptions(
323 allowed_tools=["Read", "Edit", "Glob"],296 allowed_tools=["Read", "Edit", "Glob"],
324 permission_mode="acceptEdits",297 permission_mode="acceptEdits",
325 system_prompt="You are a senior Python developer. Always follow PEP 8 style guidelines.",298 system_prompt="You are a senior Python developer. Always follow PEP 8 style guidelines.",
326 )299)
327 ```300```
328 301
329 ```typescript TypeScript hidelines={1,-1} theme={null}302```typescript TypeScript hidelines={1,-1} theme={null}
330 const _ = {303const _ = {
331 options: {304 options: {
332 allowedTools: ["Read", "Edit", "Glob"],305 allowedTools: ["Read", "Edit", "Glob"],
333 permissionMode: "acceptEdits",306 permissionMode: "acceptEdits",
334 systemPrompt: "You are a senior Python developer. Always follow PEP 8 style guidelines."307 systemPrompt: "You are a senior Python developer. Always follow PEP 8 style guidelines."
335 }308 }
336 };309};
337 ```310```
338</CodeGroup>
339 311
340**在终端中运行命令:**312**在终端中运行命令:**
341 313
342<CodeGroup>314```python Python theme={null}
343 ```python Python theme={null}315options = ClaudeAgentOptions(
344 options = ClaudeAgentOptions(
345 allowed_tools=["Read", "Edit", "Glob", "Bash"], permission_mode="acceptEdits"316 allowed_tools=["Read", "Edit", "Glob", "Bash"], permission_mode="acceptEdits"
346 )317)
347 ```318```
348 319
349 ```typescript TypeScript hidelines={1,-1} theme={null}320```typescript TypeScript hidelines={1,-1} theme={null}
350 const _ = {321const _ = {
351 options: {322 options: {
352 allowedTools: ["Read", "Edit", "Glob", "Bash"],323 allowedTools: ["Read", "Edit", "Glob", "Bash"],
353 permissionMode: "acceptEdits"324 permissionMode: "acceptEdits"
354 }325 }
355 };326};
356 ```327```
357</CodeGroup>
358 328
359启用 `Bash` 后,尝试:`"Write unit tests for utils.py, run them, and fix any failures"`329启用 `Bash` 后,尝试:`"Write unit tests for utils.py, run them, and fix any failures"`
360 330
361这些代码片段中的每一个都在同一个选项对象上设置字段。有关更多信息,请参阅[配置你的代理](/docs/zh-CN/agent-sdk/configuration)。331这些代码片段中的每一个都在同一个选项对象上设置字段。有关更多信息,请参阅[配置你的代理](/docs/zh-CN/agent-sdk/configuration)。
362 332
363<h2 id="key-concepts">333## 关键概念
364 关键概念
365</h2>
366 334
367**工具**控制你的代理可以做什么:335**工具**控制你的代理可以做什么:
368 336
374 342
375**权限模式**控制你想要多少人工监督。SDK 按照固定的顺序评估活跃模式以及你的允许和拒绝规则,详见[权限如何被评估](/docs/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated)。有关完整的模式列表、它们的行为以及何时使用每种模式,请参阅[代理循环工作原理中的权限模式](/docs/zh-CN/agent-sdk/agent-loop#permission-mode)。343**权限模式**控制你想要多少人工监督。SDK 按照固定的顺序评估活跃模式以及你的允许和拒绝规则,详见[权限如何被评估](/docs/zh-CN/agent-sdk/permissions#how-permissions-are-evaluated)。有关完整的模式列表、它们的行为以及何时使用每种模式,请参阅[代理循环工作原理中的权限模式](/docs/zh-CN/agent-sdk/agent-loop#permission-mode)。
376 344
377<h2 id="next-steps">345## 后续步骤
378 后续步骤
379</h2>
380 346
381现在你已经创建了你的第一个代理,学习如何扩展其功能并将其定制到你的用例:347现在你已经创建了你的第一个代理,学习如何扩展其功能并将其定制到你的用例:
382 348