LangChain.jsで@langchain/anthropicを使うときは、モデル名を必ず指定しよう(v0.3.15以前)
メンテナーからの指示で、@langchain/anthropicではモデル名の指定が必須となった経緯をまとめる。エラーが発生した際には非推奨のモデルを変更するよう促され、モデル名の必須化に関する問題を解決するためにIssueを立て、メンテナーとやり取りを行った。今後、モデルの進化に備えて明示的にモデル名を指定する必要があることが結論として提示された。その他、LangChain.jsのメンテナーの返信が迅速であり、アプリケーション側でも環境変数で設定可能な形でモデル名を管理することが望ましい。
メンテナーとやりとりした結果、「モデル名を明示的に指定してください」となったので経緯などをまとめます。
結論: @langchain/anthropic
では、モデル名の指定が実質必須
@langchain/anthropic
ライブラリは、TypeScriptの型定義上APIキーだけ渡せば動くようになっています。
const llm = new ChatAnthropic({
anthropicApiKey: this.env.CLAUDE_API_KEY
});
しかしこの場合、利用するモデルがclaude-2.1
になります。非推奨のモデルですし、回答精度がSonnetシリーズと比較して比べ物にならないので、使いたいモデルを明示的に指定しましょう。
const llm = new ChatAnthropic({
model: 'claude-3-7-sonnet-20250219',
anthropicApiKey: this.env.CLAUDE_API_KEY,
});
ちなみに、メンテナーからも「next minor bumpで必須にする」とコメントをもらっていますので、デフォルト値を使っている方は、早めに更新しましょう。
経緯など
Pull Request / Issueなどを書いてみたので、その辺も含めて簡単にまとめます。
1: エラーを発見する
個人的に欲しいワークフローに、LangChain.jsを導入していました。その中でモデル名の指定、特に年月日を特定するのが面倒になったので、あえて指定せずに動かすコードを作ってみました。
const llm = new ChatAnthropic({
anthropicApiKey: this.env.CLAUDE_API_KEY
});
const result = await llm.invoke([
[
"system",
"You are a helpful assistant."
],
[
"user",
content
]
]);
すると以下のエラーが発生します。言っていることはシンプルで、「非推奨のモデルだから新しいのに変えてね」ということですね。このエラー自体は今後も既存のモデルが非推奨になった時に発生しうるので、何かしらの方法でモニタリング・通知する仕組みを作った方がよいかもしれません。
✘ [ERROR] The model 'claude-2.1' is deprecated and will reach end-of-life on July 21st, 2025
Please migrate to a newer model. Visit
https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.
✘ [ERROR] The model 'claude-2.1' is deprecated and will reach end-of-life on July 21st, 2025
Please migrate to a newer model. Visit
https://docs.anthropic.com/en/docs/resources/model-deprecations for more information.
2: モデル変更のpull requestを出して、クローズされる
AnthropicのAPIではモデル名が必須だったはずなので、LangChain.js側でハードコードされた値があるのでは?と思い、コードを調べてPull Requestを作ってみました。ただしこのpull requestはメンテナーによってクローズされます。「クローズするなら、せめてモデル名を必須にしたほうがよいのでは?」と思ったので、Issueを立てて聞いてみたところ、「Yes, it should be required, will fix this in the next minor bump.」との返事をもらいました。
ということで、現状model
パラメータは必須ではないものの、現状としても・将来的にも実質必須の値として扱うべきであるとの結論になりました。
モデルの進化が早すぎるので、model
は明示的に指定しよう
Anthropic以外のモデルについても、四半期に1度くらいのペースで新しいものが出ています。そのため、フレームワーク側がデフォルト値を用意してくれていたとしても、モデル名は明示的に指定すべきでしょう。このペースでサポートしているLLMそれぞれへのデフォルトのモデル名を変更するpull requestが飛んでくるのは、メンテナーとしてもしんどいと思います。
付け加えるならば、新しいモデルの検証やロールバックをやりやすいようにするため、アプリケーション側でもハードコードではなく環境変数などで変更しやすいように作る方がよさそうです。
余談: LangChain.jsのメンテナーめっちゃ返信早い
昨日の日中にpull requestを作ったら、今朝「そうじゃないよ」とフィードバックが来ました。追加で質問したIssueも30分以内に返事が来るなど、@jacoblee93さんのリアクションがめちゃくちゃ早いです。おそらく日本時間の朝がちょうど仕事終わりの時間帯に入ってくるのもあるとは思いますが、Pythonがメインストリームの中でここまで素早く、なおかつ何度も聞いてくるようなユーザーへも返信してくれるのはありがたい話です。
あと、IssueでレポートするとAI Botがいろいろ回答してくれるのもさすがだなと思います。