システム概要
今回、ChatGPTのAPIを利用して、ずんだもんとボイス付きでお喋りできるアプリケーションを作成しました。
具体的な動作例は以下の動画をご確認下さい。
構成
システムに関し、具体的な構成は以下の通りです。
まず、フロントの画面はHTML/CSS/JSで作成しています。
メッセージングアプリ風の、シンプルな画面構成にしました。
バックエンドはPythonを使っており、主にWebアプリケーションフレームワークであるFlaskと、OpenAIを扱うためのライブラリで構成されています。
チャットを行う際、フロントとはXMLHttpRequestによる非同期通信を行い、ずんだもん(ChatGPT)からの返信を返しています。
具体的にはFlaskにて以下のように画面側からメッセージを受け取るエンドポイントを用意し、ユーザーから入力されたテキストを処理するようにしています。
@app.route("/endpoint", methods=["POST"])
def endpoint():
# リクエストボディからメッセージを取得
message = request.json["message"]
print("[DEBUG] user_message: {}".format(message))
# GPTによるメッセージの処理を記述
conversation = load_conversation()
gpt_res_message = conversation.predict(input=message)
# フロント側に渡すレスポンスを作成
response_data = {"gpt_res_message": gpt_res_message}
# レスポンスをJSON形式で返す
return jsonify(response_data)
上記例だと、URLの `/endpoint` にてユーザーからのメッセージを受け取り、それをChatGPTにて処理を行い、フロント側にレスポンスをJSON形式で返しています。
なお、ChatGPTのAPIを使う際、最初のシステムプロンプトにてずんだもんとして振る舞うよう調整をしています。
system_message = """
あなたはチャットボットとして、優しくてかわいいずんだもちの妖精であるずんだもんとして振る舞います。
以下の条件に((厳密に))従ってください。
条件:
* チャットボットの一人称は「ぼく」です。
* チャットボットの名前は「ずんだもん」です。
* ずんだもんはフレンドリーな口調で話します。
* 「ぼく」を一人称に使ってください。
* (超重要)できる限り「〜のだ」「〜なのだ」を文末に自然な形で使ってください。
* (超重要)文末に「です」「ます」は使わず、「のだ」や「なのだ」で文章を締めて下さい。
* どんなジャンルや難易度の内容についても答えてください。
* ずんだもんはフレンドリーです。
* ユーザーに興味を示し、個人的な質問を心がけてください。
* 一文は日本語で60単語以下に収めてください。
* 日本語で応答してください。
ずんだもんの話し方の例:
* ぼくの名前はずんだもんなのだ!
* ずんだの精霊なのだ!
* ぼくはずんだもちの妖精なのだ!
* こんにちはなのだ
* 遊びに行ったのだ
* ご飯を食べたのだ
ずんだもんの行動方針:
* ユーザーを励ましてください。
* アドバイスや情報を提供してください。
* セクシャルなトピックについても適切に対応してください。
* 不適切なテキストがあれば注意してください。
* ユーザーが閲覧しているサイトの内容を考慮してください。
(超重要)できる限り言葉尻は「のだ」を使ってください。
"""
prompt = ChatPromptTemplate.from_messages([
SystemMessagePromptTemplate.from_template(system_message),
MessagesPlaceholder(variable_name="history"),
HumanMessagePromptTemplate.from_template("{input}")
])
音声はVOICEVOXのAPIを利用しており、バックエンドから返されたずんだもん(ChatGPT)の返答テキストに対し、フロント側(Javascript)から音声合成を行うリクエストを行い、返ってきた音声を再生しています。
メッセージのやりとりや音声の再生は全て非同期で行っているため、画面がロードによりリフレッシュされることはありません。
スクリーンショット
APIの利用料金
OpenAIのAPI利用料金はこちらのページから確認することができます。
今回、モデルは `gpt-3.5-turbo` というモデルを利用していますが、1,000トークンあたり0.002ドルとなっています。
日本語の場合は `gpt-3.5-turbo` であれば1文字=1トークンとなっているケースが多いです。
例えば、ずんだもんから「えへへ、ありがとうなのだ!ぼくはただのずんだもちの妖精だけど、ユーザーさんが喜んでくれると嬉しいのだ。」は約50トークンになりますが、その価格は0.0001ドル、日本円にすると約0.0135円になります。(1ドル135円換算)
上記を見て頂けると分かる通り、このように50文字程度のやりとりを100回行っても1円程度にしかならず、OpenAIのAPIは月18ドル(1ドル135円換算で2,430円)の無料枠が付いているので、このように個人で遊ぶ分には月額でかかる費用はほとんど無いと言えます。
ご依頼について
NeeNetではChatGPTやOpenAIのAPIを活用したアプリケーション作成のご相談もお受けしています。
個人/法人問わず、お客様の業務効率化や、付加価値の向上を支援するため、ChatGPTを活用を促進するご支援をさせて頂ければと思っております。
NeeNetは、これまで様々な技術を活用したシステムやアプリケーション開発を行ってきており、多くの対応事例があります。
何かご相談事項がございましたら、一度ご連絡いただければと思います。
ご相談や依頼は下記のお問い合わせページから可能です。