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

При разработке приложений на основе больших языковых моделей (LLM), таких как Claude, часто возникает необходимость не просто получить ответ, а получить его в определенном стиле, тоне или с учетом конкретной роли. Стандартные ответы Claude, хотя и точны, могут быть слишком общими для специализированных задач. Именно здесь на помощь приходят системные промпты (System Prompts) — мощный инструмент для тонкой настройки поведения Claude, позволяющий превратить его из универсального помощника в специализированного эксперта, соответствующего вашим уникальным требованиям.

Что такое системные промпты и зачем они нужны?

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

Почему системные промпты так важны?

Пример: Идеальный репетитор по математике

Представьте, что вы создаете чат-бота-репетитора по математике. Когда студент спрашивает: "Как решить 5x + 2 = 3 для x?", вы хотите, чтобы Claude вел себя как настоящий учитель, а не просто выдавал готовый ответ. Хороший репетитор по математике должен:

Вы определенно не хотите, чтобы Claude:

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

Как работают системные промпты?

Системные промпты предоставляют Claude руководящие указания о том, как реагировать. Вы определяете их как обычные текстовые строки и передаете их в вызов функции create при обращении к Claude API. Ключевые преимущества заключаются в следующем:

Вот базовая структура того, как системный промпт передается в Claude API:

system_prompt = """
Вы терпеливый репетитор по математике.
Не отвечайте напрямую на вопросы студента.
Направляйте его к решению шаг за шагом.
"""

# ... (инициализация клиента и сообщений) ...

client.messages.create(
    model="claude-3-opus-20240229", # Пример модели
    messages=[
        {"role": "user", "content": "Как решить 5x + 2 = 3 для x?"}
    ],
    max_tokens=1000,
    system=system_prompt # Здесь передается системный промпт
)

В этом примере строка system_prompt содержит инструкции для Claude. Когда вы вызываете метод client.messages.create, вы передаете эту строку через параметр system. Claude интерпретирует эти инструкции как свои основные правила поведения для текущей сессии.

Влияние системного промпта: До и После

Давайте рассмотрим, как системный промпт меняет поведение Claude на примере математического репетитора.

Без системного промпта:

Если студент спрашивает "Как решить 5x + 2 = 3 для x?", Claude без системного промпта, скорее всего, выдаст что-то вроде:

"Чтобы решить уравнение 5x + 2 = 3 для x, выполните следующие шаги: 1. Вычтите 2 из обеих сторон: 5x + 2 - 2 = 3 - 2, что дает 5x = 1. 2. Разделите обе стороны на 5: 5x / 5 = 1 / 5, что дает x = 1/5. Таким образом, x = 1/5."

Это прямое и правильное решение, но оно не способствует активному обучению.

С системным промптом "Терпеливый репетитор по математике":

С тем же вопросом и активированным системным промптом, поведение Claude меняется кардинально. Вместо предоставления полного решения, Claude задает наводящие вопросы, например:

"Отличный вопрос! Чтобы начать, что, по вашему мнению, было бы хорошим первым шагом для того, чтобы изолировать x? Подумайте, какую операцию нам может понадобиться выполнить с обеими сторонами уравнения, чтобы начать перемещать члены?"

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

Гибкость в разработке: Динамические системные промпты

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

Вот пример того, как можно реализовать такую гибкую функцию:

def chat(messages, system=None):
    params = {
        "model": "claude-3-opus-20240229",
        "max_tokens": 1000,
        "messages": messages,
    }
    if system: # Условно добавляем параметр 'system', если он предоставлен
        params["system"] = system
    
    message = client.messages.create(**params)
    return message.content[0].text

Этот подход учитывает важную деталь: Claude API не принимает параметр system со значением None (или пустым). Поэтому вам нужно условно включать параметр system только тогда, когда он действительно предоставлен. Теперь вы можете вызывать свою функцию chat как с системным промптом, так и без него:

# Без системного промпта
user_messages = [{"role": "user", "content": "Расскажи о погоде."}]
answer_generic = chat(user_messages)
print(f"Ответ без промпта: {answer_generic}")

# С системным промптом
math_tutor_system = """
Вы терпеливый репетитор по математике.
Не отвечайте напрямую на вопросы студента.
Направляйте его к решению шаг за шагом.
"""
math_question = [{"role": "user", "content": "Как решить 5x + 2 = 3 для x?"}]
answer_tutor = chat(math_question, system=math_tutor_system)
print(f"Ответ репетитора: {answer_tutor}")

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

Заключение

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