LangChain をベースに LLM アプリケーションを構築する方法

LangChain をベースに LLM アプリケーションを構築する方法

皆さんこんにちは、Lugaです。今日も引き続き、人工知能(AI)エコシステムに関連する技術であるLangChainについてお話します。この記事では、LangChain技術の分析に焦点を当て、誰もがLangChainの実装メカニズムを理解し、アプリケーションと市場開発にLangChainをより有効に活用できるようにします。

急速に変化する人工知能の分野では、言語モデルが舞台の主役となり、人間とコンピューターのやり取りの方法を再定義しています。 ChatGPT が広く認知され、Google などのテクノロジー大手が同様の製品を発売したことで、言語モデル、特に LLM がテクノロジー業界の注目の的となりました。

ある意味、LLM は AI が人間の言語を理解し、解釈し、生成する能力の大きな飛躍を表しています。膨大な量のテキスト データでトレーニングされた後、複雑な言語パターンと意味のニュアンスを把握できるようになります。 LLM は、これまでにない言語処理機能を備えており、ユーザーが優れた精度と効率で高品質のコンテンツを生成できるよう支援します。

LangChainはLLMを中心に構築されたフレームワークとして、自然言語処理の新たな可能性の世界を切り開きます。さまざまなアプリケーションを作成し、テキスト生成、感情分析、言語翻訳などの困難な問題を効果的に解決し、LLMの可能性を大きく解き放ちます。

1. LangChainとは何ですか?

LangChain はオープンソースの Python フレームワークとして、LLM ベースのアプリケーション開発を促進することを目的としています。 LangChain は、一連のツール、コンポーネント、およびインターフェースを提供することで、LLM ベースのアプリケーションの構築プロセスを簡素化します。 LangChain を使用すると、開発者は言語モデルとのやり取りを簡単に管理し、さまざまなコンポーネントをシームレスに接続し、API やデータベースなどのリソースを統合できます。

さらに、LangChain テクノロジーにより、革新的で文脈に関連のあるコンテンツを生成するさまざまなアプリケーションを構築できます。ブログ投稿や製品の説明を書いたり、チャットボットと会話したり、質問と回答 (GQA) や要約を生成したりする場合でも、LLM を使用したアプリケーション開発はより簡単かつ効率的になります。

図: LangChain Github Star 履歴 (star-history.com によって生成)

別の観点から見ると、この LangChain ベースのテクノロジー アプリケーションにより、開発者は LangChain が提供する強力な言語モデル機能を活用して、ユーザーのニーズを満たすアプリケーションを迅速に開発できるため、ユーザー エクスペリエンスが向上し、開発時間とコストが節約されます。

2. LLMとLangChainのソリューションの限界

現実世界のシナリオでは、LLM は一般的な状況でのプロンプトへの応答に優れていますが、トレーニングを受けていない特定の領域では課題を抱えています。プロンプトは、LLM に応答を生成するよう指示するためにユーザーが使用するクエリです。特定の領域で LLM をより効果的にするには、機械学習エンジニアがそれを組織内の内部データソースと統合し、ヒントエンジニアリング手法を適用する必要があります。

LangChain の登場により、データ応答型アプリケーションの開発における中間ステップが簡素化され、Prompt Engineering の効率が向上します。同時に、開発者が LLM をデータ ソースやプロンプト エンジニアリング テクノロジーと簡単に統合できるようにする、使いやすく直感的なツールとインターフェイスのセットも提供します。

重要なテクノロジーとして、LangChain の核となる利点は何ですか?

1. 言語モデルの役割を再活性化する

LangChain を使用すると、組織は再トレーニングや微調整を行うことなく、LLM の機能をドメイン固有のアプリケーションに再利用できます。開発チームは、独自の情報を参照する複雑なアプリケーションを構築できるため、モデルの応答性が向上します。たとえば、LangChain を使用して、保存されている内部ドキュメントからデータを取得し、それを会話の応答に統合するアプリケーションを構築できます。プロンプト中に言語モデルに新しい情報を導入するための RAG (検索拡張生成) ワークフローを作成することもできます。 RAG やその他のコンテキスト認識ワークフローを実装することで、モデルの錯覚を減らし、応答をより正確にすることができます。

2. AI開発を簡素化

LangChain は、データ ソース統合の複雑さを簡素化し、迅速に改良することで、AI 開発プロセスを簡素化します。開発者はシーケンスをカスタマイズして、複雑なアプリケーションを迅速に構築できます。ソフトウェア チームは、LangChain が提供するテンプレートとライブラリを変更して、ビジネス ロジックをゼロから記述することなく開発時間を短縮できます。

3. 開発者サポート

LangChain は、AI 開発者に言語モデルと外部データ ソースを接続するツールを提供します。結局のところ、これはオープンソースであり、活発なコミュニティによってサポートされています。組織は LangChain を無料で使用し、フレームワークに精通した他の開発者からのサポートを受けることができます。

3. LangChainのコアコンポーネントの分析

LangChain のユニークな特徴の 1 つは、その柔軟性とモジュール性です。自然言語処理パイプラインを個々のコンポーネントに分解することで、開発者はこれらの構成要素を簡単に組み合わせて、特定のニーズを満たすカスタムワークフローを作成できるため、LangChain は幅広いユースケースや業界向けの会話型 AI アプリケーションを構築するための適応性の高いフレームワークになります。

LangChain は、完全な LLM (言語モデル) アプリケーション パイプラインを構築し、さまざまなデータ ローダー、ベクター ストレージ、LLM プロバイダーと広範囲に統合できるモジュール セットを提供します。 LangChain の主なコア コンポーネントは次の図に示されています。

LangChainの主要コンポーネント

1. モデルI/O

LangChain の中核となるのは、アプリケーションが人間のようなテキストを理解して生成できるようにする強力な言語モデル (LLM) です。 LangChain を通じて、開発者はさまざまな言語関連のタスクをうまく達成できます。ユーザーのクエリを理解したり、応答を生成したり、複雑な言語タスクを実行したりする場合でも、LangChain のモデルは言語処理機能のバックボーンとなります。

モデル モジュールは、言語モデルとのやり取りを管理する役割を担います。 LangChain は、GPT-3、OpenAI などを含むさまざまな LLM をサポートしています。開発者はモデル モジュールを使用して、温度や top-p などのパラメータの設定など、LLM の構成を管理できます。モデル モジュールは、LLM の機能を向上させ、開発者が創造的でコンテキストに関連したコンテンツを生成するアプリケーションを構築できるようにするために重要です。

 from langchain.llms import OpenAI llm = OpenAI(model_name="text-davinci-003") # The LLM takes a prompt as an input and outputs a completion prompt = "When can I achieve financial freedom?" completion = llm(prompt)

2.チェーン

チェーン モジュールは、アプリケーション内のさまざまなコンポーネントをリンクする役割を担います。開発者は、チェーン モジュールを使用してチェーン構造を作成し、プロンプト、モデル、およびその他のアプリケーション コンポーネントを有機的に接続できます。このチェーン構造は、複数のコンポーネントが連携して動作する必要がある複雑なアプリケーションを構築する場合に不可欠です。

Chains モジュールを使用すると、開発者はさまざまなコンポーネントを柔軟に組み合わせて構成し、完全なアプリケーション パイプラインを形成し、高度にカスタマイズされた機能とロジックを実装できます。

 chain = LLMChain(llm = llm, prompt = prompt) chain.run("ai")

3.エージェント

エージェント モジュールは、アプリケーションと外部との間のやり取りを管理する上で重要な役割を果たします。エージェント モジュールを使用すると、開発者はパーソナル アシスタント、インテリジェント チャットボットなどのさまざまな種類のアプリケーションを構築できます。これらのアプリケーションは、音声またはテキスト入力に基づいて対話し、入力データを分析して理解することで適切な応答とサービスを提供できます。

エージェント モジュールは、開発者に柔軟で拡張可能なツールを提供し、インタラクティブな機能を備えたアプリケーションを簡単に構築し、ユーザーにパーソナライズされたインテリジェントなエクスペリエンスを提供できるようにします。

 class Agent: def __init__(self, config): self.config = config self.chain = Chain(config) self.proxy = Proxy(config) self.memory = Memory(config) self.callback = Callback(config) def parse_input(self, input): # 解析用户的输入和上下文信息...

4.メモリ

LangChain のメモリ モジュールは、データ ストレージの管理を担当します。メモリ モジュールを使用すると、開発者はテキスト、画像、オーディオなどのさまざまな種類のデータを簡単に保存および取得できます。

メモリ モジュールは、さまざまなサイズや種類のデータ ストレージのニーズに適応できる、高度にスケーラブルなストレージ メカニズムを提供します。開発者は、アプリケーションの要件を満たすために、アプリケーションのニーズに応じて保存されたデータを柔軟に整理および管理できます。

 conversation = ConversationChain(llm=llm, verbose=True) conversation.predict(input="I am the last one.") conversation.predict(input="he is first.") conversation.predict(input="She is third from the bottom")

5. 取得

インデックス コンポーネントを例にとると、インデックス モジュールはアプリケーション内のデータ インデックスの管理を担当します。インデックス モジュールを使用すると、開発者はデータの検索と取得のためのインデックス構造を作成できます。インデックス モジュールは、データの検索と取得を必要とするアプリケーションの構築に不可欠です。

インデックス モジュールを使用すると、開発者はアプリケーションのニーズに基づいて、テキスト インデックス、キーワード インデックスなどのさまざまな種類のインデックスを作成できます。これらのインデックス構造は、特定のデータ属性または特性に合わせて最適化できるため、より高速で正確なデータ検索と取得が可能になります。開発者は、データの特性とアプリケーションのニーズに基づいて、インデックス構造を柔軟に構成および管理できます。

 retriever = db.as_retriever() qa = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=retriever, return_source_documents=True) query = "Forgive me for my unruly, indulgent love of freedom in this life?" result = qa({"query": query}) print(result['result'])

6. カルバックス

LangChain は、LLM リクエストのさまざまな段階に接続できるコールバック システムを提供します。このコールバック システムは、ログ記録、監視、ストリーミング、その他のタスクに役立ちます。

これらのコールバック関数を使用することで、LLM 要求のさまざまな段階を柔軟に制御および管理できます。同時に、アプリケーションのニーズに応じてコールバック関数の動作をカスタマイズし、特定の機能やロジックを実現することもできます。

 class BaseCallbackHandler: """Base callback handler that can be used to handle callbacks from langchain.""" def on_llm_start( self, serialized: Dict[str, Any], prompts: List[str], **kwargs: Any ) -> Any: """Run when LLM starts running.""" def on_chat_model_start( self, serialized: Dict[str, Any], messages: List[List[BaseMessage]], **kwargs: Any ) -> Any: """Run when Chat Model starts running.""" def on_llm_new_token(self, token: str, **kwargs: Any) -> Any: """Run on new LLM token. Only available when streaming is enabled."""

上記の主要コンポーネントを分析することで、LangChain の動作原理とプロセスを大まかに理解できます。LangChain は、エージェント、メモリ、インデックス、コールバック システムなどの主要コンポーネントを組み合わせて、アプリケーションと外部世界とのやり取り、データの保存とインデックス作成、カスタム操作の実行を実現します。

この組み合わせにより、LangChain はユーザーにパーソナライズされたインテリジェントなエクスペリエンスを提供する強力で柔軟なアプリケーションを構築できます。詳細については、次のワークフローを参照してください。

LLM LangChainワークフロー

4. LLMアプリケーション構築にLangChainを使用する

始める前に、LangChain パッケージがガイドに従って正しくインストールされ、セットアップおよび構成されていることを確認する必要があります。これには、必要なプログラミング言語環境 (Python など) のインストール、LangChain の関連ライブラリと依存関係のインストール、LangChain が正常に実行できるようにするために必要な構成と設定が含まれます。

インストールとセットアップが完了したら、LLM のインポートと使用を開始できます。 LLM を効果的に使用するには、アプリケーションで LLM の関数を呼び出して使用できるように、適切なライブラリと依存関係をインポートする必要があります。

1. LangChainの設定

ここでは主にLangChain環境に関連する依存ライブラリの設定を行います。詳細については以下を参照してください。

 import langchain import openai import os import IPython from langchain.llms import OpenAI from dotenv import load_dotenv from langchain.chat_models import ChatOpenAI from langchain.schema import ( AIMessage, HumanMessage, SystemMessage ) from langchain.embeddings import OpenAIEmbeddings from langchain.chains import LLMChain from langchain.chains import RetrievalQA from langchain import ConversationChain load_dotenv() # API configuration openai.api_key = os.getenv("OPENAI_API_KEY")

2. LLMを初期化する

LangChain で LLM を初期化するには、まず必要なライブラリと依存関係をインポートする必要があります。 Python プログラミング言語を使用する場合は、「langchain」というライブラリをインポートし、使用する言語モデルを指定できます。

以下は、「langchain」ライブラリをインポートして LLM を初期化する方法を示すサンプル コード スニペットです。詳細については、以下を参照してください。

 # 导入必要的库和依赖项import langchain # 指定要使用的语言模型language_model = "gpt3.5-turbo" # 这里使用GPT-3.5 Turbo 模型作为示例# 初始化LLM llm = langchain.LLM(language_model) # 接下来,可以使用llm 对象来调用和使用LLM 的各种功能和方法# 例如,可以使用llm.generate() 方法生成文本,或使用llm.complete() 方法进行自动补全等# 示例:使用LLM 生成文本prompt = "Hello, LangChain!" response = llm.generate(prompt) print(response)

3. 入力プロンプト

LLM を初期化した後、プロンプトを入力してテキストを生成したり、応答を取得したりできます。プロンプトは、言語モデルがテキストを生成するための出発点です。要件に応じて、単一または複数のプロンプトを提供できます。以下に簡単な例を示します。

 # 初始化LLM llm = langchain.LLM(language_model) # 提供单个提示prompt = "Once upon a time" response = llm.generate(prompt) print(response) # 提供多个提示prompts = [ "The sun is shining", "In a galaxy far, far away", "Once upon a time" ] responses = llm.generate(prompts) for response in responses: print(response)

4. 生成されたテキストまたは応答を取得する

プロンプトを入力した後、生成されたテキストまたは応答を LLM から取得できます。生成されるテキストまたは応答は、提供されたプロンプト、および言語モデルのコンテキスト理解と言語生成機能に基づいて生成されます。

1 つ以上のプロンプトを提供すると、LLM はこれらのプロンプトを開始点として使用し、言語モデルの力を活用して関連するテキストを生成します。言語モデルは、プロンプト内のコンテキスト情報だけでなく、トレーニング データで学習された言語の規則性と確率分布も考慮します。このようにして、生成されたテキストはプロンプトとある程度関連し、ある程度の文法的な合理性と一貫性を持つようになります。

 # Print the generated text print(generated_text) # Print the responses for response in responses: print(response)

要約すると、上記の手順に従って対応するコードを実装することで、LangChain と事前トレーニング済みの LLM をシームレスに使用して、テキスト生成および理解タスクの機能を最大限に活用できます。これにより、さまざまな自然言語処理の問題を解決するための効率的で柔軟なアプローチが提供されます。インテリジェントな対話システムの開発、テキスト生成アプリケーションの構築、テキストの理解と分析の実行など、LangChain と事前トレーニング済みの LLM は強力なツールと技術基盤になります。

要約すると、LangChain は、LLM 対応アプリケーションの構築に関して、私たちに無限の可能性の世界を開きます。テキスト補完、言語翻訳、感情分析、テキスト要約、固有表現認識などの分野に興味がある場合、LangChain は直感的で使いやすいプラットフォームと強力な API を提供し、アイデアを現実のものにします。

LangChain と LLM の力により、人間のようなテキストを理解して生成する機能を備えたインテリジェントなアプリケーションを作成でき、言語との対話方法に革命をもたらします。

参照:

  • [1] https://python.langchain.com/
  • [2] https://machinehack.com/story/langchain-to-build-llm-powered-applications

<<:  大型モデル全般において中国と米国の差を縮めるにはどうすればいいでしょうか? 全国人民代表大会でその答えが分かった

>>:  AI画像合成技術の新たな波:Stable Diffusion 3とSoraアーキテクチャのブレークスルー

ブログ    
ブログ    
ブログ    

推薦する

Linux 仮想化ガイド: 仮想化環境の構築

仮想化技術はコンピューティング分野で幅広い用途があり、ハードウェア リソースの利用率を向上させ、メン...

...

...

AI 主導の DevOps はどのようにビジネス変革を実現できるのでしょうか?

[[420376]] AI 技術を採用することで、包括的なセキュリティの基盤としてシステムにインテ...

LLaMA の微調整によりビデオメモリの要件が半分に削減され、清華大学は 4 ビットの最適化を提案

大規模モデルのトレーニングと微調整にはビデオ メモリに対する要件が高く、オプティマイザーの状態は主要...

2020年に人工知能はどのように発展するでしょうか?機械学習のトップ専門家が予測するトレンド

[[311763]]人工知能はもはや、いつか世界を変える準備をしているのではなく、すでに世界を変えて...

...

大量データのための2次パーソナルコネクションマイニングアルゴリズム(Hadoop実装)

私は最近、Sina Weibo の「あなたに興味があるかもしれない人々」の間接的なフォローアップ推奨...

人工知能によってどの産業が繁栄し、どの産業が消滅するのでしょうか?

[[264320]]人工知能の概念は最近非常に人気があります。BAT(百度、テンセント、アリババ)...

ChatGPTが危険にさらされています! 「Attention Formula」の8年前の謎のバグが初めて暴露、Transformerモデルに大きな影響が出る可能性

「注目の式」に8年間存在していたバグが外国人によって発見された?一瞬にして、この話題はインターネット...

エンドツーエンドの自動運転までどれくらい遠いのでしょうか?

エンドツーエンドの自動運転は、システムの複雑性が高まるなどのモジュール式システムに伴う欠点を回避でき...

猫=チューリングマシン? 4つのテストにより、「猫コンピューター」が任意の計算を実行できることが証明された

柔らかくてかわいい猫は、いつも私たちに「猫を撫でたい」「猫を抱きしめたい」という衝動を掻き立てます。...

2019年に「AI+教育」分野で大手企業は何をしたのでしょうか?

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

自社開発のAIチップのトレンドが始まっており、テクノロジー依存からの脱却は始まりに過ぎない

大規模な AI モデルへの熱狂に後押しされ、AI チップの分野ではついに百家争鳴の時代が到来しました...

...