Реализация Chain-of-Thought (CoT) промптинга

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Реализация Chain-of-Thought (CoT) промптинга
Простая
~1 рабочий день
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Реализация Chain-of-Thought (CoT) промптинга

Chain-of-Thought (CoT) — техника, при которой модель генерирует промежуточные шаги рассуждения перед финальным ответом. Улучшает точность на задачах, требующих многошагового вывода: математические расчёты, логические цепочки, классификация со сложными критериями.

Zero-Shot CoT

from openai import OpenAI

client = OpenAI()

def cot_query(question: str, think_step_by_step: bool = True) -> str:
    if think_step_by_step:
        question += "\n\nДумай шаг за шагом перед тем как дать финальный ответ."

    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": question}],
        temperature=0,
    )
    return response.choices[0].message.content

# Сравнение
question = "Компания продала 1200 товаров по 850 руб. Скидка для заказов > 1000 единиц — 15%. Какова итоговая выручка?"

print(cot_query(question, think_step_by_step=False))  # Прямой ответ — риск ошибки
print(cot_query(question, think_step_by_step=True))   # С рассуждением — точнее

Few-Shot CoT: примеры рассуждений

FEW_SHOT_COT_EXAMPLES = [
    {
        "question": "Склад: 500 единиц. Продано 30% в понедельник, 20% от остатка во вторник. Сколько осталось?",
        "reasoning": """Шаг 1: Продано в понедельник: 500 × 0.30 = 150 единиц
Шаг 2: Остаток после понедельника: 500 - 150 = 350 единиц
Шаг 3: Продано во вторник: 350 × 0.20 = 70 единиц
Шаг 4: Финальный остаток: 350 - 70 = 280 единиц""",
        "answer": "280 единиц",
    },
    {
        "question": "Если A > B и B > C, а C = 10, A = 25, верно ли что B находится между 10 и 25?",
        "reasoning": """Шаг 1: Дано: A > B > C, C = 10, A = 25
Шаг 2: Из A > B следует B < 25
Шаг 3: Из B > C следует B > 10
Шаг 4: Значит 10 < B < 25""",
        "answer": "Да, B находится между 10 и 25",
    },
]

def build_few_shot_cot_prompt(examples: list[dict], question: str) -> str:
    prompt_parts = []

    for ex in examples:
        prompt_parts.append(f"""Вопрос: {ex['question']}

Рассуждение:
{ex['reasoning']}

Ответ: {ex['answer']}

---""")

    prompt_parts.append(f"Вопрос: {question}\n\nРассуждение:")
    return "\n\n".join(prompt_parts)

Structured CoT для бизнес-задач

STRUCTURED_COT_TEMPLATE = """Ты — аналитик, решающий задачи методично.

Для каждой задачи:
1. ПОНИМАНИЕ: Что нужно найти? Какие данные даны?
2. ПЛАН: Опиши шаги решения
3. ВЫПОЛНЕНИЕ: Реши пошагово с промежуточными результатами
4. ПРОВЕРКА: Проверь логичность ответа
5. ОТВЕТ: Итоговый ответ в одном предложении

Задача: {task}"""

# Применение для кредитного скоринга
credit_decision = client.chat.completions.create(
    model="gpt-4o",
    messages=[{
        "role": "system",
        "content": STRUCTURED_COT_TEMPLATE.format(
            task="""Клиент запрашивает кредит.
Данные: доход 85 000 руб/мес, расходы 45 000 руб/мес, кредитная история — 1 просрочка 2 года назад (7 дней), текущих кредитов нет, стаж работы 3 года.
Одобрить ли кредит на 500 000 руб на 3 года?"""
        )
    }],
    temperature=0,
)

CoT для классификации с обоснованием

async def classify_with_reasoning(
    text: str,
    categories: list[str],
    criteria: dict[str, str],
) -> dict:
    """Классификация с объяснением через CoT"""

    criteria_text = "\n".join([f"- {cat}: {desc}" for cat, desc in criteria.items()])

    response = await client.chat.completions.create(
        model="gpt-4o",
        messages=[{
            "role": "user",
            "content": f"""Классифицируй текст в одну из категорий.

Категории и критерии:
{criteria_text}

Текст: {text}

Рассуждай вслух:
1. Какие признаки присутствуют в тексте?
2. Какой категории они соответствуют?
3. Есть ли противоречивые признаки?
4. Итоговая категория и уверенность

Верни JSON: {{"category": "...", "confidence": 0.0-1.0, "reasoning": "краткое обоснование"}}"""
        }],
        temperature=0,
        response_format={"type": "json_object"},
    )

    return json.loads(response.choices[0].message.content)

Когда CoT не нужен

CoT повышает качество на задачах с многошаговым выводом, но:

  • Для простых фактических вопросов — избыточен и медленнее
  • Для творческих задач — ограничивает вариативность
  • При стримминге — пользователь видит «думание» перед ответом

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

Сроки

  • Zero-shot CoT для задачи: 0.5–1 день
  • Few-shot CoT с примерами: 1–2 дня
  • Structured CoT с eval: 3–5 дней