Разработка с 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

Генерация тестовых наборов данных для оценки подсказок Claude

Разработка эффективных подсказок (prompts) для больших языковых моделей (LLM), таких как Claude, — это и искусство, и наука. Чтобы убедиться, что ваша подсказка работает так, как задумано, и стабильно выдает высококачественные результаты, необходимо систематически ее оценивать. Первый шаг в этом процессе — создание надежной подсказки, а затем — генерация репрезентативных тестовых данных, чтобы проверить ее производительность в различных сценариях. В этом уроке мы рассмотрим, как настроить систему для генерации таких тестовых данных, используя самого Claude.

Цель нашей подсказки: генерация AWS-специфичного кода

Представьте, что мы разрабатываем подсказку для Claude, которая должна помогать пользователям писать код, специфичный для Amazon Web Services (AWS). Наша подсказка должна уметь генерировать три конкретных типа вывода для различных сценариев использования AWS:

Ключевое требование к этой подсказке заключается в том, что при запросе помощи по определенной задаче Claude должен возвращать чистый вывод в одном из этих форматов, без каких-либо дополнительных объяснений, заголовков или подвалов. Например, если пользователь просит JSON-конфигурацию для S3-бакета, Claude должен вернуть только сам JSON-объект.

Вот как может выглядеть наша отправная точка для такой подсказки (версия 1):

prompt = f"""
Пожалуйста, предоставьте решение для следующей задачи:
{task}
"""

Здесь {task} — это переменная, куда будет подставляться конкретная задача пользователя.

Создание набора данных для оценки

Набор данных для оценки (evaluation dataset) — это коллекция входных данных, которые мы будем подавать в нашу основную подсказку. Для каждой комбинации подсказки и входных данных мы будем запускать подсказку и анализировать полученные результаты. Это позволяет нам проверить, насколько хорошо подсказка справляется с разнообразными запросами и соответствует нашим требованиям к формату и содержанию.

Наш набор данных будет представлять собой массив объектов JSON, где каждый объект содержит свойство "task", описывающее, что мы хотим, чтобы Claude выполнил. Существует два основных способа создания такого набора данных:

  1. Вручную: Мы можем самостоятельно придумать и записать каждую задачу. Это может быть трудоемко и не всегда охватывает все возможные сценарии.
  2. Автоматически: Мы можем использовать самого Claude для генерации этого набора данных. Это не только экономит время, но и позволяет генерировать более разнообразные и непредвзятые тестовые случаи.

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

Автоматическая генерация тестовых данных с помощью Claude

Использование Claude для генерации собственного набора тестовых данных — это мощный подход. Мы фактически просим Claude создать задачи, которые затем будут использоваться для оценки другой подсказки Claude. Для этого мы создадим специальную "мета-подсказку", которая инструктирует Claude, какой формат и содержание должны иметь тестовые задачи.

Наша "мета-подсказка" будет выглядеть примерно так:

prompt = """
Сгенерируйте набор данных для оценки подсказок. Набор данных будет использоваться для оценки подсказок, которые генерируют код на Python, JSON или Regex специально для задач, связанных с AWS. Сгенерируйте массив объектов JSON, каждый из которых представляет задачу, требующую Python, JSON или Regex для выполнения.

Пример вывода:
```json
[
{
"task": "Описание задачи",
},
...дополнительные
]
```

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

Пожалуйста, сгенерируйте 3 объекта.
"""

Эта подсказка четко определяет формат вывода (массив JSON-объектов с полем "task") и накладывает ограничения на тип генерируемых задач (AWS-специфичные, Python/JSON/Regex, краткие). Мы также просим сгенерировать определенное количество объектов (в данном случае, 3).

Надежный парсинг JSON с помощью префиллинга и стоп-последовательностей

Чтобы гарантировать, что Claude всегда возвращает корректный JSON, который мы можем легко разобрать, мы используем две важные техники при взаимодействии с API:

  1. Префиллинг (Prefilling): Мы начинаем ответ Claude с определенной строки. В нашем случае, после отправки "мета-подсказки" пользователя, мы сразу же добавляем сообщение ассистента, которое содержит начало JSON-блока: "```json". Это явно указывает Claude, что он должен начать свой ответ с JSON-кода.
  2. Стоп-последовательности (Stop Sequences): Мы указываем API, что Claude должен прекратить генерацию, как только он встретит определенную последовательность символов. В нашем случае, это "```" (три обратных апострофа), которые обычно используются для закрытия блоков кода в Markdown. Это гарантирует, что Claude не будет генерировать никаких дополнительных объяснений или текста после завершения JSON-объекта.

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

Пример генерации набора данных

После определения "мета-подсказки" и настройки параметров API (модель, температура, стоп-последовательности), мы можем запустить процесс генерации. Claude обработает нашу "мета-подсказку" и вернет массив JSON-объектов, каждый из которых будет содержать описание задачи.

Например, после выполнения функции генерации, мы можем получить что-то вроде этого:

[
  {
    "task": "Создайте JSON-конфигурацию для S3-бакета с публичным доступом для чтения объектов."
  },
  {
    "task": "Напишите регулярное выражение для валидации ARN AWS (Amazon Resource Name)."
  },
  {
    "task": "Разработайте простую функцию Python, которая использует Boto3 для получения списка всех EC2-инстансов в указанном регионе."
  }
]

Как видите, каждый объект содержит четко сформулированную задачу, соответствующую нашим требованиям: она специфична для AWS и требует генерации JSON, Regex или Python-кода. Эти задачи затем могут быть использованы для тестирования нашей основной подсказки.

Сохранение набора данных

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

Сохранение набора данных в файл — это стандартная практика, которая упрощает управление версиями, совместную работу и интеграцию с другими инструментами оценки.

Заключение

С помощью этого систематического подхода вы теперь обладаете мощным инструментом для автоматической генерации тестовых данных. Это позволяет эффективно оценивать, насколько хорошо ваши подсказки справляются с различными типами задач, связанных с кодированием для AWS. Автоматизация генерации тестовых данных с использованием самого Claude значительно ускоряет процесс и повышает качество оценки подсказок, что является ключевым элементом в разработке надежных и производительных систем на базе LLM.