Как развернуть помощника OpenAI на Flask?

Вопрос или проблема

Я был бы очень признателен за советы о том, как развернуть моего помощника OpenAI в виде приложения Flask. Я смог запустить помощника в своей локальной Python-среде и ранее смог создать версии Flask для Chat.Completions и Dalle. Но то, что работало там, кажется неприменимо для помощников.

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

from openai import OpenAI, OpenAIError
import os
from dotenv import load_dotenv
import logging
load_dotenv()
api_key = os.getenv('OPENAI_API_KEY')
client = OpenAI(api_key=api_key)
logging.basicConfig(level=logging.INFO)

# ШАГ 1 - СОЗДАТЬ ПОМОЩНИКА
assistant = client.beta.assistants.create(
  name="Math Tutor",
  instructions="Вы личный репетитор по математике. Пишите и запускайте код для решения математических задач.",
  tools=[{"type": "code_interpreter"}],
  model="gpt-4o",
)

# ШАГ 2 - СОЗДАТЬ ТЕМУ
thread = client.beta.threads.create()

# ШАГ 3 - ДОБАВИТЬ СООБЩЕНИЕ В ТЕМУ
message = client.beta.threads.messages.create(
  thread_id=thread.id,
  role="user",
  content="Мне нужно решить уравнение `3x + 11 = 14`. Ты можешь мне помочь?"
)

# ШАГ 4 - СОЗДАТЬ ЗАПУСК
from typing_extensions import override
from openai import AssistantEventHandler

# Сначала мы создаем класс EventHandler, чтобы определить
# как мы хотим обрабатывать события в потоке ответов.

class EventHandler(AssistantEventHandler):    
  @override
  def on_text_created(self, text) -> None:
    print(f"\nassistant > ", end="", flush=True)

  @override
  def on_text_delta(self, delta, snapshot):
    print(delta.value, end="", flush=True)

  def on_tool_call_created(self, tool_call):
    print(f"\nassistant > {tool_call.type}\n", flush=True)

  def on_tool_call_delta(self, delta, snapshot):
    if delta.type == 'code_interpreter':
      if delta.code_interpreter.input:
        print(delta.code_interpreter.input, end="", flush=True)
      if delta.code_interpreter.outputs:
        print(f"\n\noutput >", flush=True)
        for output in delta.code_interpreter.outputs:
          if output.type == "logs":
            print(f"\n{output.logs}", flush=True)

# Затем мы используем вспомогательную функцию `stream` SDK 
# с классом `EventHandler`, чтобы создать Запуск 
# и стримить ответ.

with client.beta.threads.runs.stream(
  thread_id=thread.id,
  assistant_id=assistant.id,
  instructions="Пожалуйста, обращайтесь к пользователю как к Джейн Доу. У пользователя премиум-аккаунт.",
  event_handler=EventHandler(),
) as stream:
  stream.until_done()

Я смог запустить помощника в своей локальной Python-среде и ранее смог создать версии Flask для Chat.Completions и Dalle. Но то, что работало там, кажется неприменимо для помощников.

Ответ или решение

Для внедрения OpenAI Assistant в приложение Flask, необходимо интегрировать предоставленный вами код, который уже работает в локальном окружении, с архитектурой Flask. Ниже приведены шаги и пример кода для развертывания вашего OpenAI Assistant как веб-приложения Flask.

Шаг 1: Создайте новое приложение Flask

Убедитесь, что у вас установлен Flask. Если его нет, вы можете установить его с помощью pip:

pip install Flask python-dotenv

Шаг 2: Настройка структуры проекта

Создайте структуру папок, например:

/my_flask_app
    app.py
    .env

Шаг 3: Напишите основной код Flask в app.py

from flask import Flask, request, jsonify
from openai import OpenAI, OpenAIError
import os
from dotenv import load_dotenv
import logging

load_dotenv()
api_key = os.getenv('OPENAI_API_KEY')
client = OpenAI(api_key=api_key)
logging.basicConfig(level=logging.INFO)

app = Flask(__name__)

# Глобальные переменные для хранения идентификаторов ассистента и потока
assistant_id = None
thread_id = None

@app.route('/create_assistant', methods=['POST'])
def create_assistant():
    global assistant_id, thread_id

    # Создание ассистента
    assistant = client.beta.assistants.create(
        name="Math Tutor",
        instructions="You are a personal math tutor. Write and run code to answer math questions.",
        tools=[{"type": "code_interpreter"}],
        model="gpt-4o",
    )
    assistant_id = assistant.id

    # Создание потока
    thread = client.beta.threads.create()
    thread_id = thread.id

    return jsonify({"assistant_id": assistant_id, "thread_id": thread_id})

@app.route('/ask', methods=['POST'])
def ask():
    global thread_id, assistant_id

    user_message = request.json.get('message')
    if not user_message or not thread_id or not assistant_id:
        return jsonify({"error": "Missing parameters"}), 400

    message = client.beta.threads.messages.create(
        thread_id=thread_id,
        role="user",
        content=user_message
    )

    responses = []

    class EventHandler(AssistantEventHandler):
        def on_text_created(self, text) -> None:
            responses.append(text)

        def on_text_delta(self, delta, snapshot):
            responses.append(delta.value)

        def on_tool_call_created(self, tool_call):
            responses.append(f"Assistant is calling tool: {tool_call.type}")

    with client.beta.threads.runs.stream(
        thread_id=thread_id,
        assistant_id=assistant_id,
        instructions="Please address the user as Jane Doe. The user has a premium account.",
        event_handler=EventHandler(),
    ) as stream:
        stream.until_done()

    return jsonify({"responses": responses})

if __name__ == '__main__':
    app.run(debug=True)

Шаг 4: Настройка переменных окружения

Создайте файл .env и добавьте ваш API-ключ OpenAI:

OPENAI_API_KEY=ваш_ключ_API

Шаг 5: Запуск приложения

Теперь вы можете запустить ваше приложение Flask:

python app.py

Шаг 6: Взаимодействие с API

Вы можете использовать Postman или cURL для отправки HTTP-запросов к вашему приложению:

  1. Создать ассистента:
curl -X POST http://127.0.0.1:5000/create_assistant
  1. Задать вопрос ассистенту:
curl -X POST -H "Content-Type: application/json" -d '{"message": "Мне нужно решить уравнение 3x + 11 = 14."}' http://127.0.0.1:5000/ask

После выполнения этих шагов ваше приложение Flask будет развернуто и будет взаимодействовать с вашим OpenAI Assistant. Вы можете расширять и модифицировать приложение по мере необходимости для добавления дополнительных функций или улучшений.

Оцените материал
Добавить комментарий

Капча загружается...