6
5

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
5
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
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?