backend/ml/openai_handle.py
2023-08-26 09:53:03 +03:00

151 lines
7.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import datetime
from ast import literal_eval
import openai
from django.conf import settings
KEY = settings.OPENAI_KEY
description = """🍀 Что такое Pitch-Deck? Pitch-Deck представляет собой презентацию-тизер проекта/компании для
инвесторов, партнеров, журналистов и других заинтересованных лиц. Цель презентации - привлечение дополнительного
финансирования (инвестиций). Почему это проблема?
🍀 Проблема #1. Недостаток средств: Для многих стартапов ограниченные финансы создают преграду при разработке
качественного Pitch Deck. Отсутствие достаточных средств для найма профессиональных консультантов, дизайнеров и
копирайтеров, а также для проведения исследований рынка, может привести к созданию менее привлекательной и
малоинформативной презентации, что затрудняет привлечение инвестиций.
🍀 Проблема #2. Недостаток экспертизы: Проблемой для стартапов является недостаток экспертизы для проведения
необходимых исследований и корректного отражения их результатов в Pitch Deck. Не всегда у стартапов есть нужные
знания в области маркетинга, финансов и анализа рынка, что затрудняет создание убедительной и информативной
презентации для привлечения инвестиций.
🍀 Проблема #3. Недостаток времени Молодым компаниям для привлечения инвестиций требуется подготовить целый пакет
документов, одним из которых является Pitch Deck. Особенностью стартапов является сравнительного молодая и небольшая
команда, у которой чисто физически не хватает времени на разработку инвестиционных материалов, ведь они полностью
погружены в процесс разработки и улучшения продукта или сервиса.
🍀 ИДЕЯ: Основная идея кейса заключается в создании вспомогательного инструмента на основе ИИ, заточенного под
создание Pitch-Deck."""
names_prompt = """
По тексту ответь или предположи ответ на вопросы в следющем формате:
{
"names": "Назови 5 имен проекта с данным описанием через запятую"
}
"""
prompts = [
"""
По тексту ответь или предположи ответ на вопросы в следющем формате:
{
'users': 'Кто будет пользоваться продуктом',
'problems': 'Какие проблемы решает продукт',
'actuality': 'Продолжите предложение: Актуальность проблемы подтверждается тем фактом, что...',
'solve': 'Как решаем эти проблемы',
'works': 'Как работает решение',
}
""",
"""
По тексту ответь или предположи ответ на вопросы в следющем формате:
{
'awards': 'Когда проблема будет решена, какова будет ценность для ваших пользователей',
'money': 'На чем проект зарабатывает? сколько и за что ему платят клиенты',
'aims': Напиши 3 цели: на месяц, на полгода и год, формат: {'1': цель на месяц, '2': цель на полгода, '3': цель на год},
'investments_sold': 'На что потратить инвестиции под проект',
'financial_indicators': 'Напиши финансовые показатели проекта'
}
""",
"""
По тексту ответь или предположи ответ на вопросы в следющем формате:
{
'achieve': 'Чего добьется команда после освоения инвестиций',
'competitors_strength': 'Сильные стороны конкурентов',
'competitors_low': 'Слабые стороны конкурентов',
'advantages': 'Какие могут быть преимущества над конкурентами'
}
""",
]
openai.api_key = KEY
assertions = [
[
lambda data: "users" in data.keys(),
lambda data: "problems" in data.keys(),
lambda data: "actuality" in data.keys(),
lambda data: "solve" in data.keys(),
lambda data: "works" in data.keys(),
],
[
lambda data: "awards" in data.keys(),
lambda data: "money" in data.keys(),
lambda data: "aims" in data.keys(),
lambda data: "investments_sold" in data.keys(),
lambda data: "financial_indicators" in data.keys(),
],
[
lambda data: "achieve" in data.keys(),
lambda data: "competitors_strength" in data.keys(),
lambda data: "competitors_low" in data.keys(),
lambda data: "advantages" in data.keys(),
],
]
def create_hints(description: str, stage: int):
global prompts
chat_completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": description + "\n" + prompts[stage]}],
)
content = literal_eval(chat_completion.choices[0].message.content)
for assertion_statement in assertions[stage]:
assert assertion_statement(content)
if stage == 1:
content["aims"] = [
{
"aim": content["aims"]["1"],
"date": (
datetime.datetime.now() + datetime.timedelta(days=30)
).isoformat(),
},
{
"aim": content["aims"]["2"],
"date": (
datetime.datetime.now() + datetime.timedelta(days=180)
).isoformat(),
},
{
"aim": content["aims"]["3"],
"date": (
datetime.datetime.now() + datetime.timedelta(days=365)
).isoformat(),
},
]
result = []
for key, value in content.items():
result.append({"type": key, "value": value})
return result
def create_name_hint(description: str):
global names_prompt
chat_completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": description + "\n" + names_prompt}],
)
answer = literal_eval(chat_completion.choices[0].message.content)["names"].split(
", "
)
assert len(answer) == 5
return {"type": "names", "value": answer}
# print(create_name_hint(description))
# print(create_hints(description, 0))
# print(create_hints(description, 1))
# print(create_hints(description, 2))