Урок 15 из 16•20 мин
Claude Agent SDK введение
Цели урока
После прохождения этого урока вы сможете:
- 1Понять архитектуру Claude Agent SDK
- 2Научиться создавать агентов программно
- 3Разобраться с передачей контекста
Что такое Claude Agent SDK
Claude Agent SDK — это Python-библиотека для создания AI-агентов программно. В отличие от Claude.ai или Claude Desktop, SDK даёт полный контроль над поведением агента.
Когда использовать SDK
| Сценарий | Решение |
|---|---|
| Интерактивная работа | Claude.ai / Claude Desktop |
| Разработка с IDE | Claude Code |
| Автоматизация, backend | Claude Agent SDK |
| Мульти-агентные системы | Claude Agent SDK |
| Кастомные приложения | Claude Agent SDK |
Базовая структура агента
python
from anthropic import Anthropic
from anthropic.types.beta import BetaMessageParam
client = Anthropic()
def run_agent(system_prompt: str, user_message: str) -> str:
"""Запуск простого агента."""
messages: list[BetaMessageParam] = [
{"role": "user", "content": user_message}
]
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=4096,
system=system_prompt,
messages=messages
)
return response.content[0].text
# Использование
result = run_agent(
system_prompt="Ты — эксперт по анализу данных.",
user_message="Объясни, что такое ROAS"
)
print(result)Агент с инструментами
python
tools = [
{
"name": "read_file",
"description": "Читает содержимое файла",
"input_schema": {
"type": "object",
"properties": {
"path": {"type": "string", "description": "Путь к файлу"}
},
"required": ["path"]
}
}
]
def execute_tool(name: str, input: dict) -> str:
if name == "read_file":
with open(input["path"]) as f:
return f.read()
return "Unknown tool"
def run_agent_with_tools(system_prompt: str, user_message: str) -> str:
messages = [{"role": "user", "content": user_message}]
while True:
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=4096,
system=system_prompt,
messages=messages,
tools=tools
)
# Если нет tool_use, возвращаем ответ
if response.stop_reason == "end_turn":
return response.content[0].text
# Обрабатываем tool calls
for block in response.content:
if block.type == "tool_use":
result = execute_tool(block.name, block.input)
messages.append({"role": "assistant", "content": response.content})
messages.append({
"role": "user",
"content": [{"type": "tool_result", "tool_use_id": block.id, "content": result}]
})Загрузка навыков в агента
python
def load_skill(skill_path: str) -> str:
"""Загружает навык из папки."""
skill_md = Path(skill_path) / "SKILL.md"
return skill_md.read_text()
def run_agent_with_skill(skill_path: str, user_message: str) -> str:
skill_content = load_skill(skill_path)
system_prompt = f"""Ты — AI-агент с навыком:
{skill_content}
Используй инструкции из навыка при ответе на запросы."""
return run_agent_with_tools(system_prompt, user_message)Важно
SDK даёт низкоуровневый контроль, но требует больше кода. Для простых задач достаточно Claude.ai или Claude Code.
Начните с простого агента без инструментов, затем добавляйте функциональность постепенно.
Вопросы для размышления
- •Какие задачи в вашей компании требуют программного управления агентами?
- •Где SDK предпочтительнее Claude.ai?
