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

生成AIで社内データを整備しよう

Avatar for GO Inc. dev GO Inc. dev
November 07, 2025
26

 生成AIで社内データを整備しよう

Mobility Night #5 - 「モビリティ x AI」にて、AI開発部の老木が発表した資料です。

https://mobility-night.connpass.com/event/369672/

Avatar for GO Inc. dev

GO Inc. dev

November 07, 2025
Tweet

More Decks by GO Inc. dev

Transcript

  1. © GO Inc. より「早く乗れる」体験に加え、ニーズに応じた豊富なオプションサービスを提供 2 タクシーアプリ『 GO』は実は多様なサービスを提供しています GO優良乗務員 ※サービスによって提供エリア・提供条件が異なります 空気清浄機搭載

    JPN TAXI AI予約 こだわり条件 空港定額 『GO PREMIUM』 複数台配車 アプリのりばも続々開設中 2021年12月 福岡空港 
 2022年4月 ららぽーと福岡 
 2022年7月 羽田空港 
 2022年9月 松山空港 
 2023年11月 麻布台ヒルズ 
 2023年12月 中部国際空港 
 2024年1月 成田空港 
 2024年4月 軽井沢駅 
 2024年6月 関西国際空港 
 2024年7月 旭川空港 
 2025年3月 伊丹空港 
 2025年4月 神戸空港 
 2025年7月 札幌丘珠空港 
 2025年7月 御殿場プレミアム・ 
       アウトレット 
 乗り込みGO Pay ライドシェア対応
  2. © GO Inc. 筆者はデータアナリストとしてさまざまな分析を行っています。 • どれぐらいお迎えに時間がかかっているか • いつタクシーが不足しているのか • 新サービス(多い!)がどれくらい使われているか

    分析対象のデータはBigQueryのテーブルに格納されていますが、 サービスが多様なため、必要なデータがどのテーブルにあるか調べるのが大変 。  → 必要なデータを検索できるようにしよう! 多様なサービスを提供しているということは
  3. 発表者 Background 名前 老木 智章 職種 データアナリスト & エンジニア (配車ロジックチーム責任者)

    ブームの変遷 • BigQuery のクエリ最適化 • ちょっと前まで streamlit が熱かった • 最近は Claude Code が熱い 最近の業績 • Slay the Spire 全実績解除
  4. 生成したメタデータ 生成したメタデータは対人間比で • 記載が丁寧。文章が長い (人間は一単語とか も多い) • 値の意味を1個1個書いてくれる というメリットがあった。 正確性も高く、非常にうまくいっている。

    なお、[ai]タグをつけて AI による生成と明記して、 利用者に注意を促している。 { "table_name": "ways", "description": "[ai]道路情報を格納しています ", "source_file": "ways.go", "columns": [ { "name": "way_type", "description": "[ai]道の大分類を表す, "enums": { "0": "狭路", "1": "交差点" } … 出力イメージ
  5. LLM に与えたソースコード ソースコードにはテーブルに対応する構造体や、 列に格納される列挙型の定義が含まれている。 これにより格納されている値の意味が抽出できる。 const ( WayTypeNone WayType =

    iota // empty WayTypeNarrow // 狭路 WayTypeCross // 交差点 // waysテーブルに対応するモデルクラス type Way struct { WayID uint WayType WayType // 道路種別
  6. プロンプト例 OpenAIのo3-miniにプロンプトを投げている。 プロンプトは Claude Code が生成したものを少しだけ修正して利用。 以下のGoコードを解析して、{table_name}テーブルの情報を抽出してください。 ```go {見つけたソースコード} ```

    {テーブルのスキーマ情報} 以下の情報を抽出してください: 1. テーブル全体の説明(table_description): テーブルの目的や役割を日本語で説明 2. 各列の情報(columns): 構造体のフィールド名とjsonタグを参考に、各列の意味を日本語で推測 "role": "system", あなたはGoコードを解析してデータベーステーブルの列情報を抽出する専門家です。
  7. アプリログのメタデータ生成の難しさ ここまではテーブルに対応した構造体(モデルクラス)があるケースを扱った。 一方、アプリログは • 複数の経路(ソースコード)から同じテーブルに出力される • 出力されるフィールドの明確な定義がない (モデルクラスがない) といった特徴がある。関連するソースコードの抽出がはるかに難しい 。

    アプリログ出力までのステップ 1. column_value = func_column(hoge) # 出力フィールドがどこかの関数で計算される 2. payload[“message”] = column_value # 辞書にフィールドが格納される 3. publishLog(“output_table1”, payload) # output_table1 に辞書が出力される 1-3の処理が複数の場所で行われ、同じテーブルに出ることがある。 (iOSログインとandroidログインなど)
  8. アプリログのメタデータ生成戦略 (RAG 戦略) 生成 AI にどのようなソースを渡すかは、さまざまな戦略が考えられる。 関連しそうなソースコードを大量に渡す 簡単なルールで数十ファイルぐらいひっぱってきてLLMに渡す。 関連ソースコード抽出ルールを作り込む ドメイン知識を使い、grepを駆使して関連ソースコードを抽出する。

    ベクトル検索エンジンにソースコードをいれて検索する 近い領域のソースコードをひっぱってきてLLMに渡す。(grepに負けそう) Coding Agent に関連ソースコードを探索させる Claude Code はコーディング時に関連するソースコードを都度探索している。 同様にメタデータ生成に必要となるソースコードを探索してもらう。
  9. 非対話モードの Claude Code Claude Code の標準的な使い方は、コンソールで人間と対話しながら作業する。 しかし、アプリログのテーブルは大量にあるので、人間なしにメタデータを生成したい。 そこで、Claude Code SDK

    (今はClaude Agent SDK)を使って、pythonから Claude Codeを呼び 出した。 for await (const message of query({ prompt: "foo.pyについての俳句を書いて ", options: { maxTurns: 3, }, })) { messages.push(message); }
  10. 会話履歴から明らかになった失敗のパターン 指示のケアレスミス • 指示が間違っており、存在しないファイルパスを探している • 権限設定が間違っており、ツールが使えていない 指示が間違っていても Claude Code が根性でなんとか結果を出してしまう

    ため、詳細確認まではミスに気づけなかった。 タスクに Claude Code が適応できていない • メタデータ生成に不要な詳細を把握しようとしている • 不必要に広い範囲を読もうとしている • Grepの使い方がおかしい
  11. 総評と結果 $0.4 - $2.4 でばらついていたコストが、会話履歴をもとにしたエンジニアリングの結果 $0.2 - $0.4 程度のばらつきとなり、出力品質の安定性も大きく向上した。 Claude

    Code の賢さには日々驚かされているが、現段階では 人間が明らかに嵌まらな い穴に嵌っている。特に非対話モードではその欠点が顕著になる 。 不要な処理はコスト向上だけでなく出力品質の低下も招いており、簡単に修正できる点 は修正する価値がある。