OpenAI Assistant — помощник при анализе данных и расчетах

Последние изменения: 27.05.2025

Прежде чем приступить к настройкам, рекомендуем ознакомиться со статьей об общей логике правил автоматизации в Омнидеске или посмотреть краткое видеоруководство по правилам

Задача: делегировать расчеты ассистенту OpenAI.

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

Code Interpreter — это инструмент, который в обычных условиях может выполнять код, анализировать данные, строить графики и работать с файлами. Однако в рамках нашей интеграции рекомендуется использовать его только для базовых вычислений. Не пытайтесь запускать с его помощью визуализации, сложную обработку данных или загрузку файлов — это не поддерживается и приведет к ошибкам.

Логика работы: когда клиенту требуется расчет, сотрудник ставит метку «расчет стоимости» → срабатывает правило для измененных обращений, которое отправляет данные, необходимые для расчета, в адрес ассистента. Результат расчета добавляется в заметку.

Пример правила:

Демонстрация работы:

Пример инструкции для ассистента

Пример дан исключительно в иллюстративных целях и может рассматриваться как один из возможных подходов, но не как образец.

Код для обработки данных о доставке:

import pandas as pd
def load_data(path):
    try: return pd.read_csv(path)
    except: return f"Ошибка: {path}"
def calculate_delivery(data, origin, destination, grams):
    kg = grams / 1000
    filtered = data.query('Отправление == @origin and Прибытие == @destination')
    if filtered.empty: return "Нет доставки между городами"

    results = []
    for _, row in filtered.iterrows():
        min_kg = max(kg, row['Минимальный вес (г)']/1000)
        cost = max(row['Стоимость (копеек/кг)'] * min_kg / 100,
                   row['Стоимость (копеек/кг)'] * row['Минимальный вес (г)'] / 100000)
        insurance = row['Страховка (копеек/кг)'] * kg / 100

        results.append({
            'Тип': row['Тип доставки'],
            'Срок': row['Срок доставки (дни)'],
            'Стоимость': round(cost + insurance, 2)
        })

    return "\n".join([f"{i}. {r['Тип']} - {r['Срок']}дн, {r['Стоимость']}₽" 
                      for i, r in enumerate(results, 1)]) if results else "Нет вариантов"
# Использование
files = ['/mnt/data/file-3xq7PNbwpYmGMD2EAvhGG9', '/mnt/data/file-7RX7B3FPZb1vXR7JPPQa6x']
df = pd.concat([d for f in files if isinstance((d := load_data(f)), pd.DataFrame)], ignore_index=True)
print(calculate_delivery(df, 'Москва', 'Санкт-Петербург', 2000))

Примеры файлов, загруженных для Code Interpreter:

https://gist.github.com/cissav/8e5c2964a6039097ac020ccc3004f498

https://gist.github.com/cissav/9156b19a94843616b46bfdd40fbb0a53

Помогла ли вам статья?