Разработка с Claude API

Запросы, потоковые ответы, tool use, структурированный вывод и стоимость.

92 уроков, первые 3 бесплатно. Полный доступ: 1490 руб.

Уроки курса

  1. Welcome to the course
  2. Overview of Claude models
  3. Accessing the API
  4. Getting an API key
  5. Making a request
  6. Multi-Turn conversations
  7. Chat exercise
  8. System prompts
  9. System prompts exercise
  10. Temperature
  11. Course satisfaction survey
  12. Response streaming
  13. Structured data
  14. Structured data exercise
  15. Quiz on accessing Claude with the API
  16. Prompt evaluation
  17. A typical eval workflow
  18. Generating test datasets
  19. Running the eval
  20. Model based grading
  21. Code based grading
  22. Exercise on prompt evals
  23. Quiz on prompt evaluation
  24. Prompt engineering
  25. Being clear and direct
  26. Being specific
  27. Structure with XML tags
  28. Providing examples
  29. Exercise on prompting
  30. Quiz on prompt engineering techniques
  31. Introducing tool use
  32. Project overview
  33. Tool functions
  34. Tool schemas
  35. Handling message blocks
  36. Sending tool results
  37. Multi-turn conversations with tools
  38. Implementing multiple turns
  39. Using multiple tools
  40. Fine grained tool calling
  41. The text edit tool
  42. The web search tool
  43. Quiz on tool use with Claude
  44. Introducing Retrieval Augmented Generation
  45. Text chunking strategies
  46. Text embeddings
  47. The full RAG flow
  48. Implementing the RAG flow
  49. BM25 lexical search
  50. A Multi-Index RAG pipeline
  51. Extended thinking
  52. Image support
  53. PDF support
  54. Citations
  55. Prompt caching
  56. Rules of prompt caching
  57. Prompt caching in action
  58. Code execution and the Files API
  59. Quiz on features of Claude
  60. Introducing MCP
  61. MCP clients
  62. Project setup
  63. Defining tools with MCP
  64. The server inspector
  65. Implementing a client
  66. Defining resources
  67. Accessing resources
  68. Defining prompts
  69. Prompts in the client
  70. MCP review
  71. Quiz on Model Context Protocol
  72. Anthropic apps
  73. Claude Code setup
  74. Claude Code in action
  75. Enhancements with MCP servers
  76. Agents and workflows
  77. Parallelization workflows
  78. Chaining workflows
  79. Routing workflows
  80. Agents and tools
  81. Environment inspection
  82. Workflows vs agents
  83. Quiz on Agents and Workflows
  84. Final Assessment
  85. Course Wrap Up
  86. What You'll Learn
  87. What You'll Learn
  88. What You'll Learn
  89. What You'll Learn
  90. What You'll Learn
  91. What You'll Learn
  92. What You'll Learn

Введение в определение инструментов с помощью MCP и Python SDK

В мире больших языковых моделей (LLM) таких как Claude, способность взаимодействовать с внешними системами и данными является ключевой для выполнения сложных и полезных задач. Сам по себе Claude — это мощный мыслитель, но ему нужны "руки" и "глаза", чтобы читать документы, обновлять базы данных или вызывать внешние API. Именно здесь на помощь приходит протокол MCP (Multi-tool Co-op Protocol) и его официальный Python SDK.

MCP позволяет нам определять набор инструментов, которые Claude может использовать. Эти инструменты — это, по сути, функции, которые Claude может вызывать, передавая им параметры и получая результаты. Однако ручное написание сложных JSON schema для каждого инструмента может быть трудоемким и подверженным ошибкам. Python SDK для MCP значительно упрощает этот процесс, позволяя разработчикам определять инструменты с помощью привычных конструкций Python, таких как декораторы и аннотации типов.

В этом уроке мы рассмотрим, как создать простой сервер MCP и определить два основных инструмента для управления документами, хранящимися в памяти: один для чтения содержимого документов и другой для их обновления с помощью операций поиска и замены. Это продемонстрирует элегантность и эффективность подхода SDK.

Настройка сервера MCP

Создание сервера MCP с помощью Python SDK невероятно просто. Вы можете инициализировать полноценный сервер всего одной строкой кода. Для этого используется класс FastMCP из модуля mcp.server.fastmcp.

Вот как это выглядит:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("DocumentMCP", log_level="ERROR")

В этом примере мы создаем экземпляр сервера FastMCP с именем "DocumentMCP". Параметр log_level="ERROR" настраивает уровень логирования, чтобы выводить только критические ошибки, делая вывод более чистым.

Для нашей реализации документы будут храниться в простом словаре Python, где ключами являются идентификаторы документов, а значениями — их содержимое. Это имитирует простую базу данных или файловую систему для демонстрационных целей:

docs = {
    "deposition.md": "This deposition covers the testimony of Angela Smith, P.E.",
    "report.pdf": "The report details the state of a 20m condenser tower.",
    "financials.docx": "These financials outline the project's budget and expenditure",
    "outlook.pdf": "This document presents the projected future performance of the",
    "plan.md": "The plan outlines the steps for the project's implementation.",
    "spec.txt": "These specifications define the technical requirements for the equipment"
}

Этот словарь docs будет доступен для наших инструментов, позволяя им читать и изменять содержимое документов.

Определение инструментов с помощью декораторов

Python SDK преобразует процесс создания инструментов из многословного и подверженного ошибкам в чистый и читаемый. Вместо того чтобы вручную писать длинные JSON schema, вы используете декораторы Python и аннотации типов. SDK автоматически генерирует необходимую JSON schema, которую Claude использует для понимания доступных инструментов и их параметров.

Создание инструмента для чтения документов

Первый инструмент позволит Claude читать содержимое любого документа по его идентификатору. Это фундаментальная операция, которая часто требуется для обработки информации.

Вот полная реализация:

from pydantic import Field

@mcp.tool(
    name="read_doc_contents",
    description="Read the contents of a document and return it as a string."
)
def read_document(
    doc_id: str = Field(description="Id of the document to read")
):
    if doc_id not in docs:
        raise ValueError(f"Doc with id {doc_id} not found")
    return docs[doc_id]

Давайте разберем этот код:

Декоратор автоматически генерирует JSON schema, которую Claude использует для понимания этого инструмента. Благодаря Pydantic, мы получаем не только описание, но и встроенную валидацию типов для параметров.

Создание инструмента для редактирования документов

Второй инструмент позволяет Claude выполнять простые операции поиска и замены в содержимом документов. Это полезно для внесения небольших корректировок или стандартизации текста.

Вот его реализация:

@mcp.tool(
    name="edit_document",
    description="Edit a document by replacing a string in the documents content with a new string."
)
def edit_document(
    doc_id: str = Field(description="Id of the document that will be edited"),
    old_str: str = Field(description="The text to replace. Must match exactly, including whitespace."),
    new_str: str = Field(description="The new text to insert in place of the old text.")
):
    if doc_id not in docs:
        raise ValueError(f"Doc with id {doc_id} not found")
    docs[doc_id] = docs[doc_id].replace(old_str, new_str)
    return f"Document '{doc_id}' updated successfully."

Этот инструмент принимает три параметра:

Реализация использует встроенный метод .replace() строк Python для простоты. Как и в случае с инструментом для чтения, здесь также присутствует базовая обработка ошибок: если документ с указанным doc_id не найден, генерируется ValueError.

Обработка ошибок в инструментах

Оба наших инструмента включают базовую обработку ошибок, чтобы управлять случаями, когда Claude запрашивает несуществующий документ. Когда предоставляется неверный doc_id, инструменты генерируют исключение ValueError с описательным сообщением. Это сообщение передается обратно Claude, который может понять его и потенциально скорректировать свои действия, например, запросить уточнение у пользователя или попробовать другой doc_id.

Эффективная обработка ошибок в инструментах критически важна для создания надежных систем, управляемых LLM. Она позволяет Claude быть более устойчивым к неверным входным данным и более "умным" в своих попытках выполнить задачу.

Ключевые преимущества подхода SDK

Использование Python SDK для MCP значительно упрощает разработку инструментов для Claude, предлагая ряд существенных преимуществ:

Python SDK для MCP превращает то, что раньше было сложным процессом написания определений инструментов, в нечто естественное и эффективное для Python-разработчиков. Вы можете сосредоточиться на логике, которую должны выполнять ваши инструменты, в то время как SDK берет на себя все детали протокола.