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") # print(prompt) try: res = openai.ChatCompletion.create( # res = openai.Completion.create( # model="gpt-3.5-turbo", model="gpt-4", messages=[ {"role": "system", "content": "あなたは戦略コンサルタントです。文字数は1000文字に収めること"}, # {"role": "user", "content": prompt}, {"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年分計画立案 (億円単位、表形式) *単位は億円です。と書いておく """ # print(prompt) # return OpenAIUtils.use_openai_davinci_base(prompt) 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) # print(offer_reply) offer_reply = CalqOffer.post_process_mail_reply(offer_reply) # print(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()