Использование Chain-of-Thought (CoT) рассуждений с библиотекой Mirascope

В этом руководстве мы рассмотрим, как реализовать рассуждения Chain-of-Thought (CoT) с помощью библиотеки Mirascope и модели Groq’s LLaMA 3. Вместо того чтобы модель сразу выдавала ответ, подход CoT побуждает её разбить задачу на логические шаги — подобно тому, как это сделал бы человек. Этот подход повышает точность, прозрачность и помогает более надёжно решать сложные многошаговые задачи.

Мы проведём вас через настройку схемы, определение пошаговых вызовов для рассуждений, генерацию окончательных ответов и визуализацию процесса мышления в структурированном виде.

Установка зависимостей

Для начала работы установите необходимые зависимости:

“`python
!pip install “mirascope[groq]”
!pip install datetime
“`

Получение ключа API Groq

Для выполнения вызовов LLM потребуется ключ API Groq. Вы можете получить его по адресу: https://console.groq.com/keys

Импортирование библиотек и определение схемы Pydantic

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

“`python
from typing import Literal

from mirascope.core import groq
from pydantic import BaseModel, Field

history: list[dict] = []

class COTResult(BaseModel):
title: str = Field(…, desecription=”The title of the step”)
content: str = Field(…, description=”The output content of the step”)
nextaction: Literal[“continue”, “finalanswer”] = Field(
…, description=”The next action to take”
)
“`

Определение функций пошагового рассуждения и окончательного ответа

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

“`python
@groq.call(“llama-3.3-70b-versatile”, jsonmode=True, responsemodel=COTResult)
def cotstep(prompt: str, stepnumber: int, previous_steps: str) -> str:
return f”””
You are an expert AI assistant that explains your reasoning step by step.
For this step, provide a title that describes what you’re doing, along with the content.
Decide if you need another step or if you’re ready to give the final answer.

Guidelines:
– Use AT MOST 5 steps to derive the answer.
– Be aware of your limitations as an LLM and what you can and cannot do.
– In your reasoning, include exploration of alternative answers.
– Consider you may be wrong, and if you are wrong in your reasoning, where it would be.
– Fully test all other possibilities.
– YOU ARE ALLOWED TO BE WRONG. When you say you are re-examining
– Actually re-examine, and use another approach to do so.
– Do not just say you are re-examining.

IMPORTANT: Do not use code blocks or programming examples in your reasoning. Explain your process in plain language.

This is step number {step_number}.

Question: {prompt}

Previous steps:
{previous_steps}
“””

@groq.call(“llama-3.3-70b-versatile”)
def final_answer(prompt: str, reasoning: str) -> str:
return f”””
Based on the following chain of reasoning, provide a final answer to the question.
Only provide the text response without any titles or preambles.
Retain any formatting as instructed by the original prompt, such as exact formatting for free response or multiple choice.

Question: {prompt}

Reasoning:
{reasoning}

Final Answer:
“””
“`

Генерация и отображение ответов Chain-of-Thought

Этот раздел определяет две ключевые функции для управления полным циклом рассуждений Chain-of-Thought:

  • generatecotresponse управляет итеративным процессом рассуждений. Он отправляет запрос пользователя модели пошагово, отслеживает содержание каждого шага, заголовок и время отклика и останавливается, когда модель сигнализирует о достижении окончательного ответа или после максимум 5 шагов. Затем он вызывает final_answer для получения чёткого вывода на основе накопленных рассуждений.

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

“`python
def generatecotresponse(
user_query: str,
) -> tuple[list[tuple[str, str, float]], float]:
steps: list[tuple[str, str, float]] = []
totalthinkingtime: float = 0.0
step_count: int = 1
reasoning: str = “”
previous_steps: str = “”

while True:
start_time: datetime = datetime.now()
cotresult = cotstep(userquery, stepcount, previous_steps)
end_time: datetime = datetime.now()
thinkingtime: float = (endtime – starttime).totalseconds()

steps.append(
(
f”Step {stepcount}: {cotresult.title}”,
cot_result.content,
thinking_time,
)
)
totalthinkingtime += thinking_time

reasoning += f”\n{cot_result.content}\n”
previoussteps += f”\n{cotresult.content}\n”

if cotresult.nextaction == “finalanswer” or stepcount >= 5:
break

step_count += 1

# Generate final answer
start_time = datetime.now()
finalresult: str = finalanswer(user_query, reasoning).content
end_time = datetime.now()
thinkingtime = (endtime – starttime).totalseconds()
totalthinkingtime += thinking_time

steps.append((“Final Answer”, finalresult, thinkingtime))

return steps, totalthinkingtime

def displaycotresponse(
steps: list[tuple[str, str, float]], totalthinkingtime: float
) -> None:
for title, content, thinking_time in steps:
print(f”{title}:”)
print(content.strip())
print(f”Thinking time: {thinking_time:.2f} seconds\n”)

print(f”Total thinking time: {totalthinkingtime:.2f} seconds“)
“`

Запуск рабочего процесса Chain-of-Thought

Функция run инициирует полный процесс рассуждений Chain-of-Thought (CoT), отправляя многошаговую математическую задачу на модель. Она начинается с печати вопроса пользователя, затем использует generatecotresponse для вычисления пошагового следа рассуждений. Эти шаги вместе с общим временем обработки отображаются с помощью displaycotresponse.

“`python
def run() -> None:
question: str = “If a train leaves City A at 9:00 AM traveling at 60 km/h, and another train leaves City B (which is 300 km away from City A) at 10:00 AM traveling at 90 km/h toward City A, at what time will the trains meet?”
print(“(User):”, question)
# Generate COT response
steps, totalthinkingtime = generatecotresponse(question)
displaycotresponse(steps, totalthinkingtime)

# Add the interaction to the history
history.append({“role”: “user”, “content”: question})
history.append(
{“role”: “assistant”, “content”: steps[-1][1]}
) # Add only the final answer to the history

Run the function

run()
“`

1. Какие основные преимущества даёт использование подхода Chain-of-Thought (CoT) в работе с моделями искусственного интеллекта?

Ответ: Подход CoT повышает точность, прозрачность и помогает более надёжно решать сложные многошаговые задачи, разбивая их на логические шаги.

2. Какие шаги необходимо выполнить для установки зависимостей и получения ключа API Groq для работы с библиотекой Mirascope и моделью Groq’s LLaMA 3?

Ответ: Для начала работы необходимо установить зависимости с помощью команд `!pip install “mirascope[groq]”` и `!pip install datetime`, а затем получить ключ API Groq по адресу https://console.groq.com/keys.

3. Какие функции составляют основу рабочего процесса рассуждений Chain-of-Thought (CoT) в представленном руководстве?

Ответ: Основу рабочего процесса составляют функции `cotstep` и `finalanswer`. Функция `cotstep` позволяет модели мыслить итеративно, а функция `finalanswer` объединяет все рассуждения в единый целенаправленный ответ.

4. Какие параметры используются для определения схемы Pydantic в представленном руководстве?

Ответ: Для определения схемы Pydantic используются параметры `title`, `content` и `nextaction`. Параметр `title` описывает заголовок шага, `content` — содержание шага, а `nextaction` указывает, следует ли модели продолжить рассуждения или вернуть окончательный ответ.

5. Какие функции используются для управления полным циклом рассуждений Chain-of-Thought в представленном руководстве?

Ответ: Для управления полным циклом рассуждений используются функции `generatecotresponse` и `displaycotresponse`. Функция `generatecotresponse` управляет итеративным процессом рассуждений, а функция `displaycotresponse` выводит пошаговую разбивку вместе со временем, затраченным на каждый шаг, а затем окончательный ответ и общее время обработки.

Источник

Оставьте комментарий