Вопрос или проблема
Я был бы очень признателен за советы о том, как развернуть моего помощника 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-запросов к вашему приложению:
- Создать ассистента:
curl -X POST http://127.0.0.1:5000/create_assistant
- Задать вопрос ассистенту:
curl -X POST -H "Content-Type: application/json" -d '{"message": "Мне нужно решить уравнение 3x + 11 = 14."}' http://127.0.0.1:5000/ask
После выполнения этих шагов ваше приложение Flask будет развернуто и будет взаимодействовать с вашим OpenAI Assistant. Вы можете расширять и модифицировать приложение по мере необходимости для добавления дополнительных функций или улучшений.