🥶

BQMLを断念してVertex AI APIに乗り換えた

に公開

この記事は、Unipos Advent Calendar 2025の7日目の記事です。

Uniposで機能開発を担当しているジミーです。

今年の機能開発のハイライトとして、Geminiのモデルを更新した際の話でも簡単に書き下しておこうと思います。モデルの評価については他の方が色々されていると思いますので、この記事では省略いたします。

経緯

Unipos プロダクトでは今年のリリースでAIを活用した機能をリリースしました。
同じチームのバックエンドエンジニアが元設計・開発主導されたものを引き継いで運用しております。

モデルのEoL対応したら出力が壊れた

月次集計のフローの中で利用できるということもありBQMLを利用しておりました。

過去の構成図(簡略版)

利用していたモデル gemini-1.5-flash2025/9に廃止 となるため、後継への切り替えが必要となり探すことに。
BQMLから同リージョンで利用可能な gemini-2.5-flash に置き換えてテストしたところ早速事件が発生しました
gemini-2.5-flash-test
テスト環境でgemini-2.5-flashを制御できなかった結果

モデルに推論が追加された

これは、モデルに 推論 が追加されたことが原因でした。
gemini-1.5-flash 自体が推論をしないモデルであったために安定した出力を見せていましたが、モデルが推論プロセスを通すことにより制御不能に陥った結果がこの状態です

BQMLではこの推論を切るオプションもなく[1]、プロンプトやパラメータ調整だけでは限界もあったため
EoL期限がある中で正直これはかなり焦りました。

また、その推論が出力トークンとして加算されるためトークン量が6倍まで跳ね上がり、検証のためにworkflowsを実行するたび少しヒヤヒヤ。(コスト表参照

Gemini APIの利用に切り替える

APIだと推論を切るオプションが使えるということでこっちに乗り換えを検討しました。

移行後構成図(簡略版)

構造の移行自体には時間がかかりましたが、難なく移行完了。
Vertex AI Studioではチューニングしたパラメータとプロンプトをもとにサンプルコードを作成してくれるようでした。pythonやnode.jsで開発されている方はそのまま利用できそうですね、便利だ。

弊社サーバーは、全体的にGoを使用するケースが多く、なぜかGoには変換してくれなかった ので
GoのSDK使ったサンプルコードをおいておきます


import (
	"google.golang.org/genai"
)

...

	client, err := genai.NewClient(ctx, &genai.ClientConfig{
		Project:  {{プロジェクト}},
		Location: {{リージョン}},
		Backend:  genai.BackendVertexAI,
	})
	if err != nil {
		return nil, err
	}

    ...
	thinkingBudgetZero := int32(0)
	model := "gemini-2.5-flash-lite"
	role := "user"

	config := &genai.GenerateContentConfig{
		Temperature: &temperature,
		TopP:        &topP,
		ThinkingConfig: &genai.ThinkingConfig{
			ThinkingBudget: &thinkingBudgetZero, // 思考コストを0に
		},
	}

	// AI API呼び出し
	parts := []*genai.Part{
		{Text: prompt}, // プロンプトの指定
	}
	contents := []*genai.Content{{
		Role: role,
		Parts: parts,
	}}

	result, err := client.Models.GenerateContent(ctx, model, contents, config)

コスト

月次集計でのみ使用しており、現状月十数円の使用料ですんでいます。
推論がきれない状態でなんとかなってしまった場合、これが月数千円かかる試算だったのでだいぶ抑えられました。今後スケール・機能追加があることを想定すると良い経験でした

しめ

BQMLはライトにクエリから利用できる一方で、狙った出力を求めようとするとチューニングや評価が非常に大変そうだという印象でした。
今後モデルの発展やオプション対応状況によって変化はあるかもしれませんが、
ある程度仕様に沿った出力を期待するようなものではコストに見合わないものかもしれないですね

今回は利用シーンが合わなかったという雑な感想で締めたいと思います

脚注
  1. https://docs.cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-generate-text#arguments_6 ↩︎

Unipos Tech Blog

Discussion