backend/ml/openai_handle.py

151 lines
7.7 KiB
Python
Raw Normal View History

2023-08-26 01:17:47 +03:00
import datetime
from ast import literal_eval
2023-08-26 09:53:03 +03:00
import openai
2023-08-26 01:17:47 +03:00
from django.conf import settings
KEY = settings.OPENAI_KEY
2023-08-26 09:53:03 +03:00
description = """🍀 Что такое Pitch-Deck? Pitch-Deck представляет собой презентацию-тизер проекта/компании для
инвесторов, партнеров, журналистов и других заинтересованных лиц. Цель презентации - привлечение дополнительного
финансирования (инвестиций). Почему это проблема?
2023-08-26 01:17:47 +03:00
2023-08-26 09:53:03 +03:00
🍀 Проблема #1. Недостаток средств: Для многих стартапов ограниченные финансы создают преграду при разработке
качественного Pitch Deck. Отсутствие достаточных средств для найма профессиональных консультантов, дизайнеров и
копирайтеров, а также для проведения исследований рынка, может привести к созданию менее привлекательной и
малоинформативной презентации, что затрудняет привлечение инвестиций.
2023-08-26 01:17:47 +03:00
2023-08-26 09:53:03 +03:00
🍀 Проблема #2. Недостаток экспертизы: Проблемой для стартапов является недостаток экспертизы для проведения
необходимых исследований и корректного отражения их результатов в Pitch Deck. Не всегда у стартапов есть нужные
знания в области маркетинга, финансов и анализа рынка, что затрудняет создание убедительной и информативной
презентации для привлечения инвестиций.
2023-08-26 01:17:47 +03:00
2023-08-26 09:53:03 +03:00
🍀 Проблема #3. Недостаток времени Молодым компаниям для привлечения инвестиций требуется подготовить целый пакет
документов, одним из которых является Pitch Deck. Особенностью стартапов является сравнительного молодая и небольшая
команда, у которой чисто физически не хватает времени на разработку инвестиционных материалов, ведь они полностью
погружены в процесс разработки и улучшения продукта или сервиса.
2023-08-26 01:17:47 +03:00
2023-08-26 09:53:03 +03:00
🍀 ИДЕЯ: Основная идея кейса заключается в создании вспомогательного инструмента на основе ИИ, заточенного под
создание Pitch-Deck."""
2023-08-26 01:17:47 +03:00
names_prompt = """
По тексту ответь или предположи ответ на вопросы в следющем формате:
{
"names": "Назови 5 имен проекта с данным описанием через запятую"
}
"""
prompts = [
"""
2023-08-26 09:36:47 +03:00
По тексту ответь или предположи ответ на вопросы в следющем формате:
{
'users': 'Кто будет пользоваться продуктом',
'problems': 'Какие проблемы решает продукт',
'actuality': 'Продолжите предложение: Актуальность проблемы подтверждается тем фактом, что...',
'solve': 'Как решаем эти проблемы',
'works': 'Как работает решение',
}
""",
2023-08-26 01:17:47 +03:00
"""
2023-08-26 09:36:47 +03:00
По тексту ответь или предположи ответ на вопросы в следющем формате:
{
2023-08-26 09:53:03 +03:00
'awards': 'Когда проблема будет решена, какова будет ценность для ваших пользователей',
'money': 'На чем проект зарабатывает? сколько и за что ему платят клиенты',
'aims': Напиши 3 цели: на месяц, на полгода и год, формат: {'1': цель на месяц, '2': цель на полгода, '3': цель на год},
'investments_sold': 'На что потратить инвестиции под проект',
'financial_indicators': 'Напиши финансовые показатели проекта'
2023-08-26 09:36:47 +03:00
}
""",
2023-08-26 01:17:47 +03:00
"""
2023-08-26 09:36:47 +03:00
По тексту ответь или предположи ответ на вопросы в следющем формате:
{
'achieve': 'Чего добьется команда после освоения инвестиций',
'competitors_strength': 'Сильные стороны конкурентов',
'competitors_low': 'Слабые стороны конкурентов',
'advantages': 'Какие могут быть преимущества над конкурентами'
}
""",
2023-08-26 01:17:47 +03:00
]
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"],
2023-08-26 09:36:47 +03:00
"date": (
datetime.datetime.now() + datetime.timedelta(days=30)
).isoformat(),
2023-08-26 01:17:47 +03:00
},
{
"aim": content["aims"]["2"],
2023-08-26 09:36:47 +03:00
"date": (
datetime.datetime.now() + datetime.timedelta(days=180)
).isoformat(),
2023-08-26 01:17:47 +03:00
},
{
"aim": content["aims"]["3"],
2023-08-26 09:36:47 +03:00
"date": (
datetime.datetime.now() + datetime.timedelta(days=365)
).isoformat(),
2023-08-26 01:17:47 +03:00
},
]
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))