📚

LangChain社を訪問して in サンフランシスコ

2024/08/06に公開

LangChainとは?

今回は5月にLangChain社に訪問した記事を書こうと思いますが、そもそもLangChainを知らない人も多いと思うのでまずはそこから解説します。LangChainはLLMを利用する上でのフレームワークの位置付けで、LLMのモデルを切り替えたり、RAGの機能が提供されたり、Chainと言ってLLMを繋げて組み合わせるなどのさまざまな機能が提供されます。

ちなみに、7月に公開した動画(【生成AI】対談動画 Galirage×MUIT)
https://www.youtube.com/watch?v=q6I51oE5qrA
でコラボさせていただいた、森重さんが書かれているサイトにとても良くまとまっていますので、そちらを参考にされると良いと思います。オススメです!
https://zenn.dev/umi_mori/books/prompt-engineer/viewer/langchain_overview

LangChainは代表のハリソンさんによって立ち上げられたOSSのプロジェクトで、2022年に初版が出ています。最近では日本語訳の本も出始めていますし、直近では私も出版でお世話になった技術評論社さんの「Software Design 2024年8月号」で、「LangChainで始めるLLMアプリ開発入門」でも解説されています。こちらもオススメです。
https://gihyo.jp/magazine/SD/archive/2024/202408

ちなみに、LangChainのプロダクトとしては、フレームワークであるLangChain以外に、LangSmithとLangGraphがあります。この2つはあまり知られていないと思うので少し解説します。
LangSmithは、一言で言えばLLMOpsを支えるためのツールです。LLMを使って開発していくときに重要になってくるのは精度の高い結果を得るためのトライアンドエラーです。何度か繰り返しながら目標とする結果を得るという”プロセスを回す”のですが、その高速化のための機能が含まれます。LLMの実行ログを収集しデバッグを支援したり、得られた結果を収集したり、モデルの評価を支援する機能があります。
また、LangGraphのほうはマルチエージェントを支援するライブラリ群になります。公式ではマルチアクターアプリケーションと書かれているのですが、マルチアクターアプリケーションという言葉は浸透していないと思いますし、マルチエージェントの方がイメージしやすいと思います。ちなみに、狙いはマルチエージェントだと思いますが、シンプルに1つのエージェントをコントロールすることも可能です。これらのアクションをグラフ構造にして連結します。LLMの処理フローと言った方がイメージしやすいかもしれないですね。なお、普通のChainと同じような感じもしますが、Graphの方は処理を循環(繰り返し)できるようになったりします。

なんでLangChainに注目したのか

ちょっと試すだけとか、個人的に使ってみるような感じであれば、動けばいいと思うのですが、エンタープライズユースで考えるとある程度のメンテナンス性も考慮する必要があります。特にLLMは他の開発言語などとは大きく異なり、半年もあれば全く変わってしまいます。OpenAIの進化も激しいですし、Claudeの進化も激しいです。当然ながらシステム化しても、1年も経てばはるかに効率の良いLLMも登場しているでしょうし、そうなってくると組み替えることを前提で作らなければなりません。また、RAGに関しても主流はベクトルですが、さまざまな手法も生み出されているので、LLMだけでなくデータベースとの組み合わせも重要になってきます。そういう世界観の時に欲しくなってくるのがフレームワークなどの抽象化レイヤーですが、2024年7月時点でその筆頭になるのがLangChainです。

もちろん、現在最も注目されているLangChainを使ったとしてもリスクはあります。主なリスクは以下のような感じになると思います。
・そもそもLangChainが今後も継続して開発し続けられるのか?
・LangChain自体の作りが大きく変わって下位互換が失われる
・プロダクトごと、どこかの企業に買収されてしまい、大きく方向性が変わってしまう

まず、1つ目に関してですが、OSSの性質上継続は難しいことがよくあります。コミッターがたくさんいて支援が充実していたとしても、それだけでは難しいこともあります。そのため、このリスクを気にし過ぎるのであれば他の手を考えるしかありませんし、Microsoft社が支援しているOSSフレームワークであるSemantic Kernelの方がエンタープライズ向けかもしれません。とはいえ、現状では情報量や利用状況を考えるとLangChainの方が優位ではあるので、難しい選択です。
2つ目は、LangChainが継続的に成長できたと仮定してもリスクがあるということです。実際にLangChainも0.Xから1.Xに変わる時に結構作りが変わってしまっているので、新しいバージョンへの追従が難しいことが想定されます。OSSは発展期において下位互換を無視してでもどんどん作りを変えることがあるので、そういうリスクは織り込んでおくべきだと思います。特に、LLM界隈では、モデルの進化だけでなく新しい手法もどんどん登場するので、その追従だけでも大変だと思います。
3点目も重要なテーマで、どこかに買収されると方向性が変わってしまうことがあるということです。LangChainはまだまだ小さな会社ですし、巨大なクラウドプラットフォーマーがその気になれば簡単に買収できると思います。現状LangChainはとてもニュートラルなポジションを取っているので、AzureやAWSでも同じように利用できますが、いつまでもそのニュートラルな方向性が維持されるかもわかりません。ちなみに、個人的には買収されないのもリスクだと感じていて、「買収されない=プロダクトとして魅力がない」ということも考えられます。クラウドプラットフォーマーが、LLMの進化に合わせて自前でSaaS化してしまう可能性もあるので、そうなってくると不要になってしまいますよね。

いずれにしても、黎明期の選択はリスクを取るしかないですし、悩みすぎても仕方ない部分でもあります。実際に開発する身になれば、インターネット上に情報がたくさんあるほうが助かるので、現状では選ぶとなるとLangChainかなと思います。

実際にLangChainに訪問してみて

5月にシアトルに行きましたが、そのついでにサンフランシスコにも行ってきました。LangChainはホームページやインターネット上でオフィスを公開していないので、どこにあるかは記載しませんが、サンフランシスコの一角にあります。まだ従業員も数十人の前半くらいのサイズなので、かなり小規模です。世界中で使われているプロダクトなのに、こんな小規模人数で開発しているのかと驚きました。ちなみに、オフィスは倉庫みたいに天井が高く広い感じでモダンにアレンジされています。黒を基調にしていますが、建材が剥き出しのデザインもあったりして無骨でかっこいい感じです。

キッチンも充実してて楽しそうです。

ちなみに、色々と話を伺うことはできたので、当たり障りのない部分をまとめてみます。なお、以下の記載はLangCahinの公式見解でもありませんし、三菱UFJインフォメーションテクノロジーの分析結果でもありません。私の拙い英語力で聞き取ったものなので、間違いがあるかもしれませんので、その点はご容赦ください。

🔳LangChainから見てSemantic Kernelをどのように評価しているか?
→Semantic KernelはMicrosoftが支援していて巨大なエコシステムの一部になっている。我々のほうがオープンであり、Semantic Kernelのほうが狭い壁に囲われた庭の中にいるような印象。

🔳我々のような古いエンタープライズ企業はJavaで作られたシステムが多いが、LangChainはどのような戦略か?
→現状では、PythonとTypeScriptを提供しているが、Pythonのほうが10倍くらい人気がある。また、体力的な問題もあり現状では他の言語の対応をするのは難しい。

🔳セキュリティについてはどのように考えているか?
→複数の銀行(名前は伏せますが、米国の銀行です)から相談を受けたり、実際に使われたりしていることを我々は認識している。実際にセキュリティに関する議論もしてきた。特に、0.Xバージョンの時には脆弱性があったことも認識している。そのために再設計も行なった。なお、最新バージョンであっても脆弱性がないとは言い切れないので、セキュリティスキャンやCD(Continuous Deployment)への組み込みは重要で、24時間以内にパッチ適用を目指すべき。

🔳現状のアーキテクチャではステートフルを重視しているが、方向性を変更することがあるか?
→現状では方向性を変えるようなことは検討していない。実行条件を明確にして特定のアクションを実行することを考えている。

🔳クラウドベンダーの選定(実行場所の選定)をどう考えるか?
→LLMのモデル変更や進化が早いので、どこかで固定するのは最善の策ではない。データには重力があるので、データがある場所で簡単に動作させられることがポイントであり、OSSであるLangChainの強みにもなっている。

🔳バージョンアップにおいて破壊的な変更が起きえるか?
→変更はあり得る。バージョン管理の2桁目が変わらなければ破壊的な変更はない(例えば、0.1.Xの時のXが変更する場合は破壊的な変更はない)。最新で2桁目が変わる場合には変更される可能性がある。なお、LangChainでは業界のイノベーションが生まれたら即座に取り込むことをポリシーにしている。イノベーションの追従とこれまでの仕組みの破壊とのトレードオフを常に見つけようとしている。

🔳LangSmithやLangGraphの将来について教えて欲しい
→多くの人がエージェントに興味を持っている。エージェントにアクションを実行させるか、エージェントに自動化してもらうかが重要になってきている。そういう意味では、責任を持って行動できることを意識してLangGraphを開発している。状態管理、再実行、並列化を意識している。また、LangSmithは高品質なLLMアプリケーションを構築できることを重視しており、オブザーバビリティに特に注目している。

🔳Neo4jのようなグラフDBへの対応をしていく予定はあるか?
→かなり新しい分野で、RAGにおいての活用はまだ興味を持っている段階。実際に実装レベルには至っていない。

🔳エージェントに自動的にLLMを選択させることはありえるか?
→興味深いテーマではあるが、現状ではそのようなアプローチをとっていることはないと思われる。最初に安価なモデルを使い、満足する応答にならない場合に高価なモデルに切り替えるなどのユースケースは考えられるが、具体的にそういう実装をしていることは見たことがない。なお、現状ではルーターエージェントと、ワーカーエージェントに分けて実装するのが一般的

訪問した感想

実際に行ってみて思ったことは、勢いがあるという印象でした。みなさん若く、スタンフォード大学の卒業生も多そうでした。優秀な方々が新しい分野に挑戦しているんだなと感じます。また、質問のところでは記載しませんでしたが、ディスカッションしていると、質問の意図やユースケースについて色々と聞かれました。なんでそういう疑問を持っているのか、金融機関にはどういうユースケースがあって何をしたいのか、などです。そういうものを敏感に感じ取って開発に繋げたいというのが彼らが一番重視していることだと思います。話している方々も、来年まで安泰という意識はない感じで、どんどん野心的に、時代の先を突き進みたいとおっしゃっていました。とはいえ、雰囲気は穏やかでとても落ち着いている感じです。ガツガツしてなくてクレバーという雰囲気です。
今回の訪問は私としても、とても良い刺激をいただけたとも思います。日本語の記事なので彼らが見ることはないと思いますが、この場でお礼申し上げます。

Discussion