LangChain

生成AIとLangChain

  • 生成AI
  • AI開発
  • データ分析

はじめに

生成AIは、さまざまな業界で大きな変革を起こし始めています。このブログシリーズは、企業におけるデータ活用の新しい地平を開く、生成AIの可能性について解説します。その第三弾となる本ブログでは、テキストの生成AIである大規模言語モデル(LLM)を使ったアプリケーションの開発を効率化するフレームワークであるLangChainを紹介します。

現在、様々な大規模言語モデルが発表され、それぞれのモデルは急速な進化を続けています。新しいモデルが発表されるたびに各ベンチマークにおけるランキングは変わり、またドメイン特化型のモデルなども登場してきています。LLMを用いた分析ツールやアプリケーションの開発において、新しいモデルへの対応や、分析ドメインに応じたモデルの切り替えなどが非常に重要なってきており、LangChainを使用することで開発を非常に効率的に進めることが可能になります。

生成AIの種類と進化

ここでは特にテキストの生成AIである大規模言語モデル(LLM)について、その種類と進化について見ていきたいと思います。代表的なものでも、OpenAI社のChatGPT(チャットGPT)、Google社のGemini(ジェミニ)、Meta社のLlama(ラマ)、Anthropic社のClaude(クロード)といった様々なLLMあるいはLLMフレームワークが発表されています。また、日本語などのある特定の言語に特化したLLMや、医療などの特定のドメインに特化したLLMも出てきています。各LLMの評価には、様々な観点でのベンチマークがあり、例えば、言語理解テスト、テキスト推論テスト、数学テスト、コーディングテストなどにおけるスコアが比較されています。評価の観点によってどのLLMが良いかも変わり、さらに新しいLLMが登場するたびにそのランキングは常に変化しています。LLMアプリケーションを開発する際には、目的にあったベンチマークスコアや、実際に使ってみた応答を評価して、適したLLMを選ぶことが重要です。また、精度以外にも、暴力的、性差別的、人種差別的などの表現がないかといった倫理的な観点もあり、様々な視点で総合的に判断する必要があります。

これらの大規模言語モデルはここ数年で急速な進化を続けています。OpenAI社のGPTを例にその進化を見てみましょう。2018年に、OpenAI社は最初のGPTシリーズのモデルGPT-1を発表しました。トランスフォーマーと呼ばれる画期的な深層学習の手法を導入することで、当時のさまざまなベンチマークにおいて、最高レベルの性能を達成しました。2019年、2020年と、OpenAI社は、より多くの深層学習のパラメータ、学習データサイズを用いた新しいモデルGPT-2、GPT-3を発表しました。2022年、人間によるフィードバック技術によるさらなる回答性能の改善がおこなわれ、さらにチャットというインタフェースを持ったChatGPT3.5が登場しました。そして2023年には、テキストに加え画像データにも対応したGPT4が登場しました。GPT4は、米国司法試験で400点満点中298点という上位10%に含まれるスコアを出してことでも話題になりました。以上見てきたように、生成モデルの進化は非常に早く、毎年のように新しいモデルが発表されます。

大規模言語モデルにはさまざまな種類があり、目的に応じてどれが良いかが変わってくること、さらにそれらのモデルは毎年のように新しいモデルが発表されることを見てきました。最適なモデルを使い続けるには、こうしたモデルの変化に追従していくことが必要になります。

LangChainとは?

LangChainは、大規模言語モデルを活用したアプリケーションを開発するためのフレームワークです。前節で見たように、モデルの進化のスピードは速く、新しいモデルに素早く追従するのは容易ではありません。LangChainを用いることで、具体的なモデルを隠蔽した抽象レイヤーを用いてモデルを扱うことができ、複数の異なるモデルへの対応や、新しいモデルが出た時の対応も容易に行うことができます。それらのメリットに加え、LangChainを用いて大規模言語モデルを活用したアプリケーションを構築することで、開発者には以下のような様々なメリットがあります。

複数モデルへの対応、新しいモデルへの対応の容易化

LangChainを使うと、各具体的なモデルやその操り方を隠蔽した抽象レイヤーを用いて、アプリケーションを記述することができます。これにより、アプリケーションのロジックは、具体的なモデルには非依存になり、複数の異なるモデルへの対応や、新しいモデルへの対応が容易に行えることになります。

アプリケーション実装の効率化

LangChainのビルディングブロックやコンポーネントを組み合わせるだけでアプリケーションを構築することができます。また、典型的なアプリケーションのテンプレートが用意されているため、一からアプリケーションを書かなくても、必要な箇所を修正するだけでアプリケーションを実装することができます。

デバッグ、テストの効率化

LangChainの機能の1つであるLangSmithを使用すると、大規模言語モデルを利用したアプリケーションにおける、モデルの応答を容易に検査、監視、評価することができ、デバッグとテストを効率的に行うことができます。

デプロイの効率化

LangChainの機能の1つであるLangServeを使用すると、大規模言語モデルへの問い合わせを行うアプリケーションを、すぐにWebAPIに変換することができます。

LangChainは、アプリケーションと大規模言語モデルの間に抽象レイヤーを提供し、多モデル対応や新モデル対応を容易にするとともに、大規模言語モデルのアプリケーション開発における各工程の効率化に必要なさまざまな機能を提供していることがわかります。

LangChainってどのように動作するの?

LangChainの主要コンポーネントは以下の図に示されるように、レーヤの下からLangChain-Core、LangChain-Community、LangChain、Templates、LangServe、LangSmithの6つのコンポーネントに分かれています。

LangChain-Core

基本的なコンポーネントの抽象化とLangChainの記述言語であるLangChain Expression Language (LCEL)を提供します。LCELを使うことで、基本的なコンポーネントを組み合わせ、複雑なチェーンを容易に構築することができるようになります。

以下では、基本的なコンポーネントとしてPrompt, ChatModel, Output Parserを組み合わせたサンプルプログラムを示します。Promptは”tell me a short joke about {topic}”({topic}部分は変数で後に具体的な値に置き換えられる)、ChatModelはOpenAIのgpt-4、Output Parserは出力を単に文字列として解釈するStrOutputParserを用います。「|」記号はUnixのパイプ演算子に似ており、異なるコンポーネントを連結して、コンポーネントの出力を次のコンポーネントの入力として供給します。このchainでは、ユーザー入力がプロンプトテンプレートに渡され、次にプロンプトテンプレートの出力がモデルに渡され、その後モデルの出力が出力パーサーに渡されます。

LCELを用いると、多段に言語モデルに問い合わせるような複雑なアプリケーションでも、簡潔に記述することができます。また、Prompt, ChatModel, Output Parserは様々なもの種類のものがあらかじめ準備されているため、コンポーネントを入れ替えたりすることも容易に行えます。

LangChain-Community

サードパーティーのパッケージ(e.g., langchain-openai, langchain-anthropic, etc.)で構成され、各社固有のコンポーネント(ChatModelなど)を提供します。以下は、OpenAI社のgpt-3.5-turboとAnthropic社のclaude-3-opusのChatModelを作成するコードです。

chat1 = ChatOpenAI(model=”gpt-3.5-turbo-0125″)

chat2 = ChatAnthropic(model_name=”claude-3-opus-20240229″)

どちらのモデルも、BaseChatModelを継承しているため、共通のIFをつかってアクセスすることができます。

LangChain

アプリケーションの認知アーキテクチャを補完するために、よりユースケースに特化したChain、Agent、検索メソッドを提供します。

Templates

Templatesは、大規模言語モデルを使った典型的なアプリケーションのテンプレート集です。テンプレートを使うと、一からアプリケーションを書かなくても、必要な箇所を修正するだけでアプリケーションを実装することができます。最も人気のテンプレートとして、rag-conversationと呼ばれるテンプレートがあります。こちらは、社内データなどのWebにはない情報を知識ベースとして、大規模言語モデルによる問い合わせを実現するアプリケーションです。数行のコードを追加実装することで、ユーザ独自のデータを知識ベースとして、対話を行うアプリケーションを構築することができます。

利用可能なテンプレートの一覧は以下から確認することができます。

https://templates.langchain.com/

LangServe

LangServeは、FastAPIをラップして、LangChainオブジェクトのためのエンドポイントを自動的に生成するライブラリです。これを用いることで、作成したchainを公開するためのWebAPIを即座に作ることができます。

LangSmith

LangSmithは、大規模言語モデルを利用したアプリケーションのデバッグ、テスト、評価、およびモニタリングを行うことができるプラットフォームです。LangSmithのAPI_KEYやEndopointなどを設定して、LangChainを利用したアプリケーションを実行することで、モデルとのやりとりが記録され、LangSmithのウェブサービスから、モデルとのやりとりをモニターすることができます。LangSmithには以下の主な機能があります。

実行トレース

大規模言語モデルへの問い合わせ文や回答をウェブサービスから確認することができます。複雑なChainを持つアプリケーションでは、どの時点での回答が不具合の原因になったのかを容易に確認でき、デバッグが効率的に行えます。実行回数、レイテンシー、トークン使用量などのメトリクスも時系列グラフでモニターすることができます。

評価

データセットとして登録した入出力文に対して、複数の評価指標で品質スコアを自動的に算出することができます。有害性(harmfulness)、女性差別(misogyny)などのいくつかの観点についてはEvaluatorが定義されており、すぐに利用することができます。また、自分で独自のEvaluatorを定義することもできます。アプリケーションの運用ログを自動評価し、そのデータセットを使い、大規模言語モデルのファインチューニングや、Fewshotに加えることで回答品質を上げるといったLLMOpsのサイクルをLangSmithを用いて回すことができます。

プロンプトハブ

プロンプトハブは、プロンプト登録することで他のユーザと共有することができます。公開されているプロンプトを検索し、Playgroundで実行して動作を容易に確認することができます。また、プロンプトはバージョン管理することができます。

LangChain利用時に注意すべきこと

LangChainはv0.1.0で初の安定版がリリースされましたが、まだ開発の途上にあると言えます。開発初期のライブラリに注意すべき一般的な事として、API変更、ドキュメントの不足、セキュリティ、継続開発の不確実性、などが挙げられます。また、LangSmithを利用する場合には、LLMへの問い合わせ文が、LangSmithのウェブサービスに送信されるため、顧客のデータを扱う場合には、そのセキュリティ面での注意が必要となります。

dotData Insight – 特徴量と生成AIが変革するビジネスアナリティクス

dotDataでは、「データからの知識」である特徴量と、生成AIを融合したdotData Insightによって企業のビジネスアナリティクスを推進しています。dotDataの独自のAIが、従来の手作業による分析では発見することができなかった、或いは、数週間から数ヶ月もの時間がかかっていた、複雑な業務データの重要なパターン(特徴量)を抽出します。dotData Insightでは、特徴量(データからの知識)、ドメイン知識、世界知識を融合するために、様々なシーンでLLMを利用し、LangChainを利用して利用シーンに応じて適切な生成AIの切り替えをしています。これによって、dotData Insightは、最新のLLMを素早く取り込み、またユーザーが独自の知識を覚え込ませた生成AIを組み込むことを可能としています。

dotData Insight

生成AIに関するブログシリーズ

生成AIブログ – パート1 :生成AIとは? – 生成AIは企業のデータ活用をどのように進化するのか?

生成AIブログ – パート2 :LLMとは? – 大規模言語モデルのデータアナリティクス応用

生成AIブログ – パート3 :生成AIとLangChain (このブログ)

生成AIブログ – パート4 :生成AIの可能性を引き出す効果的なプロンプトエンジニアリングの方法

生成AIに関するウェビナー

生成AIのセキュリティ

Hiroshi Tamano, PhD.
Hiroshi Tamano, PhD.

これまでAI、機械学習分野の研究に従事し、2021年からdotDataに参加。 現在は、製品dotData Insightの分析コア技術のTechリードとして分析技術の開発を牽引。 統計科学博士。