Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LT発表資料_20260707_菅野又_AIBot

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 LT発表資料_20260707_菅野又_AIBot

事業部内Lightning Talkイベントでの登壇資料。

Other Decks in Technology

Transcript

  1.  自己紹介 • 菅野又 啓 (すがのまた けい) • 農学 修士卒

    (理系だけど非情報系) • 2021年入社 (6年目) 第四担当 主任エンジニア • 入社以来、基本的にずっと同じ決済代行システムに所属 (ロールはほぼDev、たまにSRE的おしごと) • ソフトウェアアーキテクチャに興味があります © 2026 NTT DATA Japan Corporation 2 @nomata̲tech
  2.  背景 デカすぎて探索しきれない → Claude Codeに調べてもらおう! トークン消費: 20万-50万token = 100-150円ほど(Sonnet5)

    回答自体はそこそこ精度よく得られたが... - ややこしいため要件の勘違いが発生 = 何往復か必要で余計にトークンがかさむ - 複数リポジトリにまたがる仕様の調査が難しい - AI Agentが使える人にしかまともな調査ができない © 2026 NTT DATA Japan Corporation 6
  3.  案1: Chatbotを作ろう → Agentに手元のソースコードを読んでもらうのではなく、 加盟店webのソースコードを事前学習させたChatBotを作って、 簡単に聞けるようにしよう! Open Web UI

    を活用してみる - RAG付きのChatBotを作れるサービス - 環境構築不要! ブラウザからDev以外の人でも簡単に使える © 2026 NTT DATA Japan Corporation 8
  4.  OpenWebUI RAGの手順 • 加盟店管理Webのソースコード (Vue2/Typescript) の内容を要約した RAG用 markdown ファイルをAIで作成

    (250個になりました) • 作成した約250個のmarkdownファイルを OpenWebUIのナレッジベースに登録 # 目的 RAGを使用してこのプロジェクトを生成AIに学習させ、 どのフラグがどんな画面の制御に使用されるかを リファレンスするChatbotを作成します。 # 手順 1. このvueプロジェクトが持つページ構造をリスト化します。 これはこのCopilotAgentのためのタスクリストとして使用します。 2. 各ページについて、そのページ内の要素の制御に使用する値と、 その値がどのようなAPIによって取得されたものかとを、 RAG学習用のmarkdownファイルに要約していきます。 • 作成したナレッジベースを指定してAIと会話 3. markdownファイルはプロジェクトルートに配置された`pagetree` フォルダに格納してください。ファイルには階層に基づく適切な名称を つけてください。 4. 1つのページをmarkdown化するたびに、私がレビューを行います。 私が続行を指示したら、次のページの要約に進んでください。 © 2026 NTT DATA Japan Corporation 9
  5.  うまく行かない... 現在取り組んでいる改修タスクでは、この 加盟店ポータルサイトの決済事業者情報画面で、 以下は、いただいたコンテキストに基づく回答です。 事業者ごとにボーナス払い受付日時を登録できる 決済事業者情報画面とアクセス階層について: ようにする必要があります。 提供いただいたコンテキストは「加盟店グループ単位の審査操作ハブ (/merchant-management/screening)」のみで、決済事業者"

    - 決済事業者情報画面とはどの画面ですか? またログインアカウントがどの階層の場合に 情報"画面 アクセスできますか? (ベンダー詳細・設定を表示する画面)の説明は含まれていません。 - ボーナス払い受付日時を登録・更新・表示 するには、どのようなGraphQLのIFを そのため、どの画面(ルート/コンポーネント)を指すか、 改修する必要がありますか? またどの階層のログインアカウントがアクセスできるかは、 このコンテキストからは特定できません ❌ 「どの画面かは特定できません」が出てしまった... © 2026 NTT DATA Japan Corporation 10
  6.  RAGむずい 🔍 ナレッジベースの学習ファイルは フォルダ分けをすることができない ・全ての学習ファイルが並列で並ぶ ・index.mdがウン十個ある状態 (重複ファイル無視バグ、既知) 🔍 そもそも多数のファイルの中から、

    該当の情報がどこにあるかを見つけられていない 🔍 Open WebUIは単純なキーワード検索はしていない ベクトルDB (ビックデータとか処理するやつ) © 2026 NTT DATA Japan Corporation 11
  7.  Open WebUIの弱点 ❌ 基本はChatbot、ターミナル操作や動的なファイルの検索は苦手 pythonコードは実行できるものの、Agent型LLMレベルの探索機能を自作はキツい ❌ ナレッジベースの学習ファイルの更新が手作業になってしまう APIの口が開けば「CICDの中でマークダウン化してナレッジベースを更新」などの方法は取れる ❌

    学習したファイルしか参照できない 要約ファイルに載っている以外の情報を読み取れない = 精密な探索は苦手 ソースコードを学習させることもできるが、今度は全体把握のインデックスを工夫する必要がある ❌ 会話しかできない AIにはやはり具体的な作業をさせたい、Agentモードは偉大 © 2026 NTT DATA Japan Corporation 12
  8.  Open WebUIの弱点 今回の 用途に は 向いて なかっ たかも ...

    ❌ 基本はChatbot、ターミナル操作や動的なファイルの検索は苦手 pythonコードは実行できるものの、Agent型LLMレベルの探索機能を自作はキツい ❌ ナレッジベースの学習ファイルの更新が手作業になってしまう APIの口が開けば「CICDの中でマークダウン化してナレッジベースを更新」などの方法は取れる ❌ 学習したファイルしか参照できない 要約ファイルに載っている以外の情報を読み取れない = 精密な探索は苦手 ソースコードを学習させることもできるが、今度は全体把握のインデックスを工夫する必要がある ❌ 会話しかできない AIにはやはり具体的な作業をさせたい、Agentモードは偉大 © 2026 NTT DATA Japan Corporation 13
  9.  案2: Agentが調査する仕組みを作ろう Gitlabのパイプライン上で ソースコードをAgentが探索 - 質問者が質問文をフォームから投稿 - Gitlab Issueが作成される

    - Gitlabの パイプライントリガー機能 でパイプラインが起動 - Claude Codeがリポジトリを調査して回答を自動作成 - Devが内容をレビューして最終回答を返答 (念のためHuman-in-the-Loop) © 2026 NTT DATA Japan Corporation 14
  10.  PJ全部盛りリポジトリ ai_workspace/ ← このリポジトリ(親リポジトリ) ├── app/ │ ├── payment_manager/

    │ ├── transaction_manager/ → 各マイクロサービスのリポジトリ (サブモジュール) │ │ ├── payment-core-service/ └── ... (たくさん) │ ├── external-app/ ← 自チーム管轄外アプリ ├── proto/ ← Protobuf (APIのIF) 定義(サブモジュール) ├── infra/ ← Terraform / Helm(サブモジュール) ├── test/ ← テストツール(サブモジュール) ├── doc/ ← HTML仕様書・ドキュメント ├── api_spec/ ← OpenAPI仕様書(サブモジュール) └── .gitlab-ci.yml ← AI回答システムのエントリポイント © 2026 NTT DATA Japan Corporation 16
  11.  パイプラインがやっていること 1. git submodule update --init --recursive --depth 1

    --jobs 4 サブモジュールを全取得 2. mise use --global [email protected] glab@latest claude-codeとgitlabのインストール 3. curl --fail -H "PRIVATE-TOKEN:${TOKEN}" "(略)/issues/${ISSUE_IID}" \ -o .bot/issue.json issue本文を取得 4. claude -p "$(cat .bot/full_prompt.md)" --output-format text > .bot/answer.md 非対話モードでclaude code実行 5. ANSWER="$(cat .bot/answer.md)" jq -n (略) | curl -XPOST (略) 一次回答が作成できたら専用のチャンネルにcurlでAPI投稿 6. (Devメンバが内容をチェックし、最終回答を手動投稿) © 2026 NTT DATA Japan Corporation 17