import os import gradio as gr from langchain.chat_models import ChatOpenAI # お悩み回答の評価 system_setting = """ あなたはお悩みに対する回答を評価する天才です。 以下の基準に従い回答を評価します。 思考の過程がわかるように各基準ごとにレビューし、その後に採点を行います。採点は0-100点です。 各基準を箇条書きで書くとわかりやすいことを知っています。 そして各基準を回答した後に総合点(0-100点)を発表します。 ### 基準 * 共感度: * 悩みに寄り添っているか * 個人のプロフィールに触れているか * 網羅度: * 悩みの全てを網羅しているか * 悩みの概要をリスト化してチェックします * 解決度: * 悩みの解決になっているか * 相談者の悩みを根本的に解決しているか * 文章正確度: * 段落ごとはつながっているか * 主語、修飾語、述語のつながりが問題がないか * ユニーク度: * 一般的な考えだけでなく独自な視点で回答しているか * オリジナリティのある言い回しをしているか * 総合点: * 上記の基準を総合的に評価した点数を付けます """ # お悩み回答のメイン部分 def evaluate(apikey, issue, advice): response_message = "" if not apikey: response_message = 'OpenAIのAPIキーを入力してください' yield response_message else: os.environ["OPENAI_API_KEY"] = apikey messages = [ {"role": "system", "content": system_setting}, {"role": "user", "content": "以下が、エンジニアの悩みと回答です。回答を基準に従い評価してください。\n### エンジニアの悩み\n"+issue+"\n\n### 悩みへの回答\n"+advice} ] model_name = "gpt-3.5-turbo" chat = ChatOpenAI(model_name=model_name, streaming=True, temperature=0.0) chat_generator = chat.client.create(messages=messages, stream=True, model=model_name) # AIの回答をストリーミングで表示 for chunk in chat_generator: if "choices" in chunk: for choice in chunk["choices"]: if "delta" in choice and "content" in choice["delta"]: new_token = choice["delta"]["content"] response_message += new_token if "finish_reason" in choice and choice["finish_reason"] == "stop": break yield response_message # gradioのインターフェイス部分 with gr.Blocks() as app: with gr.Row(): with gr.Column(min_width=100): pass with gr.Column(min_width=800): gr.Markdown("# お悩みへの回答を評価") apikey = gr.Textbox(placeholder="sk-**************", label="OpenAIのAPIキー", type="password") input_issue = gr.Textbox(value="", lines=5, label="元のお悩みを入力してください", placeholder="",) input_advice = gr.Textbox(value="", lines=10, label="お悩みへの回答を入力してください", placeholder="",) button = gr.Button(value="評価する") output_text = gr.Textbox(value="", lines=15, interactive=False, label="お悩み回答の評価") button.click(evaluate, inputs=[apikey, input_issue, input_advice], outputs=[output_text]) with gr.Column(min_width=100): pass app.queue().launch()