【LangChain】Configurableで実装する「お客様の気まぐれ」に耐えるAIシステム
はじめに:「やっぱりGPT-4がいい」「いや安くしたい」
クライアントの要望というのは、秋の空のように変わります。
「最高の精度で!」と言われてGPT-4で組んだ翌日に、「請求額が高すぎる!GPT-3.5に戻して!」と怒られる…。開発現場あるあるですよね。
その度にコードを書き換えてデプロイし直すなんて、ナンセンスです。実行時(Runtime)にパラメータを外から注入できるようにしておく。これがプロの仕事です。LangChainの Configurable 機能を使えば、それが簡単に実現できます。
基礎知識:ハードコードは死への第一歩
model = ChatOpenAI(model="gpt-4") と書いてしまった瞬間、そのコードの柔軟性は死にます。
LangChainには
configurable_fields や configurable_alternatives
という仕組みがあり、チェーンの構造を保ったまま、構成要素だけを動的に差し替えることができます。
実装・設定:configurable_fields の使い方
実装は宣言的で美しいです。
from langchain_core.runnables import ConfigurableField
from langchain_openai import ChatOpenAI
model = ChatOpenAI(temperature=0).configurable_fields(
model_name=ConfigurableField(
id="llm_model",
name="LLM Model",
description="The name of the LLM model to use",
)
)
# 実行時に指定!
model.invoke("こんにちは", config={"configurable": {"llm_model": "gpt-3.5-turbo"}})
これで、同じコードベースで「課金ユーザーはGPT-4」「無料ユーザーはGPT-3.5」といった出し分けが可能になります。
応用テクニック:ユーザーごとに検索ソースを切り替える
モデルだけでなく、RAGの検索対象(Retriever)も差し替え可能です。
「経理部の人は『経理規定』から検索」「営業部の人は『商品マニュアル』から検索」といったアクセス制御も、Configurableを使えばif文の地獄にならずに綺麗に書けます。
トラブルシューティング:デフォルト値を忘れるな
Configurableに頼りすぎると、設定を渡し忘れた時にエラーになります。
必ず「何も指定されなかった場合のデフォルト動作」を定義しておきましょう。安全策(Fail-safe)を用意しておくのは、エンジニアのリスク管理の基本です。
まとめ:変更に強いコードは、お財布にも優しい
仕様変更に強いコードを書いておけば、急な方針転換にも設定ファイル(JSONなど)の変更だけで対応できます。
「柔軟性」は、開発者の精神衛生を守るだけでなく、運用コストの削減にも直結します。ぜひConfigurableを使いこなしてください。
コメント
コメントを投稿