```

第 2 课:环境搭建


需要什么

python
1. Python 3.10+
2. Claude Agent SDK
3. Anthropic API Key 或 Claude 订阅账号
4. 代码编辑器(VS Code 推荐)

第一步:创建项目

python
mkdir miniclaw && cd miniclaw
python -m venv venv
source venv/bin/activate  # Mac/Linux
# venv\Scripts\activate   # Windows

第二步:安装 SDK

code
pip install claude-agent-sdk

验证:

python
python -c "from claude_agent_sdk import query; print('✅ SDK 安装成功')"

第三步:配置认证

Claude Agent SDK 支持两种认证方式:

方式 A:API Key(按量付费)

code
export ANTHROPIC_API_KEY="sk-ant-你的密钥"

方式 B:订阅账号(Claude Pro/Max 用户)

code
claude login
# 按提示在浏览器完成登录

两种方式选一种就行,SDK 会自动检测。

第四步:Hello World

创建 hello.py

code
"""MiniClaw 第一次对话"""

import anyio
from claude_agent_sdk import (
    query, ClaudeAgentOptions,
    AssistantMessage, ResultMessage, TextBlock,
)

async def main():
    options = ClaudeAgentOptions(
        system_prompt="你是私人助理 MiniClaw,用中文简洁地回答问题。",
        max_turns=1,
    )

    print("🤖 MiniClaw 启动!\n")

    question = "用一句话告诉我:怎样才能提高工作效率?"
    print(f"你: {question}\n")

    async for msg in query(prompt=question, options=options):
        if isinstance(msg, AssistantMessage):
            for block in msg.content:
                if isinstance(block, TextBlock):
                    print(f"🤖 MiniClaw: {block.text}")
        elif isinstance(msg, ResultMessage):
            if msg.total_cost_usd and msg.total_cost_usd > 0:
                print(f"\n💰 费用: ${msg.total_cost_usd:.4f}")

anyio.run(main)
python
python hello.py

第五步:试试交互模式

创建 chat.py

code
"""MiniClaw 交互模式"""

import asyncio
from claude_agent_sdk import (
    ClaudeSDKClient, ClaudeAgentOptions,
    AssistantMessage, TextBlock,
)

async def main():
    options = ClaudeAgentOptions(
        system_prompt="""你是私人助理 MiniClaw。你的特点:
1. 用中文、简洁地回答
2. 主动给出建议
3. 回复不超过 3 句话""",
    )

    print("🤖 MiniClaw 上线(输入 quit 退出)\n")

    async with ClaudeSDKClient(options=options) as client:
        while True:
            user_input = input("你: ").strip()
            if user_input.lower() in ['quit', 'exit', 'q']:
                print("🤖 MiniClaw: 拜拜,明天见!")
                break
            if not user_input:
                continue

            await client.query(user_input)
            async for msg in client.receive_response():
                if isinstance(msg, AssistantMessage):
                    for block in msg.content:
                        if isinstance(block, TextBlock):
                            print(f"🤖 MiniClaw: {block.text}")
            print()

asyncio.run(main)
python
python chat.py

试着和它聊几句,感受一下多轮对话的效果。

项目目录规划

后面的课程会逐步搭建:

code
miniclaw/
├── main.py                 ← 主程序入口
├── config.py               ← 配置
├── tools/
│   ├── __init__.py
│   ├── todo.py             ← 待办管理工具
│   ├── notes.py            ← 笔记工具
│   └── files.py            ← 文件操作工具
├── hooks/
│   ├── __init__.py
│   └── safety.py           ← 安全 Hook
├── agents/
│   ├── __init__.py
│   └── team.py             ← Agent 团队
├── storage/
│   ├── __init__.py
│   └── db.py               ← SQLite 数据库
└── data/
    └── miniclaw.db          ← 数据文件

常见问题

Q: 报错 "No API key found" A: 设置 export ANTHROPIC_API_KEY="..." 或执行 claude login

Q: SDK 安装了但 import 报错 A: 确认虚拟环境已激活(终端前面有 (venv)

Q: 回复是英文 A: 在 system_prompt 里写"用中文回复"

本课小结

  • 安装了 claude-agent-sdk
  • 两种认证方式:API Key 或 claude login
  • 跑通了 Hello World 和交互模式
  • 规划了项目目录结构

沿着当前专题继续,或返回课程目录重新整理阅读顺序。

返回课程目录