💟🎉初めてのAI開発！ワクワクしながら作った問い合わせ対応チャットボット🎉💟


## はじめに

みなさん、こんにちは！👑✨ 優雅にコードを書く、開発初心者エンジニアの私が、初めてAIを活用したシステムを開発しました！🌟 派手な色が大好きで、特に紫には目がありません💜 今回は、社内学習の一環としてAIを使った問い合わせチャットボットを作ったので、その成果と感想をシェアします！

このプロジェクトでは、以下の技術を使いました！👇

- **OpenAI API**：AIの知能を活用して質問に答えてくれるGPTモデル。
- **PostgreSQL（pgvector 拡張）**：AIの記憶として働くベクトル検索データベース。
- **Flask**：アプリの脳みそ（APIバックエンド）。
- **tiktoken**：AIとスムーズに会話するためのトークン制御ライブラリ。

「初学者でもこんなに楽しんで開発できるんだ！」ということを伝えたいと思います😊💜

---

## 🛠 使ったAI技術の詳細

### 1. OpenAI GPT モデル ✨

#### 🧩 埋め込み生成（Embeddingって何！？）

AIが「この文章の意味ってこんな感じかな？」と理解するために、**text-embedding-ada-002** モデルを使って文章を数値化（ベクトル化）しました！


**Embeddingとは？**
テキストを数値（ベクトル）に変換し、類似したテキスト同士を見つける技術です。
例えば、
- 「返品ポリシーを教えてください」
- 「返金のルールについて知りたい」

この2つの質問は単語は違いますが、意味が似ています。Embeddingを使うことで、この2つを同じような数値（ベクトル）に変換し、似た内容として認識できます！

**ざっくり流れ**：
1. ユーザーの質問やデータを入力
2. モデルが文章をベクトル（数値配列）に変換
3. AIがベクトルを比較して「似ている文章」を探す

```python
embedding = openai.Embedding.create(
    model="text-embedding-ada-002",
    input="返品ポリシーを教えて"
)
vector = embedding["data"][0]["embedding"]
```

この `vector` をデータベースに保存し、類似検索に使います。

#### 📝 AIが回答を生成する仕組み

質問を受け取ると、GPT-4に問い合わせて、適切な回答を生成します！

```python
response = openai.ChatCompletion.create(
    model="gpt-4",
    messages=[
        {"role": "system", "content": "あなたは役に立つアシスタントです！"},
        {"role": "user", "content": "ユーザーの質問内容"},
    ]
)
```

GPTさん、天才ですね…！🤖✨

---

### 2. 🗂 ベクトル検索とコサイン類似度

従来の「キーワード検索」ではなく、**文章の意味** を基に検索できるベクトル検索を採用！

#### PostgreSQL の pgvector 拡張 🌟
データを記憶するために **pgvector** を使いました！

#### **検索の流れとコサイン類似度**

🔹 **ユーザーの質問**：「返品ポリシーを教えてください」

1. **ユーザーの質問をベクトルに変換** 🧠
   - `text-embedding-ada-002` を使って、質問の意味を数値（ベクトル）に変換します。
　
2. **データベースのベクトルと比較して、最も似ている情報を探す** 🔍
   - 類似度の計算には **コサイン類似度（cosine similarity）** を使用。
   - これは、2つのベクトルの角度を基に類似度を測る方法で、値が **1に近いほど類似している** ことを示します。
　

3. **最も類似度が高いFAQを取得し、回答を生成** ✨
   - 返品に関する情報が最も類似しているため、「返品は30日以内で可能です。」を取得。

🔹 **コサイン類似度を用いた検索クエリ**
```sql
SELECT content, (1 - (embedding <=> %s)) AS similarity
FROM embeddings
ORDER BY similarity DESC
LIMIT 5;
```

この方法を使うことで、単語が完全に一致しなくても **意味の近い回答** を見つけられるのが大きなメリットです！✨

---

### 3. 📏 AIのためのトークン制御（tiktoken とは？）

AIは一度に長い文章を処理できないので、適切に文章を分割する **tiktoken** を使いました！

**トークンとは？**
GPTは「トークン」という単位で文章を処理します。
例えば、
- 「こんにちは、今日はいい天気ですね。」 → **10トークン**
- 「Hello, today is a nice day.」 → **7トークン**

GPTにはトークンの制限があるので、長すぎる文章は**分割して処理**する必要があります。

💡 **tiktoken の活用ポイント**
- テキストを短く分割し、512トークン以内に調整！
- 無駄な改行や空白を削除！

```python
import tiktoken

enc = tiktoken.encoding_for_model("gpt-4")
text = "これは長い文章です...（省略）"
tokens = enc.encode(text)
if len(tokens) > 512:
    tokens = tokens[:512]  # 512トークン以内にカット
```

これを使えば、AIがスムーズに処理できます！

---

## 🎮 システム全体の動き

1. **ユーザーが質問を送る** 📨
2. **質問をベクトル化して類似情報を検索** 🔍
3. **AIが回答を生成し、返答！** 🤖
4. **回答を保存して、未来の問い合わせにも対応！** 📂
　
 開発中、AIがどんどん賢くなっていく感じがして、まるで育ててるようでした…！💜
このシステムの詳細な設計や実装については、次回の投稿で解説します！
---

## 🚀 今後の改善ポイント

- **キャッシュ導入で高速化！⚡️**
- **多言語対応をしてみたい！🌍**
- **もっと見た目も紫でオシャレにしたい💜！**
- **スマホ対応のUI**

---

## 💡 まとめ

初めてのAI開発、とっても楽しかったです！😆🎉

・AIが文章を理解する仕組みが学べた！
・ベクトル検索の凄さを実感！
・FlaskやDB操作も実践できた！

何より「コードを書く楽しさ」を再確認できました💜

「AIって面白い！」と思ってもらえたら嬉しいです！

また次の開発にも挑戦します！✨

---

**📚 参考リンク**
- [OpenAI API ドキュメント](https://platform.openai.com/docs/)
- [pgvector GitHub リポジトリ](https://github.com/pgvector/pgvector)