0
0

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のDiscord Botを作った話

Posted at

はじめに

AI技術の進化とともに、生成AIを活用したチャットボットの需要が増えています。今回、私は学習機能を持つDiscord Botを開発しました。このボットは、ユーザーが登録した情報を学習し、自然な会話で回答を返します。また、生成AIとして Gemini-1.5-Flash を活用し、柔軟で魅力的な応答を実現しました。

この記事では、このプロジェクトの技術スタックや開発の工夫、直面した課題について共有します。


使った技術スタック

技術 内容
Node.js サーバーサイドの基盤として採用。
Discord.js Discord Botのインターフェースを実現。
TypeScript 型安全性を確保し、コードの保守性を向上。
Prisma データベースORMとして採用し、MySQLを操作。
MySQL 学習データを保存するデータベース。
Gemini-1.5-Flash 生成AIとして採用。柔軟で高品質な応答を提供。
Fuse.js 質問と学習データをマッチングするためのあいまい検索。

主な機能

  1. 学習機能

    • !l 質問|答え コマンドで、ユーザーが質問と答えのペアを登録。
    • データはMySQLデータベースに保存。
  2. 質問応答機能

    • !q 質問 コマンドで、登録されたデータやAI生成応答を利用。
    • Fuse.jsを使った類似度検索で、完全一致しない質問にも柔軟に対応。
  3. 生成AI機能

    • 学習データが見つからない場合、Gemini-1.5-Flashを呼び出し、回答を生成。

Gemini-1.5-Flashを使った理由

Gemini-Proでは、ギャンブル関連の質問がSAFETY制約に引っかかることが多く、柔軟性に欠ける場面がありました。一方で、Gemini-1.5-Flash はSAFETYチェックが緩やかで、特定のトピックにも対応可能でした。

const model = genAI.getGenerativeModel({ model: 'gemini-1.5-flash' });
const prompt = `
  以下の質問に簡潔かつ正確に回答してください。
  質問: "${input}"
`;
const result = await model.generateContent(prompt);

苦労したこと

  1. Gemini-ProのSAFETY制約

    • パチスロやギャンブルに関する質問がSAFETY制約により応答拒否されました。
    • 対応: 規制が緩やかだったGemini-1.5-Flashを採用。
  2. 質問の完全一致問題

    • 登録した質問が完全一致しないとデータベースから答えを取得できない問題がありました。
    • 対応: Fuse.jsを使い、学習済みデータとの類似度検索を実装しました。
  3. 学習データとAI生成の切り分け

    • ユーザーの意図を的確に把握し、学習データが存在する場合はそれを優先的に使用。
    • 対応: データベース検索と生成AI呼び出しを連携。

工夫したこと

  1. 類似度検索の導入
    • Fuse.jsを使い、曖昧な質問でも学習済みデータに基づく応答を返す設計。
const fuse = new Fuse(learnedQuestions, {
  keys: ['question'],
  threshold: 0.4,
});
const result = fuse.search(question);
  1. エラーハンドリングの強化
    • Gemini APIやデータベースエラー時の詳細なログ出力を追加。
    • ユーザーには明確なエラーメッセージを返すように対応。

完成したボットの動作例

  1. 学習

    !l パチンコやスロットにはまる人|ぎゃんちゅう
    
    • 質問「パチンコやスロットにはまる人」と回答「ぎゃんちゅう」を登録。
  2. 質問

    !q ぱちんこにはまる人をなんていう?
    
    • 類似検索を行い、登録された回答「ぎゃんちゅう」を返します。
  3. 生成AI

    • 学習データが見つからない場合、Geminiが質問内容に基づいて回答を生成。

まとめ

今回のプロジェクトでは、学習データと生成AIを組み合わせ、柔軟な回答を可能にするDiscord Botを開発しました。特に、Fuse.jsによる類似度検索やGemini-1.5-Flashを活用した生成AI機能は、ギャンブル関連の質問にも適切に対応できる仕組みを提供します。

今後は、以下の改善を検討しています:

  • ユーザーインターフェース(フロントエンド)の構築。
  • 学習内容の可視化や編集機能の追加。
  • 他の生成AIモデル(例: GPT-4)の統合。

参考

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?