Claude Agent SDK
本文档介绍如何通过 ClaudeSDKClient 使用 Claude Agent SDK,并在同一个会话中保持上下文,实现交互式多轮对话。
接口地址
https://api.maomaotoken.com安装依赖
在终端运行:
pip install claude_agent-sdkPython 示例代码
import asyncio
import os
import sys
if sys.platform == "win32":
try:
sys.stdout.reconfigure(encoding="utf-8")
sys.stderr.reconfigure(encoding="utf-8")
except Exception:
pass
# ==================== API 配置 ====================
BASE_URL = "https://api.maomaotoken.com"
API_KEY = "sk-********************************"
MODEL = "claude-sonnet-4-6"
PROXY = None
# ==================== 环境变量配置 ====================
os.environ["ANTHROPIC_BASE_URL"] = BASE_URL
os.environ["ANTHROPIC_API_KEY"] = API_KEY
if PROXY:
os.environ["HTTP_PROXY"] = PROXY
os.environ["HTTPS_PROXY"] = PROXY
from claude_agent_sdk import ClaudeAgentOptions, ClaudeSDKClient
from claude_agent_sdk import AssistantMessage, TextBlock
# ==================== Agent 配置 ====================
TOOLS = ["Read", "Write", "Edit", "Glob", "Grep", "Bash", "WebSearch", "WebFetch"]
SYSTEM_PROMPT = "你是一个友好的AI助手。请用中文回复。"
def create_options() -> ClaudeAgentOptions:
"""创建 ClaudeAgentOptions 配置。"""
env = {
"ANTHROPIC_BASE_URL": BASE_URL,
"ANTHROPIC_API_KEY": API_KEY,
}
if PROXY:
env["HTTP_PROXY"] = PROXY
env["HTTPS_PROXY"] = PROXY
return ClaudeAgentOptions(
system_prompt=SYSTEM_PROMPT,
max_turns=10,
allowed_tools=TOOLS,
permission_mode="bypassPermissions",
cwd=".",
model=MODEL,
env=env,
)
async def process_response(client: ClaudeSDKClient) -> str:
"""处理并返回响应文本。"""
response_text = ""
async for message in client.receive_response():
if isinstance(message, AssistantMessage):
for block in message.content:
if isinstance(block, TextBlock) and block.text:
if not response_text:
response_text = block.text
elif hasattr(message, "result") and message.result:
response_text = message.result
return response_text or "(无响应)"
async def main():
print("AI 助手(支持多轮对话)| 输入 'exit' 退出\n")
options = create_options()
async with ClaudeSDKClient(options=options) as client:
print("[已连接到 Claude SDK,开始对话...]\n")
while True:
try:
user_input = input("你: ").strip()
if not user_input:
continue
if user_input.lower() in ["exit", "quit"]:
print("\n再见!")
break
await client.query(user_input)
response = await process_response(client)
print(f"\nAI: {response}\n")
except (EOFError, KeyboardInterrupt):
print("\n再见!")
break
except Exception as e:
print(f"\n错误: {type(e).__name__}: {e}\n")
if __name__ == "__main__":
asyncio.run(main())配置说明
| 参数 | 说明 |
|---|---|
BASE_URL | MaomaoToken 服务地址,填写 https://api.maomaotoken.com。 |
API_KEY | 你的 MaomaoToken API Key。 |
MODEL | 使用的 Claude 模型,例如 claude-sonnet-4-6。 |
PROXY | 可选代理地址,例如 http://127.0.0.1:7897。 |
max_turns | Agent 最大执行轮数。 |
allowed_tools | 允许 Agent 使用的工具列表。 |
cwd | Agent 运行时的工作目录。 |
多轮对话说明
示例中使用 async with ClaudeSDKClient(options=options) as client 创建一个持久会话。后续每次调用 await client.query(user_input) 都会在同一个会话里继续对话,因此可以保留上下文。
注意事项
- 请将示例中的 API Key 替换为你的真实 MaomaoToken API Key。
permission_mode="bypassPermissions"会给予工具更宽的执行权限,建议只在可信环境中使用。- 如果启用了文件读写、终端执行、网页访问等工具,请确认运行目录和权限范围符合预期。
- 生产环境建议通过环境变量管理 API Key,避免写入公开代码仓库。