ホームページ >バックエンド開発 >Python チュートリアル >PythonのLangchainの完全なガイド
Langchain:言語モデルとエージェントを構築、実験、分析するための強力なPythonライブラリ
コアポイント:
環境設定: この記事を学習するには、新しいフォルダーを作成し、PIPを使用してLangchainとOpenaiをインストールしてください:
<code class="language-bash">pip3 install langchain openai</code>エージェント:
Langchainでは、エージェントはテキストを理解して生成できるエンティティです。これらのエージェントは、特定の動作とデータソースを構成でき、さまざまな言語関連のタスクを実行するようにトレーニングされているため、さまざまなアプリケーション向けの多機能ツールになります。
langchainエージェントを作成:
代理店は、「ツール」を使用して必要なデータを収集し、適切な応答を作成するように構成できます。以下の例をご覧ください。 SERP API(インターネット検索API)を使用して、質問や入力に関連する情報を検索し、回答します。また、LLM-Mathツールを使用して数学操作を実行します。たとえば、単位を変換したり、2つの値間でパーセンテージの変更を見つけたりします。 ご覧のとおり、LLMのすべての基本的なインポートと初期化を完了した後、LLM = OpenAI(offer = "GPT-3.5-TURBO"、温度= 0))、コードはツール= load_tools(["serpapi" 、 "llm-math"]、llm = llm)エージェントが動作するために必要なツールをロードします。次に、intialize_agent関数を使用してエージェントを作成し、指定されたツールを提供し、zero_shot_react_descriptionの説明を提供します。つまり、以前の問題を覚えていません。
エージェンシーテスト例1:<code class="language-python">from langchain.agents import load_tools from langchain.agents import initialize_agent from langchain.agents import AgentType from langchain.llms import OpenAI import os os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY" os.environ["SERPAPI_API_KEY"] = "YOUR_SERP_API_KEY" # 获取你的Serp API密钥:https://serpapi.com/ OpenAI.api_key = "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" llm = OpenAI(model="gpt-3.5-turbo", temperature=0) tools = load_tools(["serpapi", "llm-math"], llm=llm) agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) agent.run("How much energy did wind turbines produce worldwide in 2022?")</code>
次の入力でこのエージェントをテストしましょう
ご覧のとおり、次のロジックを使用します。
Langchainエージェントは、インターネットの検索に限定されません。ほぼすべてのデータソース(独自の)をLangchainエージェントに接続し、データについて質問することができます。 CSVデータセットでトレーニングされたエージェントを作成してみましょう。
KaggleでShivam BansalからこのNetflix映画とテレビ番組データセットをダウンロードして、ディレクトリに移動します。このコードを新しいPythonファイルに追加します:このコードは、create_csv_agent関数を呼び出し、netflix_titles.csvデータセットを使用します。次の図は、テストを示しています。
<code class="language-bash">pip3 install langchain openai</code>
上記のように、その論理は、キャスト列の「クリスチャンベール」のすべての出来事を探すことです。
このようなPandasデータフレームエージェントを作成することもできます:
実行すると、以下に示すように結果が表示されます。
<code class="language-python">from langchain.agents import load_tools from langchain.agents import initialize_agent from langchain.agents import AgentType from langchain.llms import OpenAI import os os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY" os.environ["SERPAPI_API_KEY"] = "YOUR_SERP_API_KEY" # 获取你的Serp API密钥:https://serpapi.com/ OpenAI.api_key = "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" llm = OpenAI(model="gpt-3.5-turbo", temperature=0) tools = load_tools(["serpapi", "llm-math"], llm=llm) agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) agent.run("How much energy did wind turbines produce worldwide in 2022?")</code>
これらはほんの一例です。 Langchainを使用して、ほぼすべてのAPIまたはデータセットを使用できます。
モデル:
Langchainには、大規模な言語モデル(LLM)、チャットモデル、テキスト埋め込みモデルの3種類のモデルがあります。いくつかの例を使用して、各タイプのモデルを探索しましょう。
大規模な言語モデル:
Langchainは、Pythonで大規模な言語モデルを使用して、テキスト入力に基づいてテキスト出力を生成する方法を提供します。チャットモデルほど複雑ではなく、単純な入出力言語タスクに最適です。 Openaiを使用した例は次のとおりです
上記のように、GPT-3.5-ターボモデルを使用して、提供された入力の出力を生成します(「Matt NikonorovのRAP名を思いつく」)。この例では、LLMをより創造的にするために、温度を0.9に設定します。 「Mc Megamatt」を思いついた。 9/10マークを付けました。
チャットモデル:<code>"How much energy did wind turbines produce worldwide in 2022?"</code>LLMモデルにラップ名を作成するのは楽しいですが、より複雑な答えや会話が必要な場合は、チャットモデルを使用してスキルを向上させる必要があります。技術的には、チャットモデルは大規模な言語モデルとどのように違いますか? Langchainドキュメントの言葉では:
チャットモデルは、大規模な言語モデルのバリアントです。チャットモデルはバックグラウンドで大きな言語モデルを使用していますが、わずかに異なるインターフェイスを使用します。 「テキスト入力、テキスト出力」APIを使用するのではなく、「チャットメッセージ」を入力と出力のインターフェイスとして使用します。
これは、単純なPythonチャットモデルスクリプトです:
<code class="language-bash">pip3 install langchain openai</code>上記のように、コードは最初にシステムメスを送信し、チャットボットに友好的で非公式なものを指示し、その後、ヒューマンセージを送信し、ジョコビッチがフェデラーよりも優れていると私たちに納得させるようにチャットボットに指示します。
このチャットボットモデルを実行すると、以下に示す結果が表示されます。
埋め込み:
埋め込みは、テキストのブロック内の単語と数字をベクトルに変換する方法を提供し、他の単語や数字に関連付けられます。これは抽象的に聞こえるかもしれないので、例を見てみましょう:
<code class="language-python">from langchain.agents import load_tools from langchain.agents import initialize_agent from langchain.agents import AgentType from langchain.llms import OpenAI import os os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY" os.environ["SERPAPI_API_KEY"] = "YOUR_SERP_API_KEY" # 获取你的Serp API密钥:https://serpapi.com/ OpenAI.api_key = "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" llm = OpenAI(model="gpt-3.5-turbo", temperature=0) tools = load_tools(["serpapi", "llm-math"], llm=llm) agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) agent.run("How much energy did wind turbines produce worldwide in 2022?")</code>これは、浮動小数点数のリストを返します:[0.022762885317206383、-0.0127639898915797472、0.00481598172368168、-0.0094353992916202545これが埋め込みのように見えるものです。
埋め込まれたモデルの使用ケース:
データまたは特定のテキストサンプルに関連する質問に答えるためにチャットボットまたはLLMをトレーニングしたい場合は、埋め込みを使用する必要があります。 3つの情報を含む「テキスト」列を備えたシンプルなCSVファイル(embs.csv)を作成しましょう。これは、埋め込みを使用して「これまでで最も背の高い人間だった」という質問を得るスクリプトです。
<code>"How much energy did wind turbines produce worldwide in 2022?"</code>このコードを実行すると、「ロバートワドローはこれまでで最も背の高い人間でした」という出力が表示されます。コードは、各情報の埋め込みを取得し、「これまでで最も背の高い人間だったのは誰ですか?」という質問に最も関連する埋め込みを見つけることにより、正解を見つけます。埋め込みパワー!
<code class="language-python">from langchain.llms import OpenAI from langchain.chat_models import ChatOpenAI from langchain.agents.agent_types import AgentType from langchain.agents import create_csv_agent import os os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY" agent = create_csv_agent( OpenAI(temperature=0), "netflix_titles.csv", verbose=True, agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION, ) agent.run("In how many movies was Christian Bale casted")</code>チャンク:
langchainモデルは、同時に大きなテキストを処理することができず、それらを使用して応答を生成することはできません。これは、ブロックとテキストセグメンテーションが入るところです。テキストデータをブロックに分割する2つの簡単な方法を見てから、Langchainに供給します。
文字によるセグメントブロック:
ブロックの突然の中断を避けるために、新しいラインまたはダブルニューラインの各発生時にテキストを分割することにより、テキストを段落ごとに分割できます。
再帰セグメンテーションブロック:<code class="language-python">from langchain.agents import create_pandas_dataframe_agent from langchain.chat_models import ChatOpenAI from langchain.agents.agent_types import AgentType from langchain.llms import OpenAI import pandas as pd import os os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_KEY" df = pd.read_csv("netflix_titles.csv") agent = create_pandas_dataframe_agent(OpenAI(temperature=0), df, verbose=True) agent.run("In what year were the most comedy movies released?")</code>特定の長さの文字でテキストを厳密に分割したい場合は、recursiveCharacterTextSplitterを使用できます。
ブロックサイズとオーバーラップ:
上記の例を見ると、ブロックサイズと重複パラメーターが何を意味するのか、パフォーマンスにどのように影響するかを正確に知ることができます。これは、2つの方法で説明できます
チェーン:
章は、基本的に複数のLLM関数がリンクされており、単純なLLM入力&GTを介して実現できないより複雑なタスクを実行します。クールな例を見てみましょう:
<code class="language-bash">pip3 install langchain openai</code>
このコードは、プロンプトに2つの変数を入力し、創造的な答えを開発します(温度= 0.9)。この例では、数学についてのホラー映画の良いタイトルを思い付くように頼みます。このコードを実行した後の出力は「計算呪い」ですが、これは実際にはチェーンの完全な機能を示していません。
より実用的な例を見てみましょう:
<code class="language-python">from langchain.agents import load_tools from langchain.agents import initialize_agent from langchain.agents import AgentType from langchain.llms import OpenAI import os os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY" os.environ["SERPAPI_API_KEY"] = "YOUR_SERP_API_KEY" # 获取你的Serp API密钥:https://serpapi.com/ OpenAI.api_key = "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" llm = OpenAI(model="gpt-3.5-turbo", temperature=0) tools = load_tools(["serpapi", "llm-math"], llm=llm) agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) agent.run("How much energy did wind turbines produce worldwide in 2022?")</code>
このコードは混乱しているように見えるかもしれないので、段階的に説明しましょう。
このコードは、NAS(ヒップホップアーティスト)の短い伝記を読み取り、テキストから次の値を抽出し、JSONオブジェクトとしてフォーマットします。
create_structed_output_chain関数にJSONパターンを提供することにより、チェーンをJSON形式に出力します。
<code>"How much energy did wind turbines produce worldwide in 2022?"</code>Openaiを超えて:
私はLangchainのさまざまな機能の例としてOpenaiモデルを使用していますが、Openaiモデルに限定されません。他の多くのLLMおよびAIサービスでLangchainを使用できます。 (これはLangchainの統合LLMの完全なリストです。)
たとえば、ラングチェーンと一緒にcoを使用できます。これはLangchain Cohere Integrationのドキュメントですが、実用的な例を提供するために、PIP3インストールCohereを使用してCohereをインストールした後、LangchainとCohereを使用してシンプルなQ&Aコードを書くことができます。
上記のコードでは、次の出力が生成されます
<code class="language-python">from langchain.llms import OpenAI from langchain.chat_models import ChatOpenAI from langchain.agents.agent_types import AgentType from langchain.agents import create_csv_agent import os os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY" agent = create_csv_agent( OpenAI(temperature=0), "netflix_titles.csv", verbose=True, agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION, ) agent.run("In how many movies was Christian Bale casted")</code>
結論:
<code class="language-python">from langchain.agents import create_pandas_dataframe_agent from langchain.chat_models import ChatOpenAI from langchain.agents.agent_types import AgentType from langchain.llms import OpenAI import pandas as pd import os os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_KEY" df = pd.read_csv("netflix_titles.csv") agent = create_pandas_dataframe_agent(OpenAI(temperature=0), df, verbose=True) agent.run("In what year were the most comedy movies released?")</code>このガイドでは、Langchainのさまざまな側面と機能を見てきました。この知識を習得したら、Langchainの機能を使用して、研究者、開発者、愛好家であろうと、NLP作業を実行できます。
この記事には、すべての画像とnas.txtファイルを含むGitHubにリポジトリを見つけることができます。
PythonでLangchainを使用して、幸せなコーディングと実験をお祈りします!
以上がPythonのLangchainの完全なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。