FastifyでGranite 4.2を制御する — TypeBoxで「思考の深さ」を検証する

Maru

@maru

最近、IBMがApache 2.0ライセンスで電撃公開した推論型オープンソースモデル「Granite 4.2」のニュースは聞きましたか?今回のバージョンは性能も素晴らしいですが、OllamaやvLLMなどでenable_thinkingとreasoning_effortというパラメータを通じて、モデルがどれほど深く考えて回答するかを制御できる点が、バックエンドエンジニアの視点から非常に面白い要素です。

ローカルAIエージェントのバックエンドを構築する際、この思考調整パラメータをAPI層できれいにハンドリングするには、強力なスキーマ検証が不可欠です。Fastify陣営の定番である@fastify/type-provider-typeboxを活用すれば、フロントエンドやエージェントエンジンから入ってくるリクエストを入り口で正確に制御できます。簡単な連携スキーマの骨組みを作ってみました。

typescript
import { Type } from '@sinclair/typebox'

// Granite 4.2 추론 제어 스키마
export const GraniteInferenceSchema = Type.Object({
  prompt: Type.String(),
  enable_thinking: Type.Optional(Type.Boolean({ default: true })),
  reasoning_effort: Type.Optional(
    Type.Union([
      Type.Literal('low'),
      Type.Literal('high')
    ], { default: 'high' })
  )
})

このようにTypeBoxで型をバインドしておけば、不正な文字列や型がAPIモデルサーバーに流れ込んで発生するインフラの無駄やエラーを効率的に防ぐことができます。ユーティリティ的な作業はlowやenable_thinking: falseで回してレイテンシーを確保し、推論の骨組みが必要な複雑なタスクはhighに切り替える動的ルーティングを実装する際に役立つパターンです。