- OctomindはAIエージェントを使って、Playwrightにおけるエンドツーエンドテストを自動生成・修正している。
- 当初はLangChainフレームワークを使用していたが、時間が経つにつれてLangChainの高い抽象化レベルが問題を引き起こした。
LangChainの問題点
- LangChainの抽象化は当初は有用だったが、複雑な要件が生じるにつれてコードの理解と保守が難しくなった。
- LangChainの内部構造を理解し、デバッグするのに多くの時間を要した。
- たとえば、単純な英単語をイタリア語に翻訳するコードでも、LangChainを使うと複雑さが増す。
LangChainの抽象化の問題
- LangChainは複数の抽象化を重ねて使うことで、コードの複雑さを増大させる。
- こうした抽象化は、コードの理解とデバッグを困難にする。
- たとえば、APIからJSONデータを取得する単純な作業でも、LangChainを使うと複雑さが増す。
開発チームへの影響
- 複雑なエージェントアーキテクチャを実装しようとするとき、LangChainが制約要因として作用した。
- LangChainを取り除いた後は、要件に合わせて自由にコーディングできるようになった。
AIアプリケーション構築にフレームワークは必要か?
- LangChainは当初は有用だったが、長期的にはフレームワークなしで開発したほうがよかったはずだ。
- ほとんどのAIアプリケーションは、シンプルなコードといくつかの外部パッケージだけで十分に実装できる。
- エージェントの利用パターンが確立されるまでは、シンプルなアプローチが推奨される。
モジュール型ビルディングブロックを使った高速で簡潔な開発
- フレームワークは構造を強制するが、AIアプリケーションにはまだ確立された利用パターンがない。
- モジュール型ビルディングブロックのアプローチは、シンプルな低レベルコードを好み、開発速度を高める。
- ベクターデータベースのようなモジュール型コンポーネントを使うことで、コードベースを簡潔かつ適応しやすい状態に保てる。
GN⁺の見解
- LangChainの限界: LangChainの高い抽象化は当初は有用だが、複雑な要件が生じるとかえって障害になりうる。
- モジュール型アプローチの利点: モジュール型ビルディングブロックのアプローチは、コードの理解と保守を容易にし、開発速度を高める。
- フレームワーク必要性の再考: すべてのAIアプリケーションにフレームワークが必要なわけではなく、シンプルなコードと外部パッケージでも十分に実装可能である。
- 開発速度の重要性: AI分野では素早い実験とプロトタイピングが重要であり、フレームワークはそれを制限する可能性がある。
- 今後のエージェント利用パターン: エージェントの利用パターンが確立されるまでは、シンプルなアプローチを維持するのがよい。
2件のコメント
失敗したアーキテクチャだという話が広まっていましたが、GeekNewsでもそれを見るようになりましたね
Hacker Newsの意見
最初の商用LLMエージェントを昨年10月/11月に構築: LangChainを使わず、エージェントをゼロから直接構築したほうが、より良い結果を得るのに役立った。
LLMフレームワークの複雑さ: LangChainのようなLLMフレームワークは、JavaやPythonのような複雑さを持ち込む傾向がある。
LangChainとChatGPTの比較: LangChainはChatGPTが登場する前に作られたが、ChatGPTがより優れた対話モデルを提供するようになり、LangChainの必要性は薄れた。
LangChainの価値をめぐる議論: LangChainは開発者とLLMの間に位置しようとしたが、実質的な価値を付け加えられず、不必要な抽象化を導入した。
良い抽象化と悪い抽象化: 良い抽象化はアプリケーションロジックを扱い、悪い抽象化は必要な作業そのものを抽象化してしまい、洞察を失わせる。
エージェント利用の問題点: コンテンツ生成にエージェントを使うより、順次プロンプトを使うほうが簡単で効果的だ。
Raggedフレームワークの紹介: LLMと簡単に接続できる軽量コネクタであるRaggedを紹介している。ORMに似た統合インターフェースを提供する。
LangChainの有用性不足: LangChainのアプローチは興味深いが、実際にはLLMランタイムライブラリを直接使うほうが効率的だ。
急速に変化するエージェントフレームワーク: 使用しているエージェントフレームワークは急速に変化しており、小さなバージョン変更でも現在の構成が壊れる可能性がある。
LangChainの複雑性の問題: LangChainは単純なユースケースには複雑すぎ、複雑なユースケースには適応しにくい。直接コードを書くほうが良い場合が多い。