ヒス構文チャットボットを作ってみた

## 初めに
Python・機械学習の初心者ですが、遊びでチャットボット作ってみました。
少し個性を出したかったので、ヒス構文で返してもらえるようにしました

>ヒス構文とは「お母さんが論理を飛躍させたり論点をすり替えヒステリックな語気を伴うことで相手に罪悪感を抱かせる構文」

参照:[若者に人気の「ヒス構文」とは](https://project.nikkeibp.co.jp/pc/atcl/19/08/28/00031/011700145/)


## APIキーの取得
Google AI Studioを利用してAPIキーの取得を行います

Google AI Studioがどういうものかは↓をご覧ください

https://naotech33.com/google-ai-studio/

<br>

**ステップ1:Google AI Studioにアクセス**
まずは、次のサイトにアクセスします※Googleアカウントが必要になります

https://aistudio.google.com/welcome

<br>

アクセスすると以下のようなページ画面が表示されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959389/19680705-23e8-4468-ae7b-d0ec98ceabe5.png)
<br>
**ステップ2:APIキーの取得**
左上のGet API keyをクリックすると以下の画面が表示されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959389/abfcf8c1-74a3-4640-966b-10d52dcc5e2b.png)

真ん中のAPIキーの作成をクリックすると、APIキーを取得することができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959389/d8bc5d8e-2263-4492-96e2-3a603eba8c17.png)
※青枠で囲ってるところに表示されます


## 実装
今回はStramlitというフレームワークを使用して、チャットボットのフロントエンドとバックエンドの処理を作成します

https://streamlit.io/

Streamlitは、データサイエンスや機械学習のアプリケーションを簡単に作成できるPythonのフレームワークです。以下が主な特徴です

・簡単に使える: Pythonのコードだけでアプリを作れる
・リアルタイム更新: コードを変更すると、すぐに反映
・豊富なウィジェット: ボタンやスライダーなどのインターフェースを簡単に追加できます




### コード
では、実装したコードをとりあえずのせます。
作ったファイルは2個だけです

```python:app.py

import os
import streamlit as st
from dotenv import load_dotenv
import google.generativeai as genai
import time

# .envファイルの読み込み
load_dotenv()

# 環境変数からAPIキーを取得
api_key = os.getenv("GOOGLE_API_KEY")

# ページ設定
st.set_page_config(page_title="ヒス構文会話ツール", page_icon="🐍", layout="wide")

# タイトルとアプリの説明
st.title("🐍 ヒス構文会話ツール")
st.markdown("普通の文章を入力すると、ヒス構文で返答が返ってきます。")

# セッション状態の初期化
if "messages" not in st.session_state:
    st.session_state.messages = []

# 過去の会話履歴を表示
for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.markdown(message["content"])

# ユーザー入力
user_input = st.chat_input("何か話しかけてみてください...")

# APIキーが入力されているか確認
if api_key:
    # Google AI APIの初期化
    genai.configure(api_key=api_key)
    
    if user_input:
        # ユーザーの入力をチャット履歴に追加
        st.session_state.messages.append({"role": "user", "content": user_input})
        with st.chat_message("user"):
            st.markdown(user_input)
            
        # 「考え中...」のスピナーを表示
        with st.chat_message("assistant"):
            message_placeholder = st.empty()
            message_placeholder.markdown("考え中...")
            
            try:
                # gemini-2.0-flashモデルを使用
                model = genai.GenerativeModel('gemini-2.0-flash')
                
                prompt = f"""
                ユーザーからの入力に対して、「ヒス構文」で返答してください。
                
                ヒス構文とは:
                論理を飛躍させたり論点をすり替え、ヒステリックな語気を使って相手に罪悪感を抱かせることを目的とした構文
                
                ポイント：
                当人がどれだけ疲れているか強調し、頑張っているかを記載することでヒステリック感が出ます
                
                例文：
                1.デートに遅れるってことは、私との時間を出来るだけ減らしたいのね。私はゴキブリ以下の価値ってことね。
                2.ごめんごめんって言うけど、本当に思ってるの？ 私との会話早く切り上げたいだけだよね。あ、どうせ今も私のこと面倒くさいって思ってるんでしょ。はいはい、さっさと消えていなくなりますよ。
                3.頑張れ？ 普段から私は頑張っていないってこと？ じゃあ明日から一日中フルーツでも売り歩いて脚が動かなくなって倒れてしまえばいいのね。
                
                
                ユーザーの入力: {user_input}
                """
                
                # コンテンツを生成
                response = model.generate_content(
                    prompt
                )
                
                hiss_response = response.text
                
                # 少し待ってからレスポンスを表示（タイピング感を出すため）
                time.sleep(1)
                message_placeholder.markdown(hiss_response)
                
                # レスポンスをチャット履歴に追加
                st.session_state.messages.append({"role": "assistant", "content": hiss_response})
                
            except Exception as e:
                message_placeholder.markdown(f"エラーが発生しました: {str(e)}")


# フッター
st.markdown("---")
st.markdown("ヒス構文会話ツール v1.0 - Powered by Streamlit & Google Generative AI")
```

```.env
GOOGLE_API_KEY=先ほど獲得したAPIキーを設定してください
```



## 動作確認
では動作確認をしましょう。以下のコマンドを実行すればいいです
```
streamlit run app.py
```

以下の画面が表示されました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959389/1ef738e1-48dc-4e63-8db0-7dd1533fb0a9.png)


では、次に入力してみましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959389/cfd8dbac-49f1-48da-a638-95c702c33154.png)

ヒスってくれてますね（笑）。一応、うまくいったみたいです



## まとめ
今回は、簡単にですがヒス構文チャットボットを作成してみました。
今後は、実際にAIを1から実装するのも楽しそうなのでやってみたいです



## 参考にした記事
今回の実装は以下の記事を参考にさせてもらいました

https://zenn.dev/nishijima13/articles/7ed472f51240b5

https://qiita.com/hokkey621/items/1bab11cdd14b930e22d5