スキップしてメイン コンテンツに移動

【LangChain】Configurableで実装する「お客様の気まぐれ」に耐えるAIシステム

【LangChain】Configurableで実装する「お客様の気まぐれ」に耐えるAIシステム

はじめに:「やっぱりGPT-4がいい」「いや安くしたい」

クライアントの要望というのは、秋の空のように変わります。
「最高の精度で!」と言われてGPT-4で組んだ翌日に、「請求額が高すぎる!GPT-3.5に戻して!」と怒られる…。開発現場あるあるですよね。

その度にコードを書き換えてデプロイし直すなんて、ナンセンスです。実行時(Runtime)にパラメータを外から注入できるようにしておく。これがプロの仕事です。LangChainの Configurable 機能を使えば、それが簡単に実現できます。

基礎知識:ハードコードは死への第一歩

model = ChatOpenAI(model="gpt-4") と書いてしまった瞬間、そのコードの柔軟性は死にます。
LangChainには configurable_fieldsconfigurable_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を使いこなしてください。

この記事はAI技術を活用して作成されましたが、内容は慎重に確認されています。

コメント