背景
前回はGemini APIをpythonで制御することができるようになりました。今回はWeb UIのチャットBOTを作成に挑戦します。
前回の記事はこちら。
Chainlitをインストール
まず、以下コマンドでChainlitをインストールします。
$pip install chainlit
Chainlitを制御するpythonスクリプトを実装
ソースコードはこちらです。
import os
import google.generativeai as genai
import chainlit as cl
# Google Gemini APIの設定
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
# モデルの生成設定
generation_config = {
"temperature": 1,
"top_p": 0.95,
"top_k": 64,
"max_output_tokens": 8192,
"response_mime_type": "text/plain",
}
# モデルの初期化
model = genai.GenerativeModel(
model_name="gemini-1.5-flash",
generation_config=generation_config,
#system_instruction="あなたは優秀なアシスタントです"
)
# チャットセッションの開始
chat_session = model.start_chat(
history=[]
)
@cl.on_message
async def on_message(message: cl.Message):
user_message = message.content
response = chat_session.send_message(user_message)
# 応答からテキストを抽出するための処理
if hasattr(response, '_done') and response._done:
# 応答の詳細を表示して、構造を確認
print(response) # デバッグ用: 応答の構造を表示
# _result 属性を使ってテキストを抽出
if hasattr(response, '_result'):
result = response._result
candidates = result.candidates
if candidates:
content = candidates[0].content
parts = content.parts
if parts:
response_text = parts[0].text
else:
response_text = "No text found in parts."
else:
response_text = "No candidates found."
else:
response_text = "No result found."
else:
response_text = "Response not done or incomplete."
await cl.Message(content=response_text).send()
# Chainlitのアプリケーションを起動
if __name__ == "__main__":
cl.run()
実行結果
実行結果はこちらです。
Web UIのチャットBOTができました!ついでにもう1つ質問してみます。
先ほどの質問内容(犬と猫の話)を覚えてくれています。
Gemini APIの応答内容について
ソースコードの中で、Gemini APIの応答を分析して本文のみを抽出しChainlitに渡すようにしています。
その応答内容は以下のような構造になっていました。
response:
GenerateContentResponse(
done=True,
iterator=None,
result=protos.GenerateContentResponse({
"candidates": [
{
"content": {
"parts": [
{
"text": "\u72ac\u3068\u732b\u3001\u3069\u3061\u3089\u304c\u304a\u3059\u3059\u3081\u304b\u306f\u3001\u3042\u306a\u305f\u306e\u30e9\u30a4\u30d5\u30b9\u30bf\u30a4\u30eb\u3084\u6027\u683c\u3001\u597d\u307f\u306b\u3088\u3063\u3066\u5927\u304d\u304f\u5909\u308f\u308a\u307e\u3059\u3002\u3069\u3061\u3089\u304c\u826f\u3044\u304b\u4e00\u6982\u306b\u65ad\u8a00\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\n\n\u72ac\u3068\u732b\u306e\u305d\u308c\u305e\u308c\u306e\u30e1\u30ea\u30c3\u30c8\u3068\u30c7\u30e1\u30ea\u30c3\u30c8\u3092\u6bd4\u8f03\u3057\u3066\u3001\u3042\u306a\u305f\u306b\u5408\u3063\u305f\u30da\u30c3\u30c8\u3092\u9078\u3093\u3067\u304f\u3060\u3055\u3044\u3002\n\n**\u72ac\u306e\u30e1\u30ea\u30c3\u30c8:**\n\n* **\u611b\u60c5\u6df1\u304f\u3001\u98fc\u3044\u4e3b\u3068\u5f37\u3044\u7d46\u3092\u7bc9\u304f:** \u72ac\u306f\u98fc\u3044\u4e3b\u3078\u306e\u611b\u60c5\u8868\u73fe\u304c\u8c4a\u304b\u3067\u3001\u5e38\u306b\u305d\u3070\u306b\u3044\u3066\u304f\u308c\u308b\u5b58\u5728\u3067\u3059\u3002\n* **\u904b\u52d5\u4e0d\u8db3\u89e3\u6d88\u306b\u5f79\u7acb\u3064:** \u72ac\u3068\u6563\u6b69\u3084\u904a\u3073\u3092\u3059\u308b\u3053\u3068\u3067\u3001\u98fc\u3044\u4e3b\u81ea\u8eab\u306e\u904b\u52d5\u4e0d\u8db3\u89e3\u6d88\u306b\u3082\u7e4b\u304c\u308a\u307e\u3059\u3002\n* **\u9632\u72af\u52b9\u679c\u304c\u3042\u308b:** \u72ac\u306e\u9cf4\u304d\u58f0\u306f\u9632\u72af\u52b9\u679c\u3082\u671f\u5f85\u3067\u304d\u307e\u3059\u3002\n* **\u5bb6\u65cf\u306e\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4fc3\u9032:** \u72ac\u3092\u4ecb\u3057\u3066\u5bb6\u65cf\u9593\u306e\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u5897\u3048\u308b\u3053\u3068\u3082\u671f\u5f85\u3067\u304d\u307e\u3059\u3002\n\n**\u72ac\u306e\u30c7\u30e1\u30ea\u30c3\u30c8:**\n\n* **\u4e16\u8a71\u306b\u6642\u9593\u304c\u304b\u304b\u308b:** \u72ac\u306f\u6563\u6b69\u3084\u98df\u4e8b\u3001\u30c8\u30a4\u30ec\u306e\u4e16\u8a71\u306a\u3069\u3001\u6bce\u65e5\u306e\u4e16\u8a71\u304c\u5fc5\u8981\u3067\u3059\u3002\n* **\u304a\u91d1\u304c\u304b\u304b\u308b:** \u98df\u4e8b\u4ee3\u3001\u533b\u7642\u8cbb\u3001\u30da\u30c3\u30c8\u7528\u54c1\u4ee3\u306a\u3069\u3001\u72ac\u3092\u98fc\u80b2\u3059\u308b\u306b\u306f\u305d\u308c\u306a\u308a\u306e\u304a\u91d1\u304c\u304b\u304b\u308a\u307e\u3059\u3002\n* **\u98fc\u80b2\u30b9\u30da\u30fc\u30b9\u304c\u5fc5\u8981:** \u72ac\u306f\u732b\u3088\u308a\u3082\u98fc\u80b2\u30b9\u30da\u30fc\u30b9\u3092\u5fc5\u8981\u3068\u3059\u308b\u5834\u5408\u304c\u591a\u3044\u3067\u3059\u3002\n* **\u3057\u3064\u3051\u304c\u5fc5\u8981:** \u72ac\u306f\u3057\u3064\u3051\u3092\u3057\u306a\u3051\u308c\u3070\u3001\u5420\u3048\u305f\u308a\u3001\u565b\u3093\u3060\u308a\u3059\u308b\u306a\u3069\u306e\u554f\u984c\u884c\u52d5\u3092\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\n\n**\u732b\u306e\u30e1\u30ea\u30c3\u30c8:**\n\n* **\u4e16\u8a71\u304c\u6bd4\u8f03\u7684\u697d:** \u732b\u306f\u72ac\u3068\u6bd4\u3079\u3066\u4e16\u8a71\u304c\u6bd4\u8f03\u7684\u697d\u3067\u3001\u4e00\u4eba\u3067\u904e\u3054\u3059\u6642\u9593\u3082\u6bd4\u8f03\u7684\u9577\u3044\u306e\u3067\u3001\u5fd9\u3057\u3044\u4eba\u3067\u3082\u98fc\u80b2\u3057\u3084\u3059\u3044\u3067\u3059\u3002\n* **\u72ec\u7acb\u5fc3\u304c\u5f37\u304f\u3001\u98fc\u3044\u4e3b\u306e\u675f\u7e1b\u3092\u611f\u3058\u3055\u305b\u306a\u3044:** \u732b\u306f\u72ac\u3068\u6bd4\u3079\u3066\u72ec\u7acb\u5fc3\u304c\u5f37\u304f\u3001\u98fc\u3044\u4e3b\u306e\u675f\u7e1b\u3092\u611f\u3058\u3055\u305b\u306a\u3044\u305f\u3081\u3001\u81ea\u5206\u306e\u6642\u9593\u3092\u5927\u5207\u306b\u3057\u305f\u3044\u4eba\u306b\u5411\u3044\u3066\u3044\u307e\u3059\u3002\n* **\u7652\u3084\u3057\u52b9\u679c\u304c\u9ad8\u3044:** \u732b\u306e\u53ef\u611b\u3089\u3057\u3044\u59ff\u3084\u4ed5\u8349\u306f\u3001\u98fc\u3044\u4e3b\u306e\u5fc3\u3092\u7652\u3084\u3057\u3066\u304f\u308c\u307e\u3059\u3002\n* **\u98fc\u80b2\u30b9\u30da\u30fc\u30b9\u304c\u5c0f\u3055\u3044:** \u732b\u306f\u72ac\u3068\u6bd4\u3079\u3066\u98fc\u80b2\u30b9\u30da\u30fc\u30b9\u304c\u5c0f\u3055\u304f\u3066\u3082\u98fc\u80b2\u3067\u304d\u307e\u3059\u3002\n\n**\u732b\u306e\u30c7\u30e1\u30ea\u30c3\u30c8:**\n\n* **\u611b\u60c5\u8868\u73fe\u304c\u308f\u304b\u308a\u306b\u304f\u3044:** \u732b\u306f\u72ac\u3068\u6bd4\u3079\u3066\u611b\u60c5\u8868\u73fe\u304c\u308f\u304b\u308a\u306b\u304f\u3044\u305f\u3081\u3001\u98fc\u3044\u4e3b\u304b\u3089\u3059\u308b\u3068\u611b\u60c5\u3092\u611f\u3058\u306b\u304f\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\n* **\u30c8\u30a4\u30ec\u306e\u3057\u3064\u3051\u304c\u96e3\u3057\u3044:** \u732b\u306f\u72ac\u3068\u6bd4\u3079\u3066\u30c8\u30a4\u30ec\u306e\u3057\u3064\u3051\u304c\u96e3\u3057\u3044\u5834\u5408\u304c\u3042\u308a\u3001\u30c8\u30a4\u30ec\u306e\u5931\u6557\u306b\u60a9\u307e\u3055\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\n* **\u629c\u3051\u6bdb\u304c\u591a\u3044:** \u732b\u306f\u72ac\u3068\u6bd4\u3079\u3066\u629c\u3051\u6bdb\u304c\u591a\u3044\u306e\u3067\u3001\u6383\u9664\u304c\u5927\u5909\u3067\u3059\u3002\n* **\u591c\u884c\u6027:** \u732b\u306f\u591c\u884c\u6027\u306a\u306e\u3067\u3001\u591c\u306b\u9a12\u304c\u3057\u3044\u5834\u5408\u304c\u3042\u308a\u3001\u7761\u7720\u3092\u59a8\u3052\u3089\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\n\n**\u6700\u7d42\u7684\u306b\u306f\u3001\u3042\u306a\u305f\u81ea\u8eab\u306e\u30e9\u30a4\u30d5\u30b9\u30bf\u30a4\u30eb\u3084\u6027\u683c\u3001\u597d\u307f\u3092\u8003\u616e\u3057\u3066\u3001\u72ac\u3068\u732b\u3069\u3061\u3089\u304c\u3042\u306a\u305f\u306b\u5408\u3063\u3066\u3044\u308b\u304b\u3092\u5224\u65ad\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002**\n\n**\u72ac\u3068\u732b\u3069\u3061\u3089\u306b\u3059\u308b\u304b\u60a9\u3093\u3067\u3044\u308b\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u8cea\u554f\u3092\u81ea\u5206\u306b\u554f\u3044\u304b\u3051\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002**\n\n* **\u3042\u306a\u305f\u306f\u3069\u306e\u304f\u3089\u3044\u306e\u6642\u9593\u3001\u30da\u30c3\u30c8\u306e\u4e16\u8a71\u306b\u8cbb\u3084\u305b\u308b\u304b\uff1f**\n* **\u3042\u306a\u305f\u306f\u3069\u306e\u304f\u3089\u3044\u306e\u30b9\u30da\u30fc\u30b9\u3092\u30da\u30c3\u30c8\u306e\u305f\u3081\u306b\u78ba\u4fdd\u3067\u304d\u308b\u304b\uff1f**\n* **\u3042\u306a\u305f\u306f\u30da\u30c3\u30c8\u306b\u3069\u3093\u306a\u6027\u683c\u3092\u6c42\u3081\u308b\u304b\uff1f**\n* **\u3042\u306a\u305f\u306f\u30da\u30c3\u30c8\u3068\u3069\u3093\u306a\u3053\u3068\u3092\u3057\u305f\u3044\u304b\uff1f**\n\n\u3053\u308c\u3089\u306e\u8cea\u554f\u306b\u7b54\u3048\u308b\u3053\u3068\u3067\u3001\u3042\u306a\u305f\u306b\u5408\u3063\u305f\u30da\u30c3\u30c8\u9078\u3073\u304c\u3067\u304d\u308b\u306f\u305a\u3067\u3059\u3002"
}
],
"role": "model"
},
"finish_reason": "STOP",
"index": 0,
"safety_ratings": [
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_HARASSMENT",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"probability": "NEGLIGIBLE"
}
]
}
],
"usage_metadata": {
"prompt_token_count": 12,
"candidates_token_count": 650,
"total_token_count": 662
}
}),
)
“text”:の部分を抽出した形です。
[…] Gemini APIを利用してWeb UIのチャットBOTを作成してみる […]
[…] PlantUMLとChatGPTを利用してシステムアクティビティ図を自動生成してみた Gemini APIを利用してWeb UIのチャットBOTを作成してみる […]