2023-08-26 01:17:47 +03:00
|
|
|
|
import datetime
|
2023-08-26 14:10:10 +03:00
|
|
|
|
import re
|
2023-08-26 01:17:47 +03:00
|
|
|
|
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 14:10:10 +03:00
|
|
|
|
regex = r"({(\n.+)+\n})"
|
|
|
|
|
|
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 = """
|
2023-08-26 14:10:10 +03:00
|
|
|
|
По тексту ответь или предположи ответ на вопросы в следующем формате:
|
2023-08-26 01:17:47 +03:00
|
|
|
|
{
|
|
|
|
|
"names": "Назови 5 имен проекта с данным описанием через запятую"
|
|
|
|
|
}
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
prompts = [
|
|
|
|
|
"""
|
2023-08-26 14:10:10 +03:00
|
|
|
|
По тексту ответь или предположи ответ на вопросы в следующем формате:
|
2023-08-26 09:36:47 +03:00
|
|
|
|
{
|
|
|
|
|
'users': 'Кто будет пользоваться продуктом',
|
|
|
|
|
'problems': 'Какие проблемы решает продукт',
|
|
|
|
|
'actuality': 'Продолжите предложение: Актуальность проблемы подтверждается тем фактом, что...',
|
|
|
|
|
'solve': 'Как решаем эти проблемы',
|
|
|
|
|
'works': 'Как работает решение',
|
|
|
|
|
}
|
|
|
|
|
""",
|
2023-08-26 01:17:47 +03:00
|
|
|
|
"""
|
2023-08-26 14:10:10 +03:00
|
|
|
|
По тексту ответь или предположи ответ на вопросы в следующем формате:
|
2023-08-26 09:36:47 +03:00
|
|
|
|
{
|
2023-08-26 14:10:10 +03:00
|
|
|
|
'awards': 'Ценность продукта для пользователей',
|
2023-08-26 09:53:03 +03:00
|
|
|
|
'money': 'На чем проект зарабатывает? сколько и за что ему платят клиенты',
|
|
|
|
|
'aims': Напиши 3 цели: на месяц, на полгода и год, формат: {'1': цель на месяц, '2': цель на полгода, '3': цель на год},
|
|
|
|
|
'investments_sold': 'На что потратить инвестиции под проект',
|
|
|
|
|
'financial_indicators': 'Напиши финансовые показатели проекта'
|
2023-08-26 09:36:47 +03:00
|
|
|
|
}
|
|
|
|
|
""",
|
2023-08-26 14:10:10 +03:00
|
|
|
|
"""По тексту ответь или предположи ответ на вопросы в следующем формате: { 'achieve': 'Чего добьется команда после
|
|
|
|
|
освоения инвестиций', 'competitors_strength': 'Сильные стороны конкурентов', 'competitors_low': 'Слабые стороны
|
|
|
|
|
конкурентов', 'advantages': 'Какие могут быть преимущества над конкурентами', 'category': "На каком рынке
|
|
|
|
|
находится этот проект? Выбери из вариантов: 'Business Software', 'IndustrialTech', 'E-commerce', 'Advertising &
|
|
|
|
|
Marketing', 'Hardware', 'RetailTech', 'ConstructionTech', 'Web3', 'EdTech', 'Business Intelligence',
|
|
|
|
|
'Cybersecurity', 'HrTech', 'Telecom & Communication', 'Media & Entertainment', 'FinTech', 'MedTech', 'Transport &
|
|
|
|
|
Logistics', 'Gaming', 'FoodTech', 'AI', 'WorkTech', 'Consumer Goods & Services', 'Aero & SpaceTech',
|
|
|
|
|
'Legal & RegTech', 'Travel', 'PropTech', 'Energy', 'GreenTech'" } ,
|
2023-08-26 09:36:47 +03:00
|
|
|
|
""",
|
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]}],
|
|
|
|
|
)
|
2023-08-26 14:10:10 +03:00
|
|
|
|
str_content = chat_completion.choices[0].message.content
|
|
|
|
|
print(str_content)
|
|
|
|
|
filtered_content = list(re.finditer(regex, str_content, re.MULTILINE))[-1].group()
|
|
|
|
|
if not len(filtered_content):
|
|
|
|
|
raise ValueError(f"answer doesnt pass validation, {filtered_content}")
|
|
|
|
|
content = literal_eval(filtered_content)
|
2023-08-26 01:17:47 +03:00
|
|
|
|
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))
|