6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-02-07

はじめに

みなさん、こんにちは!👑✨ 優雅にコードを書く、開発初心者エンジニアの私が、初めて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がベクトルを比較して「似ている文章」を探す
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 を使いました!

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

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

  1. ユーザーの質問をベクトルに変換 🧠

    • text-embedding-ada-002 を使って、質問の意味を数値(ベクトル)に変換します。
       
  2. データベースのベクトルと比較して、最も似ている情報を探す 🔍

    • 類似度の計算には コサイン類似度(cosine similarity) を使用。
    • これは、2つのベクトルの角度を基に類似度を測る方法で、値が 1に近いほど類似している ことを示します。
       
  3. 最も類似度が高い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がスムーズに処理できます!


🎮 システム全体の動き

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

🚀 今後の改善ポイント

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

💡 まとめ

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

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

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

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

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


📚 参考リンク

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?