Разработка с 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, которые способны генерировать программный код, недостаточно просто убедиться, что ответ выглядит осмысленным. Крайне важно также проверить, что сгенерированный код имеет действительный синтаксис и соответствует требуемому формату. Именно здесь на помощь приходит система оценки кода (code-based grading).

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

Принципы работы системы оценки кода

Система оценки кода валидирует два ключевых аспекта ответов, генерируемых ИИ:

Первые два критерия обрабатываются непосредственно "оценщиком кода" (code grader). Однако существует и третий важный аспект: насколько точно ответ соответствует поставленной задаче и является ли он функционально правильным. Этот аспект оценивается "оценщиком модели" (model grader), который может использовать более сложные методы, включая выполнение кода или сравнение с эталонными решениями. Совместное использование этих двух типов оценщиков обеспечивает всестороннюю и комплексную проверку качества сгенерированного кода.

Функции валидации синтаксиса

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

import json
import ast
import re

def validate_json(text):
    try:
        json.loads(text.strip())
        return 10  # Идеальная оценка за корректный синтаксис JSON
    except json.JSONDecodeError:
        return 0   # Ошибка синтаксиса JSON

def validate_python(text):
    try:
        ast.parse(text.strip())
        return 10  # Идеальная оценка за корректный синтаксис Python
    except SyntaxError:
        return 0   # Ошибка синтаксиса Python

def validate_regex(text):
    try:
        re.compile(text.strip())
        return 10  # Идеальная оценка за корректный синтаксис Regex
    except re.error:
        return 0   # Ошибка синтаксиса Regex

Каждая из этих функций принимает текстовую строку, пытается распарсить ее в соответствующем формате (JSON, Python или Regex) и возвращает оценку. Если парсинг проходит успешно, функция возвращает 10, что означает идеальную оценку за синтаксическую корректность. Если же происходит ошибка парсинга (например, json.JSONDecodeError для JSON, SyntaxError для Python или re.error для Regex), это указывает на неверный синтаксис, и функция возвращает 0.

Подготовка данных для оценки

Чтобы оценщик кода знал, какой валидатор использовать для конкретного тестового случая, ваши тестовые данные должны явно указывать ожидаемый формат вывода. Это можно сделать, добавив соответствующее поле в структуру данных каждого тестового примера. Например, если вы ожидаете JSON, в тестовом случае должно быть указано "expected_format": "json".

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

Улучшение качества генерируемого кода через промты

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

Вот несколько рекомендаций по улучшению ясности промтов:

Кроме того, вы можете использовать предварительно заполненное сообщение ассистента с блоками кода, чтобы побудить модель возвращать только "сырой" код. Например, при использовании API или SDK вы можете добавить в историю диалога сообщение от ассистента, которое начинает блок кода:

add_assistant_message(messages, "```code")

Эта техника подсказывает Claude, что он должен начать генерировать содержимое кода, не требуя предварительного указания, будет ли это Python, JSON или Regex. Модель "понимает", что от нее ожидается продолжение кодового блока, что значительно повышает вероятность получения чистого, синтаксически корректного вывода.

Объединение оценок для комплексного анализа

Финальный шаг в процессе оценки — это объединение оценки от "оценщика модели" (model grader) с оценкой от "оценщика кода" (code grader). Простой подход заключается в вычислении среднего значения:

model_grade = grade_by_model(test_case, output)
model_score = model_grade["score"]
syntax_score = grade_syntax(output, test_case) # Предполагается, что grade_syntax вызывает validate_json/python/regex
score = (model_score + syntax_score) / 2

Такой подход придает равный вес как качеству содержимого (насколько хорошо код решает задачу), так и технической корректности (синтаксис и формат). Однако вы можете скорректировать эти веса в зависимости от того, что более важно для вашего конкретного сценария использования. Например, если синтаксическая корректность абсолютно критична, вы можете придать syntax_score больший вес, чем model_score.

Тестирование и итеративное улучшение

После того как вы реализовали систему оценки кода, запустите вашу оценку, чтобы получить базовый показатель (baseline score). Сам по себе этот показатель не является ни "хорошим", ни "плохим" — важно то, сможете ли вы улучшить его, уточняя свои промты. Это дает вам количественный способ измерения прогресса в инженерии промтов (prompt engineering) вместо того, чтобы полагаться на субъективную оценку.

Регулярное тестирование и анализ оценок позволяют выявлять слабые места в промтах и итеративно улучшать их. Например, если syntax_score постоянно низкий для определенного типа задач, это может указывать на необходимость более четких инструкций по форматированию или использованию техники add_assistant_message. Такой подход, основанный на данных, является ключом к разработке высококачественных и надежных решений на базе ИИ, способных генерировать функциональный и синтаксически корректный код.