究極のLangChain入門ガイド

最近、AI界隈でオウム+チェーンの絵文字を見かけませんか?あれはLangChainの特徴的な絵文字です。LangChainは、GPTのような大規模言語モデル(LLM)に機能を追加するAIエージェントツールだ。さらに、トークン管理、コンテキスト管理、プロンプトテンプレートなどの機能も含まれています。このチュートリアルでは、LangChainの2つの主要な例と実際のユースケースを紹介します。まず、GPTへの問い合わせ方法です。二つ目は、Colab notebook available hereを使って文書を問い合わせる方法です。このLangChainチュートリアルでは、LangChainを使ってGPTや文書を問い合わせる手順を説明します。
このチュートリアルでは
- LangChainとは?
- どのようにLangChainクエリを実行するのか?
- GPTクエリ
- ドキュメントのクエリ
- LangChain入門 まとめ
#LangChainとは?
LangChainは、大規模な言語モデルを活用したアプリケーションを構築するためのフレームワークです。CVP Framework](https://zilliz.com/blog/ChatGPT-VectorDB-Prompt-as-code)を使って素早く構築することができます。大規模な言語モデルを活用するためのLangChainの中核機能は、1)データアウェアであること、2)エージェントであること、の2点です。データ・アウェアネスとは、外部のデータ・ソースをLLMアプリケーションに取り込む能力です。エージェント機能とは、他のツールを利用する機能です。
多くのLLMツールと同様、LangChainのデフォルトLLMはOpenAIのGPTで、これを使うにはOpenAIのAPIキーが必要です。さらに、LangChainは複雑な言語処理チェーンを構成するためのLangChain Expression Language (LCEL)を提供し、プロトタイピングからプロダクションへの移行を簡素化します。さらに、LangChainはPythonとJavaScriptの両方で動作します。このチュートリアルでは、Pythonの例を使ってLangChainの動作を学びます。Python ライブラリは pip
を使って pip install langchain
と実行することでインストールできます。
LangChainはどのように動くのか?
LangChainの質問応答フローは、個々のニーズに応じてカスタムテンプレートを作成するために簡単に入れ替えることができるビルディングブロックで構成されています。これらのブロックは、質問、埋め込み、モデルを訓練するために使用されるドキュメント、構築されたプロンプト、応答を含みます。LangChainはまた、言語モデルによって生成された応答を管理・改良するために出力パーサーを利用し、構造化された適切な結果を保証します。従って、企業が特定の文書によって訓練されたチャット体験を望む場合、LangChainはその目標を達成するために様々なコンポーネントを入れ替えることができます。
GPTとMilvusベクトルデータベースでLangChainを使うには?
LangChainの主な使用例の一つはテキストデータの問い合わせです。LlamaIndex](https://zilliz.com/learn/getting-started-with-llamaindex)のように、ドキュメントやベクトルストアへの問い合わせ、GPTとのやりとりをスムーズにするために使うことができます。このチュートリアルでは、LangChainを使ってGPTと対話し、LangChain with a vector storeを使ってドキュメントに意味を問い合わせる方法の簡単な例を取り上げます。このプロセスはRAG(Retrieval Augmented Generation)と呼ばれ、生成プロセス中に外部データを取り込むことで言語モデルの能力を向上させます。
クエリーGPT
GPTに慣れ親しんでいる人の多くは、ChatGPTとのチャットから来ている。ChatGPTはGPTと対話するためのOpenAIの主要なインターフェースです。しかし、プログラムでGPTと対話したい場合は、LangChainのようなクエリインタフェースが必要です。LangChainは、単純な一問一答のプロンプトから、コンテキストを介した数発の学習まで、GPTのための様々なクエリ・インターフェースを提供します。
この例では、プロンプトテンプレートを使って質問を連鎖させるためにLangChainを使う方法を見ていきます。最初にいくつかのPythonライブラリをインストールする必要があります。これらは # pip install langchain openai python-dotenv tiktoken
でインストールできます。私は環境変数を .env
ファイルで管理しているので python-dotenv
を使っていますが、OpenAIのAPIキーを読み込む方法は何でも構いません。
OpenAI APIキーの準備ができたら、LangChainツールをロードしなければならない。langchainから
PromptTemplateと
LLMChainをインポートし、
langchain.llmsから
OpenAIをインポートします。この例ではOpenAIのテキストモデル
text-davinci-003を使う。次に、GPT に問い合わせるためのテンプレートを作成します。以下に作成するテンプレートは、GPTに与えられた質問に1つずつ答えるように指示します。まず、
f-strings`と同じように、入力変数を括弧で囲んで文字列を作ります。
パイソン import os from dotenv import load_dotenv インポート openai load_dotenv() openai.api_key = os.getenv("OPENAI_API_KEY")
from langchain import PromptTemplate, LLMChain from langchain.llms import OpenAI davinci = OpenAI(model_name="text-davinci-003") multi_template = """次の質問に一つずつ答えてください。
質問 質問
答え """
次に、`PromptTemplate` オブジェクトを使用して、指定された入力変数と文字列からテンプレートを作成する。プロンプトテンプレートの準備ができたので、プロンプトと選択された大きな言語モデルを渡して、LLMの「チェーン」を作成することができます。いよいよ質問を作成します。質問を作成したら、LLMチェインに渡された質問を使ってLLMチェインを実行し、回答を得ます。
long_prompt = PromptTemplate(template=multi_template, input_variables=["questions"]) llm_chain = LLMChain( prompt=long_prompt、 llm=davinci ) qs_str = ( "2010年シーズンのスーパーボウルで優勝したNFLのチームはどこですか? "私の身長は何センチですか? "月面に降り立った12人目の人物は誰ですか?"+ "草の葉には目がいくつあるか?" ) print(llm_chain.run(qs_str))
下の画像は例題から予想される結果を示しています。
質問例の結果](https://assets.zilliz.com/Langchain_blog_1_results_08dedb25d4.png)
### 関連ドキュメントをクエリする
GPTや大規模言語モデルの改善点の一つは、学習時に利用可能なデータに対してのみ学習されることである。つまり、時間が経つにつれて、コンテキストと精度が失われていきます。CVPフレームワークと同様に、LangChainはベクトル・データベースを用いてこの問題を解決する方法を提供します。多くのベクトルデータベースが利用可能ですが、この例では[Milvus](https://zilliz.com/zilliz-vs-milvus)を使います。
LangChainは文書データの取り扱いに優れており、ワークフローの自動化を通じてスキャン文書を実用的なデータに変換します。
LLMアプリケーションに最新の知識を注入するLangChainの能力と、[セマンティック検索](https://zilliz.com/glossary/semantic-search)の能力を実証するために、文書へのクエリ方法を取り上げます。この例では、一般教書演説のトランスクリプトを使います。トランスクリプト](https://github.com/hwchase17/langchain/blob/master/docs/modules/state_of_the_union.txt)をダウンロードし、[Colabノートブックはこちら](https://colab.research.google.com/drive/1KiPHx1wxfYylc3fqMP1hVsUB4yYtzQGn?usp=sharing)を見つけてください。このチュートリアルで必要なライブラリを入手するには、`pip install langchain openai milvus [pymilvus](https://zilliz.com/blog/get-started-with-pymilvus) python-dotenv tiktoken`を実行してください。
ユーザーのクエリに基づいて関連ドキュメントを動的に取得する機能は、生成されるレスポンスの精度を大幅に向上させます。
質問を連鎖させる例と同様に、私たちはOpenAIのAPIキーとレバレッジの大きな言語モデルをロードすることから始めます。そして、[Milvus Lite](https://milvus.io/docs/milvus_lite.md)を使って、[ベクトルデータベース](https://zilliz.com/learn/beginner-guide-to-implementing-vector-databases)を立ち上げます。
import os from dotenv import load_dotenv インポート openai load_dotenv() openai.api_key = os.getenv("OPENAI_API_KEY") from langchain.llms import OpenAI davinci = OpenAI(model_name="text-davinci-003") from milvus import default_server default_server.start()
これで、ドキュメントのクエリに入る準備ができました。今回はLangChainからのインポートが多い。Open AI Embeddings、character text splitter、Milvus integration、text loader、retrieval Q/A chainが必要だ。
まずローダーをセットアップして、テキストファイルを読み込む。この場合、このノートブックと同じフォルダにある`state_of_the_union.txt.`に保存している。次に、テキストを分割し、LangChainドキュメントのセットとして保存する。次に、ベクターデータベースをセットアップします。この場合、`TextLoader`と`CharacterTextSplitter`で取り込んだドキュメントからMilvusコレクションを作成する。また、OpenAIのエンベッディングをテキストベクターエンベッディングのセットとして渡す。
ベクターデータベースがロードされたので、`RetrievalQA` オブジェクトを使って、ベクターデータベース経由でドキュメントにクエリをかけることができる。ここではチェーンタイプ `stuff " を使い、LLMとしてOpenAIを、retrieverとしてMilvusベクトルデータベースを渡す。そして、"大統領はケタンジ・ブラウン・ジャクソンについて何と言ったか?"のようなクエリを作成し、クエリを実行する。最後に、ベクターデータベースをシャットダウンして、きれいに終了する。
from langchain.embeddings.openai import OpenAIEmbeddings from langchain.text_splitter import CharacterTextSplitter from langchain.vectorstores import Milvus from langchain.document_loaders import TextLoader from langchain.chains import RetrievalQA
loader = TextLoader('./state_of_the_union.txt') documents = loader.load() text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) docs = text_splitter.split_documents(documents) embeddings = OpenAIEmbeddings() vector_db = Milvus.from_documents( docs、 embeddings、 connection_args={"host":"127.0.0.1", "port": default_server.listen_port}、 ) qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=vector_db.as_retriever()) query = "ケタンジ・ブラウン・ジャクソンについて大統領は何と言ったか?" qa.run(query) default_server.stop()
下の画像は、期待されるレスポンスがどのようなものかを示している。"大統領は、ケタンジ・ブラウン・ジャクソンは全米トップクラスの法律家であり、個人事務所の元トップ訴訟弁護士であり、元連邦公選弁護人であり、... "と述べた。
クエリー結果](https://assets.zilliz.com/Langchain_blog_results2_v2_ec22fde211.png)
## 代替ラングチェーン
LangChainの代替となるチャットベースのツールはいくつかあり、どれがベストかよく議論されます。これらの代替ツールの多くは、対話型チャットアプリケーション用に設計された特殊なチャットモデルを利用しています。よく出てくるのは以下のようなものです:
- AgentGPT
- TensorFlow
- 自動GPT](https://zilliz.com/blog/how-to-customize-auto-gpt-for-unique-use-case)
- ベイビーAGI
- セマンティックUI
- ラマインデックス](https://zilliz.com/learn/getting-started-with-llamaindex)
## LangChainチュートリアルのまとめ
このチュートリアルではLangChainの基本的な使い方を説明しました。LangChainはLLMアプリケーションを構築するためのフレームワークで、二つの重要な要素に依存していることを学びました。第一の要素は、テキスト文書などの外部データを使うことです。外部データを統合するLangChainの能力は、ユーザ固有の情報を取り込むことで言語モデルの有効性を高めます。第二の要因は、[ベクトルデータベース](https://zilliz.com/learn/what-is-vector-database)のような他のツールの使用です。
私たちは2つの例を取り上げた。まず、古典的なLangChainの例として、複数の質問を連鎖させる方法を取り上げました。LangChainは、OpenAIやHugging Faceを含む様々なモデルプロバイダとシームレスに連携し、その機能を強化しています。次に、LangChainをMilvusのような[vector database](https://zilliz.com/)と組み合わせることで、ドメイン知識を注入するためにLangChainを使用する実用的な方法を見てみました。
出力パーサーは、言語モデルの応答を洗練させ、構造化された適切な結果を保証する上で重要な役割を果たす。
読み続けて

Milvus/Zilliz + Surveillance: How Vector Databases Transform Multi-Camera Tracking
See how Milvus vector database enhances multi-camera tracking with similarity-based matching for better surveillance in retail, warehouses and transport hubs.

Selecting the Right ETL Tools for Unstructured Data to Prepare for AI
Learn the right ETL tools for unstructured data to power AI. Explore key challenges, tool comparisons, and integrations with Milvus for vector search.

Vector Databases vs. NoSQL Databases
Use a vector database for AI-powered similarity search; use NoSQL databases for flexibility, scalability, and diverse non-relational data storage needs.