はじめに
みなさん、こんにちは!👑✨ 優雅にコードを書く、開発初心者エンジニアの私が、初めて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つを同じような数値(ベクトル)に変換し、似た内容として認識できます!
ざっくり流れ:
- ユーザーの質問やデータを入力
- モデルが文章をベクトル(数値配列)に変換
- AIがベクトルを比較して「似ている文章」を探す
embedding = openai.Embedding.create(
model="text-embedding-ada-002",
input="返品ポリシーを教えて"
)
vector = embedding["data"][0]["embedding"]
この vector
をデータベースに保存し、類似検索に使います。
📝 AIが回答を生成する仕組み
質問を受け取ると、GPT-4に問い合わせて、適切な回答を生成します!
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "あなたは役に立つアシスタントです!"},
{"role": "user", "content": "ユーザーの質問内容"},
]
)
GPTさん、天才ですね…!🤖✨
2. 🗂 ベクトル検索とコサイン類似度
従来の「キーワード検索」ではなく、文章の意味 を基に検索できるベクトル検索を採用!
PostgreSQL の pgvector 拡張 🌟
データを記憶するために pgvector を使いました!
検索の流れとコサイン類似度
🔹 ユーザーの質問:「返品ポリシーを教えてください」
-
ユーザーの質問をベクトルに変換 🧠
-
text-embedding-ada-002
を使って、質問の意味を数値(ベクトル)に変換します。
-
-
データベースのベクトルと比較して、最も似ている情報を探す 🔍
- 類似度の計算には コサイン類似度(cosine similarity) を使用。
- これは、2つのベクトルの角度を基に類似度を測る方法で、値が 1に近いほど類似している ことを示します。
-
最も類似度が高いFAQを取得し、回答を生成 ✨
- 返品に関する情報が最も類似しているため、「返品は30日以内で可能です。」を取得。
🔹 コサイン類似度を用いた検索クエリ
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トークン以内に調整!
- 無駄な改行や空白を削除!
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4")
text = "これは長い文章です...(省略)"
tokens = enc.encode(text)
if len(tokens) > 512:
tokens = tokens[:512] # 512トークン以内にカット
これを使えば、AIがスムーズに処理できます!
🎮 システム全体の動き
- ユーザーが質問を送る 📨
- 質問をベクトル化して類似情報を検索 🔍
- AIが回答を生成し、返答! 🤖
-
回答を保存して、未来の問い合わせにも対応! 📂
開発中、AIがどんどん賢くなっていく感じがして、まるで育ててるようでした…!💜
このシステムの詳細な設計や実装については、次回の投稿で解説します!
🚀 今後の改善ポイント
- キャッシュ導入で高速化!⚡️
- 多言語対応をしてみたい!🌍
- もっと見た目も紫でオシャレにしたい💜!
- スマホ対応のUI
💡 まとめ
初めてのAI開発、とっても楽しかったです!😆🎉
・AIが文章を理解する仕組みが学べた!
・ベクトル検索の凄さを実感!
・FlaskやDB操作も実践できた!
何より「コードを書く楽しさ」を再確認できました💜
「AIって面白い!」と思ってもらえたら嬉しいです!
また次の開発にも挑戦します!✨
📚 参考リンク