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

嗚呼、当時の本番環境の状態で AI Agentを再評価したいなぁ... / / Ah, I w...

Avatar for Civitaspo Civitaspo
November 11, 2025

嗚呼、当時の本番環境の状態で AI Agentを再評価したいなぁ... / / Ah, I wish I could re-evaluate the AI ​​Agent in the production environment it was in back then...

第16回 Data-Centric AI勉強会 https://dcai-jp.connpass.com/event/372441/ の登壇資料です。

@po3rin との共同発表で、同じ資料を @po3rin のアカウントでアップロードしています。
シェアする場合、こちらのリンクを使用してください。
https://speakerdeck.com/po3rin/wu-hu-dang-shi-noben-fan-huan-jing-nozhuang-tai-de-ai-agentwozai-ping-jia-sitainaa-dot-dot-dot

Avatar for Civitaspo

Civitaspo

November 11, 2025
Tweet

More Decks by Civitaspo

Other Decks in Technology

Transcript

  1. © LayerX Inc. 3 バクラク事業部 BizOps部 データグループ TechLead 兼 Platform

    Engineering部 SRE Snowflake Squad 2025 Snowflake九州ユーザー会 主宰 SNS 𝕏 civitaspo civitaspo その他 画像を⼊れてね civitaspo (キビタスポ/ きびちゃん) ⾃⼰紹介
  2. © LayerX Inc. 5 会社紹介 すべての経済活動を、 デジタル化する。 Mission ⼈類の未来をより良くする。 そのために私たちは、テクノロジーの可能性を探求し、

    経済活動における複雑で⼤きな課題に挑む。 仕事や暮らしの中にある摩擦が解消され、 それぞれの創造⼒が発揮されている。 そんな希望あふれる優しいデジタル社会を、 未来に残していくために。
  3. 🙌 AI Agentの過去データを使ったバックテスト基盤が欲しい 🛠 Dev: AI Agent機能の実験/評価がはかどる 👔 Sales: 提案に使える(この機能を導入すると一ヶ月で差し戻しがN件減ります)

    󰠀 User: 自分で設定したAI Agent機能の効果をチェックできる 🤖 Agent: 自分で作ったレビュールールをチェックし、自己修復を回せるようになる。 Data-CentricにAI Agentの精度を改善し、ビジネスも改善していく基盤が欲しい!
  4. © LayerX Inc. 21 • UDFの⼀種で、表形式のデータを返却できる機能 • BigQueryやDatabricksではTable Functions、またはTable-valued function

    (TVF) と呼ばれる。 補⾜: Tabular SQL UDFs (UDTFs) スナップショット機能のインターフェース 出典: Tabular SQL UDFs (UDTFs) | Snowflake Documentation 出典: Table functions | BigQuery | Google Cloud Documentation 出典: Table-valued function (TVF) invocation | Databricks on AWS
  5. © LayerX Inc. 23 • ここからcivitaspoのパートでは、スナップショット取得機能のみにフォーカスしてお話します。 Data-Centric AIというかデータ基盤な話になるのをご容赦ください。 • DWHソリューションとしてSnowflakeを利⽤している前提で書いています。BigQueryなど他のソ

    リューション向けにも補⾜をしますが、⾜りなければ質問してください。 • 『AI Agentのビジネス価値を計るバックテスト基盤の構築』を⽀えるSnowflake上での任意時点の スナップショット取得を実現するデータパイプライン - LayerX エンジニアブログ にて弊社の事例を 書きましたが、本スライドでは理解を促すために⼀部簡略化して説明しています。 おことわり
  6. © LayerX Inc. 25 • MySQLのテーブルを定期的にフルダンプしたデータ • MySQLのChange Data Capture

    2種類のデータソースを使⽤する スナップショット取得機能で使⽤するデータソース
  7. © LayerX Inc. 26 • Aurora Cluster ExportでS3にParquetとして定期的にフルダンプ • S3上のParquetファイルをSnowflakeからExternal

    Tableとして参照 MySQLのテーブルを定期的にフルダンプしたデータ スナップショット取得機能で使⽤するデータソース 参考: Aurora Cluster Exportで出⼒したデータをdbtを使ってSnowflakeへImportする - LayerX エンジニアブログ
  8. © LayerX Inc. 27 • AWSのAuroraが持つ機能。 • データベースに負荷をかけることなくS3へ全データをフルダンプできる。 • Aurora

    MySQLだけでなく、Aurora PostgreSQLでも出⼒可能。 • 出⼒されるデータはParquetに変換される。 ◦ 型マッピング: Considerations for DB cluster snapshot exports - Amazon Aurora 補⾜: Aurora Cluster Export スナップショット取得機能で使⽤するデータソース 参考: Exporting DB cluster data to Amazon S3 - Amazon Aurora
  9. © LayerX Inc. 28 • Debeziumを使って、MySQLのbinlogからCDCを取得 • 取得したCDCはManaged Streaming for

    Apache Kafkaを経由してSnowflakeへ • 平均約1分程度の遅延でSnowflakeに格納される MySQLのChange Data Capture(CDC) スナップショット取得機能で使⽤するデータソース 参考: 『AI Agentのビジネス価値を計るバックテスト基盤の構築』を⽀えるSnowflake上での任意時点のスナップショット取得を実現するデータパイプライン - LayerX エンジニアブログ
  10. © LayerX Inc. 29 • 様々なデータベースからCDCを取得するOSS ◦ MySQLの場合は binlog から

    ◦ PostgreSQLの場合は WAL から • Kafka Connectを使⽤している場合は Exactly-Once Semantics で動作させることが 可能なため、重複や⽋損なくデータを Kafka に吸い出せる。 • 内部的には、binlog のファイル名とpos/row をKafka Connectのメモリ上で管理し、毎回確 認することで重複‧⽋損を防いでいる。 補⾜: Debezium スナップショット取得機能で使⽤するデータソース 参考: Debezium
  11. © LayerX Inc. 30 • SnowflakeでStreaming Data Ingestionを実現する機能 • 2025/09/23にV2がGAし、テーブルあたり10GB/sのスループットが出る

    • 書き込みから読み出せるようになるまで5~10秒程度 補⾜: Snowpipe Streaming V2 スナップショット取得機能で使⽤するデータソース 参考: https://docs.snowflake.com/en/user-guide/snowpipe-streaming/snowpipe-streaming-high-performance-overview
  12. © LayerX Inc. 36 フルダンプを取得した時間から取得したい時間までのCDCを取得 スナップショット取得機能におけるデータ処理の仕組み 2025-11-12 18:54:11 {"op" :"c",

    "updated_at": "2025-11-12 03:11:00", "record": {"id": 5, "name": "taro", ...}} {"op" :"u", "updated_at": "2025-11-12 04:11:00", "record": {"id": 2, "name": "jiro-x", ...}} {"op" :"c", "updated_at": "2025-11-12 04:11:00", "record": {"id": 6, "name": "saburo", ...}} {"op" :"u", "updated_at": "2025-11-12 05:11:00", "record": {"id": 6, "name": "saburo-x", ...}} {"op" :"u", "updated_at": "2025-11-12 06:11:00", "record": {"id": 1, "name": "shiro-x", ...}} {"op" :"d", "updated_at": "2025-11-12 07:11:00", "record": {"id": 1, "name": "shiro-x", ...}} {"op" :"c", "updated_at": "2025-11-12 08:11:00", "record": {"id": 7, "name": "goro", ...}} {"op" :"d", "updated_at": "2025-11-12 09:11:00", "record": {"id": 7, "name": "goro", ...}} {"op" :"c", "updated_at": "2025-11-12 10:11:00", "record": {"id": 8, "name": "rokuro", ...}} {"op" :"u", "updated_at": "2025-11-12 11:11:00", "record": {"id": 8, "name": "rokuro-x", ...}} {"op" :"d", "updated_at": "2025-11-12 12:11:00", "record": {"id": 8, "name": "rokuro-x", ...}} {"op" :"u", "updated_at": "2025-11-12 13:11:00", "record": {"id": 3, "name": "nanakuro-x", ...}} {"op" :"u", "updated_at": "2025-11-12 14:11:00", "record": {"id": 3, "name": "nanakuro", ...}}
  13. © LayerX Inc. 37 CDCデータをプライマリーキーに対して最新のレコードだけ取得 スナップショット取得機能におけるデータ処理の仕組み 2025-11-12 18:54:11 {"op" :"c",

    "updated_at": "2025-11-12 03:11:00", "record": {"id": 5, "name": "taro", ...}} {"op" :"u", "updated_at": "2025-11-12 04:11:00", "record": {"id": 2, "name": "jiro-x", ...}} {"op" :"c", "updated_at": "2025-11-12 04:11:00", "record": {"id": 6, "name": "saburo", ...}} {"op" :"u", "updated_at": "2025-11-12 05:11:00", "record": {"id": 6, "name": "saburo-x", ...}} {"op" :"u", "updated_at": "2025-11-12 06:11:00", "record": {"id": 1, "name": "shiro-x", ...}} {"op" :"d", "updated_at": "2025-11-12 07:11:00", "record": {"id": 1, "name": "shiro-x", ...}} {"op" :"c", "updated_at": "2025-11-12 08:11:00", "record": {"id": 7, "name": "goro", ...}} {"op" :"d", "updated_at": "2025-11-12 09:11:00", "record": {"id": 7, "name": "goro", ...}} {"op" :"c", "updated_at": "2025-11-12 10:11:00", "record": {"id": 8, "name": "rokuro", ...}} {"op" :"u", "updated_at": "2025-11-12 11:11:00", "record": {"id": 8, "name": "rokuro-x", ...}} {"op" :"d", "updated_at": "2025-11-12 12:11:00", "record": {"id": 8, "name": "rokuro-x", ...}} {"op" :"u", "updated_at": "2025-11-12 13:11:00", "record": {"id": 3, "name": "nanakuro-x", ...}} {"op" :"u", "updated_at": "2025-11-12 14:11:00", "record": {"id": 3, "name": "nanakuro", ...}}
  14. © LayerX Inc. 38 • Window関数を条件にフィルタリングすると きにQUALIFY句を使⽤する。 • 重複排除の⽂脈でrow_number() と⽤いられ

    ることが多い。 補⾜: QUALIFY 1 = ROW_NUMBER() OVER ( PARTITION BY pk ORDER BY updated_at DESC ) スナップショット取得機能におけるデータ処理の仕組み 参考: QUALIFY | Snowflake Documentation
  15. © LayerX Inc. 39 CDCデータを作成‧更新‧削除に分解 スナップショット取得機能におけるデータ処理の仕組み 2025-11-12 18:54:11 {"op" :"c",

    "updated_at": "2025-11-12 03:11:00", "record": {"id": 5, "name": "taro", ...}} {"op" :"u", "updated_at": "2025-11-12 04:11:00", "record": {"id": 2, "name": "jiro-x", ...}} {"op" :"u", "updated_at": "2025-11-12 05:11:00", "record": {"id": 6, "name": "saburo-x", ...}} {"op" :"d", "updated_at": "2025-11-12 07:11:00", "record": {"id": 1, "name": "shiro-x", ...}} {"op" :"d", "updated_at": "2025-11-12 09:11:00", "record": {"id": 7, "name": "goro", ...}} {"op" :"d", "updated_at": "2025-11-12 12:11:00", "record": {"id": 8, "name": "rokuro-x", ...}} {"op" :"u", "updated_at": "2025-11-12 14:11:00", "record": {"id": 3, "name": "nanakuro", ...}}
  16. © LayerX Inc. 40 フルダンプデータから更新‧削除レコードをanti-join スナップショット取得機能におけるデータ処理の仕組み {"op" :"u", "updated_at": "2025-11-12

    04:11:00", "record": {"id": 2, "name": "jiro-x", ...}} {"op" :"u", "updated_at": "2025-11-12 05:11:00", "record": {"id": 6, "name": "saburo-x", ...}} {"op" :"d", "updated_at": "2025-11-12 07:11:00", "record": {"id": 1, "name": "shiro-x", ...}} {"op" :"d", "updated_at": "2025-11-12 09:11:00", "record": {"id": 7, "name": "goro", ...}} {"op" :"d", "updated_at": "2025-11-12 12:11:00", "record": {"id": 8, "name": "rokuro-x", ...}} {"op" :"u", "updated_at": "2025-11-12 14:11:00", "record": {"id": 3, "name": "nanakuro", ...}} 2025-11-12 03:00:00
  17. © LayerX Inc. 42 残ったデータに作成‧更新レコードをunion スナップショット取得機能におけるデータ処理の仕組み 2025-11-12 03:00:00 {"op" :"c",

    "updated_at": "2025-11-12 03:11:00", "record": {"id": 5, "name": "taro", ...}} {"op" :"u", "updated_at": "2025-11-12 04:11:00", "record": {"id": 2, "name": "jiro-x", ...}} {"op" :"u", "updated_at": "2025-11-12 05:11:00", "record": {"id": 6, "name": "saburo-x", ...}} {"op" :"u", "updated_at": "2025-11-12 14:11:00", "record": {"id": 3, "name": "nanakuro", ...}}
  18. 🐓 Workflow Toolとして実装する 理想としては、必要なコンテキストを揃えるた めのtoolをリソース志向APIではなく、一回の 呼び出しで全てのコンテキストを取得できるよ うな Workflow Tool として用意すべきです。

    https://www.anthropic.com/engineering/writing-tools-for-agents > 評価タスクに適した、影響の大きい特定のワークフ ローを対象とした、思慮深いツールをいくつか構築し、 そこからスケールアップしていくことをお勧めします。 by Anthropic
  19. © LayerX Inc. 71 • LayerXでは、⼀緒にデータ基盤、AI Agent基盤、ML基盤を作る仲間を⼤募集しています!!! • 興味を持たれた⽅は是⾮ jobs.layerx.co.jp

    へアクセスしてください!!! We are hiring!!! おわりに 【バクラク】データエンジニア 【バクラク】ソフトウェアエンジニア_AI-UX 【バクラク】MLOpsエンジニア 【バクラク】エンジニアリングマネージャー_AI‧機械学習領域