エンジニア向け:初めてのDatabricksとOpenAI Agents SDKを使ったエージェント開発入門

Published on: | Last updated:

小売の現場でさ、朝イチに「今日の売上どう?」って聞かれて、昼に「在庫足りてる?」って詰められて、夕方に「返品ポリシー的にそれOK?」って来て。

ダッシュボードは3つ開いて、SQLは誰かが書いた謎のやつで、ポリシーPDFはSharePointの奥底。

で、結局ぜんぶ人間が右往左往して答えるやつ。あるある。😮‍💨

結論:Databricks Apps上でStreamlit+OpenAI Agents SDKを組むと、Genie rooms・Vector Search・ai_forecast()を1つの会話UIに束ねて、権限付きで店のKPI・在庫・規程・予測まで同じ窓から引ける。

  • 道具の分離:Genie roomsを「部門ツール」として切る(売上系/在庫系)
  • 規程はRAG:Databricks Vector Searchでポリシー文書を検索して文脈注入
  • 予測はML:ai_forecast()を会話から呼んで“数字”を返す
  • 配布はApps:Databricks Appsでデプロイ、Secretsとアクセス制御も一緒
  • 監視は痕跡:Databricks Agent Monitoringでトレースとレイテンシ見える化
  • これ、ちゃんと「企業内で運用できる会話アプリ」の型なんだよね
図1:店長の質問が「どのツールに落ちるか」ざっくり全体像
図1:店長の質問が「どのツールに落ちるか」ざっくり全体像

まずこれ何を作ってるのかって話

Store Intelligence Assistantは、Streamlitの対話UIから自然文で質問すると、Databricks Genie rooms・Vector Search・ai_forecast()をOpenAI Agents SDKが編成して答えを返すエンタープライズ向け分析アプリだ。

いわゆる「チャットボット」って言うと軽いけど、実態は“ツールの束ね役”だよね。

会話は入口。

中でやってるのは、KPIはSQL/メトリクス、規程はベクトル検索、予測はモデル呼び出し。ぜんぶ別々の筋肉。

地味に効くポイント:LLMはDatabricksのMosaic AI Gateway上のエンドポイントとして用意して、アプリ側はそれを叩く。企業のネットワークとガバナンスの文脈で「そこ置くのが現実」ってやつ。

うっかり外のAPI直で…みたいな構成だと、あとから監査で死ぬ。ほんとに。

Genie roomsをツール扱いにするのがうまい

Databricks Genie roomsを専門ツールとして分けると、ドメイン別の質問をそれぞれの部屋に投げられて、権限も最小化できる。

これ、妙に刺さる。だって部門って、混ぜると燃えるから。

原文の構成だと部屋は2つ。

  • Store Performance Genie room:売上、トレンド、来店(foot traffic)、BOPIS、会員更新、粗利、あとai_forecast()で売上予測
  • Product Inventory Genie room:店頭在庫(on-hand)、安全在庫(safety stock)、発注点(reorder point)、発注残(on-order)

で、ここが気持ちいいのが、各部屋が独立して育つところ。

売上側だけ「月次予測をその場で出す関数」を仕込む、とかね。

在庫側は在庫側で、閾値や発注ロジックのクセがある。

混ぜない。分ける。

「エージェントをツールとして扱う」って発想が、OpenAI Agents SDKの推奨パターンに沿う、ってのがまた現実的でイヤに強い。

権限の話:部屋ごとにアクセス制御を切れるし、マスキングルールも噛ませやすい。つまり、経理の数字を在庫チームに“うっかり見せない”がやりやすい。

ここで事故ると、Slackが凍る。😇

図2:Genie roomsを「部門ツール」として分割したイメージ
図2:Genie roomsを「部門ツール」として分割したイメージ

ポリシーとか規程はVector Searchが一番早い

返品手続きや行動規範などの非構造ドキュメントは、Databricks Vector Searchでチャンク化・埋め込み・索引化して、質問時に近い断片を取り出すのが定番になる。

表に入らない文章、表に入れようとするとだいたい泣く。

やり方はわりと素直で、原文もこの流れ。

  • ドキュメントを意味のある塊に分割(chunk)
  • 各chunkを埋め込みモデルでembedding化
  • embeddingをDatabricks Vector Search indexに保存
  • 問い合わせ時にindex検索→関連chunkをコンテキストに注入→回答

で、サーバレスエンドポイントとして露出できるから、エージェント側からは「必要なら呼ぶ道具」になる。

レイテンシも抑えやすい。ここは運用で効いてくる。

ありがちな事故:ポリシー文書が更新されてるのに、ボットが古いルールを言う。

だから“同期してインデックス更新できる設計”が前提になる。更新頻度が高い業務、ここで詰む。

ai_forecastでクラシックMLを会話に混ぜる

Store Performance Genie roomからDatabricksのai_forecast()を呼ぶと、会話の中で売上予測などの時系列予測を返せる。

GenAIだけだと、予測が“雰囲気”になりがちだからね。

この混ぜ方、好きなんだよな。

予測は予測で、ちゃんとモデルが数字を出す。

会話はそれを解釈して、言葉にする。

さらに:原文がさらっと言ってるけど、同じパターンでModel Servingのエンドポイントも叩ける。つまり、既に動いてる従来ML(需要予測、離反、異常検知…)を、会話の“増強パーツ”として再利用できる。

捨てない。載せる。

これが現場の勝ち筋。たぶん。

図3:RAGと予測の役割分担の対比
図3:RAGと予測の役割分担の対比

Databricks Appsで配布まで一気にやる

Databricks Appsを使うと、Streamlitアプリをワークスペース内でデプロイして、Secrets管理やアクセス制御と一緒に運用に乗せられる。

“動いた”と“使える”の間の谷、ここで埋める感じ。

デプロイ手順は原文の通りで、割と型が決まってる。

1) Databricks workspaceにsecretsを作る
2) databricks apps create <app-name>
3) databricks sync --watch でローカルと同期
4) databricks apps deploy <app-name>

この「sync --watch」って、地味に精神衛生に効く。

デプロイの往復が速いと、設計が雑でも立て直せる。いや、雑はダメなんだけど。😅

監視しない会話アプリはだいたい闇落ちする

Databricks Agent Monitoringを入れると、エージェントのトレースがDatabricksに戻って、リクエスト数・レイテンシ・トークンなどの運用メトリクスが見える。

可観測性があると、改善が“気合”じゃなくなる。

ここ、ほんと現場っぽい話で。

最初は動くんだよ。

でも、ある日突然「今日は遅い」って言われる。

その時に、どのツール呼び出しが詰まってるか、プロンプトが肥大化してないか、Vector Searchのヒットがズレてないか。

見えないと、全部“体感”になる。

体感運用、しんどい。ほんとに。😵‍💫

スクショ用の自分チェックリスト置いとく

規則:これは「作る前に詰むポイント」を潰す用。スクショしてチームのチャットに投げるやつ。

  • 質問の種類が3つに分かれてる? KPI/在庫/規程(+予測)を混ぜてない?
  • Genie roomsの境界が言語化できる? どの質問がどの部屋に落ちるか、説明できないと運用で揉める
  • 権限設計が先? 部屋ごとにアクセス制御、マスキングの前提がある?
  • 非構造データはVector Searchに寄せた? PDFをテーブルに入れようとしてない?(やめとけ)
  • チャンク戦略ある? 規程文書、1チャンクが長すぎると当たり前に外す
  • 更新頻度の想定ある? ポリシー更新→index更新が遅れると事故る
  • 予測は“雰囲気”じゃない? ai_forecast()やModel Servingで数字を出す導線がある?
  • エンドポイントの置き場は決めた? Mosaic AI Gatewayで管理する前提になってる?
  • デプロイ手順が再現できる? secrets→create→sync→deploy、誰がやっても同じ?
  • 監視が最初から入ってる? Agent Monitoringでトレースが取れる?
  • 失敗パターンを書いた? 「Vector Searchが外す」「権限で弾く」「予測が欠損」時の挙動

これ埋まってないまま進むと、あとで泣くのはだいたい運用担当。

未来の自分が怒ってくる。笑

結局この構成の強さって何なの

このアーキテクチャの強みは、Vector SearchのRAG、Text-to-SQLの分析、ai_forecast()の予測、Genie roomsの専門性、Databricks Appsのデプロイと統制を、OpenAI Agents SDKで一つの会話フローに束ねた点にある。

単機能のボットじゃなくて、「企業内の道具箱を会話で引き出す」って形になる。

でさ、ここからが個人的に熱いところ。

会話UIって、KPIを見に行く人だけじゃなくて、見に行かない人も巻き込むじゃん。

現場の人が“言葉”で聞けるのは強い。

ただ、言葉で聞けるようにした瞬間、ガバナンスと観測が必須になる。

楽になった分、責任も増える。うん。

図4:運用で死なないための最終まとめ
図4:運用で死なないための最終まとめ

最後に一個だけ:この手の話、みんなの「一番しんどかった事故」どれ?

権限で燃えたやつ?ポリシーの古い版を答えて炎上したやつ?それとも、レイテンシ地獄で“使われなくなった”やつ?

比惨大会しよ。こっちもネタある。😑

Related to this topic:

Comments