information
お知らせ

LOCALLM 2026.01.08

完成 高機能chatbotシステム prototype 01「Trinity」

高機能chatbotシステム prototype 01「Trinity」の概要

主要コンポーネント

| コンポーネント | モデル

システム概要

このチャットボットは、精度と対話能力を両立させるための2層アーキテクチャを採用しています。

  • Layer 1: RAG (Retrieval-Augmented Generation) による事実ベースの回答
    • ユーザーの質問に対し、まずベクトルデータベースを検索し、関連情報を用いて正確な回答を生成します。
  • Layer 2: LLM (ELYZA) による対話アシスト
    • RAGの処理結果に応じて役割を動的に変更します。
      • RAG成功時: 回答に関連する「次の質問」を提案し、ユーザーの対話を円滑に促進します。
      • RAG失敗時: RAGで情報が見つからなかった場合に、LLMが自身の知識で直接回答する「フォールバック」として機能します。
    主な機能と技術的特徴
  1. 使用モデル
    • LLM: elyza/ELYZA-japanese-Llama-2-7b-fast-instruct
      を4-bit量子化して使用し、少ないVRAMでも高速に動作するよう最適化されています。
    • 埋め込みモデル: BAAI/bge-m3 を使用し、質問や文書をベクトル化します。
    • 再ランク付けモデル: BAAI/bge-reranker-v2-m3
      を使い、RAGの検索結果を関連性の高い順に並べ替え、回答精度を向上させています。
  2. 高度なRAGパイプライン
    • ショートカット処理:
      質問が事前に定義されたQ&Aと完全一致する場合や、特定のキーワード(例:「費用」)を含む場合、RAGパイプラインをスキップ
      して即座に固定の回答を返します。
    • クエリ拡張:
      ユーザーの入力キーワード(例:「価格」)に対し、関連語(「初期費用」「掲載料」など)を自動で追加し、検索精度を高めま
      す。
    • 検索と再ランク付け:
      ベクトル検索で得た候補を、より高度な再ランク付けモデルで絞り込み、最適なコンテキストを抽出します。
    • 回答の構造化:
      最も関連性の高い情報を「主要な回答」とし、その他を「補足情報」として組み合わせ、構造化された分かりやすい回答を生成し
      ます。
  3. インテリジェントな対話支援 (Layer 2)
    • 関連質問の提示:
      RAGでの回答後、次につながる質問をランダムに提案することで、ユーザーが求める情報へより深く到達できるよう導きます。
    • フォールバック回答: RAGで対応できない質問に対しては、ELYZAモデルが直接回答を試み、対話の継続を保証します。
    システム動作フロー
  4. 初期化: 各種AIモデルと、Q&Aデータをメモリにロードします。
  5. ユーザー入力: ユーザーからの質問を受け付けます。
  6. Layer 1 (RAG): get_rag_facts関数により、前述のRAGパイプラインを実行し、事実に基づく回答の生成を試みます。
  7. 回答表示: Layer 1のRAGが成功すればその回答を、失敗した場合は「情報がない」という旨のメッセージを表示します。
  8. Layer 2 (アシスト): generate_elyza_assistance関数により、Layer
    1の結果に応じて関連質問の提示、またはフォールバック回答を行います。
  9. ループ: 次のユーザー入力を待ちます。

RAGの知識ソース

RAGが参照する知識ソースは、以下の2つのディレクトリに格納されています。

  1. data/rag_corpus/: 主要な知識ベースとなる文書ファイル群(.txt, .pdf, .json)。
  2. data/lora_finetune/: ファインチューニング用のQ&Aデータ(.jsonl)。 ベクトルデータベースの構築プロセス build_vector_db関数が、これらのソースからvector_db_elyza/に格納されるChromaDBデータベースを構築します。
  3. チャンキング(文書分割):
    • 独自のSimpleJapaneseTokenizerにより、文書は意味のある塊(チャンク)に分割されます。この際、— Type|Label
      —という形式のカスタムヘッダーを認識し、構造化されたチャンキングを行います。
  4. Q&Aデータの特別処理:
    • .jsonl形式のQ&Aデータは特別に扱われます。質問部分をベクトル化し、それを検索キーとします。そして、回答部分を検索結果と
      して返されるコンテンツとして保存します。これにより、「質問に似た質問」を検索して、そのペアとなっている「回答」を直接
      取得する高精度な検索を実現しています。
  5. 埋め込みと保存:
    • BAAI/bge-m3モデルを用いて全チャンク(文書のチャンクとQ&Aの質問)をベクトル化し、ChromaDBに永続化します。

検索プロセス

query_rag関数が検索を実行します。

  1. ユーザーの質問をベク検索プロセス query_rag関数が検索を実行します。
  2. ユーザーの質問をベクトル化し、ChromaDBで類似度が高い上位のチャンクを検索します。
  3. キーワードフォールバック:
    ベクトル検索で結果が見つからなかった場合、自動的にキーワード検索に切り替わり、質問内の単語が多く含まれる文書を返すことで
    、検索漏れを防ぎます。 総括:チャットボットシステムの全体像
    1. データ準備:
      build_db.pyがrag_core_no_nltk.pyを呼び出し、data/rag_corpus/とdata/lora_finetune/内の多様な形式の文書からベクトルデータ
      ベース(vector_db_elyza/)を構築します。特にQ&Aデータは、質問をキー、回答を値とする形でインデックス化されます。
  4. チャット実行: chat.pyがユーザーの質問を受け付けます。
    • まず、完全一致Q&Aや特定キーワードによるショートカット回答を試みます。
    • 次に、検索精度向上のためクエリ拡張を行い、query_ragを呼び出してベクトル検索を実行します。
    • 検索結果は、さらにbge-reranker-v2-m3モデルで再ランク付けされ、最も関連性の高い情報に絞り込まれます。
    • この情報(特にqa_pairを優先)を基にLayer 1の回答が生成・提示されます。
    • 最後にLayer
      2として、RAGが成功した場合は関連質問を、失敗した場合はELYZAモデルがフォールバック回答を生成し、対話を支援します。
    このシステムは、複数のAIモデルを有機的に連携させ、クエリ拡張、ハイブリッドデータソース、キーワードフォールバック、2層アーキ
    テクチャといった洗練された技術を駆使することで、極めて高い回答精度と優れた対話体験の実現を目指した高度なチャットボットである
    と結論付けられます。
    トル化し、ChromaDBで類似度が高い上位のチャンクを検索します。
  5. キーワードフォールバック:
    ベクトル検索で結果が見つからなかった場合、自動的にキーワード検索に切り替わり、質問内の単語が多く含まれる文書を返すことで
    、検索漏れを防ぎます。 総括:チャットボットシステムの全体像 以上の調査結果から、このチャットボットシステムの全体像が明らかになりました。
  6. データ準備:
    build_db.pyがrag_core_no_nltk.pyを呼び出し、data/rag_corpus/とdata/lora_finetune/内の多様な形式の文書からベクトルデータ
    ベース(vector_db_elyza/)を構築します。特にQ&Aデータは、質問をキー、回答を値とする形でインデックス化されます。
  7. チャット実行: chat.pyがユーザーの質問を受け付けます。
    • まず、完全一致Q&Aや特定キーワードによるショートカット回答を試みます。次に、検索精度向上のためクエリ拡張を行い、query_ragを呼び出してベクトル検索を実行します。検索結果は、さらにbge-reranker-v2-m3モデルで再ランク付けされ、最も関連性の高い情報に絞り込まれます。この情報(特にqa_pairを優先)を基にLayer 1の回答が生成・提示されます。最後にLayer
      2として、RAGが成功した場合は関連質問を、失敗した場合はELYZAモデルがフォールバック回答を生成し、対話を支援します。
    このシステムは、複数のAIモデルを有機的に連携させ、クエリ拡張、ハイブリッドデータソース、キーワードフォールバック、2層アーキ
    テクチャといった洗練された技術を駆使することで、極めて高い回答精度と優れた対話体験の実現を目指した高度なチャットボットであると結論付けられます。
ブログカテゴリ
アーカイブ