|
import os |
|
import gradio as gr |
|
import openai |
|
|
|
class OpenAIUtils: |
|
|
|
@classmethod |
|
def use_openai_chatgpt_base(cls, prompt): |
|
""" |
|
Use OpenAI's GPT-3 model, Davinci, to generate text based on the given prompt |
|
""" |
|
openai.api_key = os.getenv('OPENAI_API_KEY') |
|
print("prompt") |
|
|
|
|
|
try: |
|
res = openai.ChatCompletion.create( |
|
|
|
|
|
model="gpt-4", |
|
messages=[ |
|
{"role": "system", "content": "あなたは戦略コンサルタントです。文字数は1000文字に収めること"}, |
|
|
|
{"role": "user", "content": f"{prompt}"}, |
|
] |
|
) |
|
string = res.choices[0]['message']['content'] |
|
except openai.error.InvalidRequestError as e: |
|
print(f"Error: {e}") |
|
return None |
|
return string |
|
@classmethod |
|
def use_openai_davinci_base(cls, prompt): |
|
""" |
|
Use OpenAI's GPT-3 model, Davinci, to generate text based on the given prompt |
|
""" |
|
openai.api_key = os.getenv('OPENAI_API_KEY') |
|
try: |
|
res = openai.Completion.create( |
|
model="text-davinci-003", |
|
prompt=prompt, |
|
max_tokens=1024, |
|
temperature=0.5 |
|
) |
|
string = res.choices[0].text |
|
except openai.error.InvalidRequestError as e: |
|
print(f"Error: {e}") |
|
return None |
|
return string |
|
|
|
class CalqOffer: |
|
@classmethod |
|
def generate_reply_mail_prompt(cls, offer): |
|
prompt = f""" |
|
{offer}の戦略について、 |
|
[前提条件] |
|
5W1Hで整理(箇条書き) |
|
[施策立案](3つ、箇条書き) |
|
[優先度付け] |
|
売上、コスト、実現可能性、実現までの期間の4つの軸で5段階評価(表形式) |
|
* 「5段階評価」と書いておく |
|
[根拠] |
|
最上位の施策に関して、数字を推定しながら売上のフェルミ推定を行ってください。 |
|
・結論ファースト、端的に数字のみ |
|
・根拠となるロジックツリーを図示して数字も記載すること |
|
・必要に応じて大学レベルの数式を用いて良い。(小学生でもわかるように補足すること) |
|
|
|
[計画立案] |
|
最上位の施策において売上とコストの軸で1年ごとに3年分計画立案 (億円単位、表形式) |
|
*単位は億円です。と書いておく |
|
""" |
|
|
|
|
|
return OpenAIUtils.use_openai_chatgpt_base(prompt) |
|
|
|
def post_process_mail_reply(offer_reply): |
|
remove_list = ["(箇条書き)"] |
|
|
|
for item in remove_list: |
|
offer_reply = offer_reply.replace(item, "") |
|
|
|
offer_reply = offer_reply.replace("(3つ提案して)", "(3つ)") |
|
return offer_reply |
|
|
|
|
|
def greet(offer): |
|
offer_reply = CalqOffer.generate_reply_mail_prompt(offer) |
|
|
|
offer_reply = CalqOffer.post_process_mail_reply(offer_reply) |
|
|
|
return offer_reply |
|
|
|
input_offer = gr.Textbox(label="解決したい事業課題を書いてください(例:タクシー配車アプリの今後)") |
|
output_offer = gr.Textbox(label="戦略提案文章(最大1分ほどお待ちください)") |
|
description=""" |
|
""" |
|
|
|
|
|
article = """ |
|
""" |
|
|
|
iface = gr.Interface( |
|
fn=greet, |
|
inputs=[input_offer], |
|
outputs=[output_offer], |
|
title="", |
|
description=description, |
|
article=article |
|
|
|
) |
|
iface.launch() |
|
|