ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptのLangchainの完全なガイド

JavaScriptのLangchainの完全なガイド

William Shakespeare
William Shakespeareオリジナル
2025-02-08 10:24:13833ブラウズ

langchainjs:AI駆動型のJavaScript言語モデルとエージェントを構築するための強力なフレームワーク

A Complete Guide to LangChain in JavaScript

コアポイント:

  • Langchainjsは、開発者がWebアプリケーションにシームレスに統合されたAI駆動型の言語モデルとエージェントを構築および実験できるようにする強力なJavaScriptフレームワークです。
  • このフレームワークにより、さまざまなツールやデータソースを活用して、インターネット検索や数学的計算などの複雑な言語タスクを実行できるエージェントの作成により、応答の精度と関連性が向上します。
  • Langchainは、単純なテキスト出力の言語モデル、インタラクティブな会話のためのチャットモデル、テキストを数値ベクトルに変換するための埋め込みモデルなど、さまざまなモデルをサポートし、それによりさまざまなNLPアプリケーションの開発を促進します。
  • テキストデータは、カスタマイズ可能なチャンキングメソッドを使用して効率的に管理および処理でき、大きなテキストを処理するときに最適なパフォーマンスとコンテキスト関連性を確保できます。
  • Openaiモデルの使用に加えて、Langchainは他の大手言語モデル(LLMS)およびAIサービスと互換性があり、プロジェクトにおけるさまざまなAIの統合を調査する開発者に柔軟性と拡張機能を提供します。
このガイドは、Langchainの主要なコンポーネントに飛び込み、JavaScriptのパワーを活用する方法を示します。 Langchainjsは、開発者と研究者が言語モデルとエージェントを作成、実験、分析できる一般的なJavaScriptフレームワークです。カスタムモデルの構築からテキストデータの効率的な操作まで、自然言語処理(NLP)愛好家に豊富な機能を提供します。 JavaScriptフレームワークとして、開発者はAIアプリケーションをWebアプリケーションに簡単に統合することもできます。

前提条件: この記事を学習するには、新しいフォルダーを作成してLangchain NPMパッケージをインストールします。

新しいフォルダーを作成した後、

接尾辞を使用して、新しいJSモジュールファイルを作成します(たとえば、
<code class="language-bash">npm install -S langchain</code>
)。

.mjstest1.mjsエージェント:

Langchainでは、エージェントはテキストを理解して生成できるエンティティです。これらのエージェントは、特定の動作とデータソースを構成でき、さまざまな言語関連のタスクを実行するようにトレーニングされているため、さまざまなアプリケーション向けの多機能ツールになります。

langchainエージェントを作成:

代理店は、「ツール」を使用して必要なデータを収集し、適切な応答を作成するように構成できます。以下の例をご覧ください。 SERP API(インターネット検索API)を使用して、質問または入力に関連する情報を検索して応答します。また、ツールを使用して数学操作を実行します。たとえば、単位を変換したり、2つの値間でパーセンテージの変更を見つけたりします。

<code class="language-bash">npm install -S langchain</code>

modelName: "gpt-3.5-turbo"およびtemperature: 0を使用してモデル変数を作成した後、作成されたモデルと指定されたツール(SERPAPIおよび電卓)を組み合わせたエグゼキューターを作成します。入力では、LLMにインターネットを検索するように依頼し(Serpapiを使用)、2010年以来どのアーティスト(NASまたはBoldy James)がリリースされているかを調べ、違いを示す(計算機を使用)。

この例では、Openai Defaultを2021に使用するのではなく、「インターネットの検索...」を「インターネットの検索で」に「インターネットの検索を介して...」を「インターネットを使用してデータを取得する」ようにLLMに明示的に指示する必要があります。

出力は次のとおりです

<code class="language-javascript">import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { ChatOpenAI } from "langchain/chat_models/openai";
import { SerpAPI } from "langchain/tools";
import { Calculator } from "langchain/tools/calculator";

process.env["OPENAI_API_KEY"] = "YOUR_OPENAI_KEY"
process.env["SERPAPI_API_KEY"] = "YOUR_SERPAPI_KEY"

const tools = [new Calculator(), new SerpAPI()];
const model = new ChatOpenAI({ modelName: "gpt-3.5-turbo", temperature: 0 });

const executor = await initializeAgentExecutorWithOptions(tools, model, {
  agentType: "openai-functions",
  verbose: false,
});

const result = await executor.run("通过搜索互联网,查找Boldy James自2010年以来发行了多少张专辑,以及Nas自2010年以来发行了多少张专辑?找出谁发行了更多专辑,并显示百分比差异。");
console.log(result);</code>
モデル(モデル):

Langchainには、LLM、チャットモデル、およびテキスト埋め込みモデルの3種類のモデルがあります。いくつかの例を使用して、各タイプのモデルを探索しましょう。

言語モデル:

Langchainは、JavaScriptで言語モデルを使用して、テキスト入力に基づいてテキスト出力を生成する方法を提供します。チャットモデルほど複雑ではなく、単純な入出力言語タスクに最適です。 Openaiを使用した例は次のとおりです

ご覧のとおり、

モデルを使用してすべての赤いベリーをリストします。この例では、LLMの事実上の精度を与えるために温度を0に設定します。

<code>// 输出将取决于互联网搜索结果</code>
output:

gpt-3.5-turbo

チャットモデル:

<code class="language-javascript">import { OpenAI } from "langchain/llms/openai";

const llm = new OpenAI({
  openAIApiKey: "YOUR_OPENAI_KEY",
  model: "gpt-3.5-turbo",
  temperature: 0
});

const res = await llm.call("列出所有红色的浆果");

console.log(res);</code>

より複雑な回答と会話が必要な場合は、チャットモデルを使用する必要があります。技術的には、チャットモデルは言語モデルとどのように違いますか? Langchainドキュメントの言葉で:

チャットモデルは、言語モデルのバリアントです。チャットモデルはバックグラウンドで言語モデルを使用しますが、わずかに異なるインターフェイスを使用します。 「テキスト入力、テキスト出力」APIを使用する代わりに、「チャットメッセージ」を入力と出力のインターフェイスとして使用します。

これは単純な(非常に役に立たないが興味深い)JavaScriptチャットモデルスクリプト:

ご覧のとおり、コードは最初にシステムメッセージを送信し、チャットボットに常に韻で答える詩的なアシスタントになるように指示し、それからチャットボットに、より良いテニスプレーヤーを教えてくれるようにチャットボットに伝える人間のメッセージを送信します。 de Jokovic、Federer、またはNadal。このチャットボットモデルを実行すると、次のようなものが表示されます。

<code>// 输出将列出红色的浆果</code>
埋め込み:

<code class="language-javascript">import { ChatOpenAI } from "langchain/chat_models/openai";
import { PromptTemplate } from "langchain/prompts";

const chat = new ChatOpenAI({
  openAIApiKey: "YOUR_OPENAI_KEY",
  model: "gpt-3.5-turbo",
  temperature: 0
});
const prompt = PromptTemplate.fromTemplate(`你是一个诗意的助手,总是用押韵来回答:{question}`);
const runnable = prompt.pipe(chat);
const response = await runnable.invoke({ question: "谁更好,德约科维奇、费德勒还是纳达尔?" });
console.log(response);</code>
埋め込みモデルは、テキスト内の単語と数字をベクトルに変換する方法を提供し、それを他の単語または数字に関連付けることができます。これは抽象的に聞こえるかもしれないので、例を見てみましょう:

これにより、浮動小数点数の長いリストが返されます:

これが埋め込みのように見えるものです。わずか6つの単語で非常に多くの浮動小数点数があります!
<code>// 输出将是一个用押韵回答的问题</code>
この埋め込みは、入力テキストを潜在的な回答、関連テキスト、名前などに関連付けるために使用できます。

今すぐ埋め込まれたモデルのユースケースを見てみましょう...
<code class="language-javascript">import { OpenAIEmbeddings } from "langchain/embeddings/openai";

process.env["OPENAI_API_KEY"] = "YOUR_OPENAI_KEY"

const embeddings = new OpenAIEmbeddings();
const res = await embeddings.embedQuery("谁创造了万维网?");
console.log(res)</code>

これは、埋め込みを使用して「最も重い動物とは何ですか?」

<code class="language-bash">npm install -S langchain</code>

チャンク:

Langchainモデルは、大きなテキストを処理して使用して応答を生成することはできません。これは、チャンキングとテキストセグメンテーションが登場する場所です。テキストデータをチャンクに分割する2つの簡単な方法をLangchainに供給してみましょう。

文字によるセグメント

セグメント:

チャンクの突然の中断を避けるために、新しいライン文字の各発生を分割することにより、テキストを段落で分割できます。

これはテキストを分割するのに便利な方法です。ただし、あらゆるキャラクターを
<code class="language-javascript">import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { ChatOpenAI } from "langchain/chat_models/openai";
import { SerpAPI } from "langchain/tools";
import { Calculator } from "langchain/tools/calculator";

process.env["OPENAI_API_KEY"] = "YOUR_OPENAI_KEY"
process.env["SERPAPI_API_KEY"] = "YOUR_SERPAPI_KEY"

const tools = [new Calculator(), new SerpAPI()];
const model = new ChatOpenAI({ modelName: "gpt-3.5-turbo", temperature: 0 });

const executor = await initializeAgentExecutorWithOptions(tools, model, {
  agentType: "openai-functions",
  verbose: false,
});

const result = await executor.run("通过搜索互联网,查找Boldy James自2010年以来发行了多少张专辑,以及Nas自2010年以来发行了多少张专辑?找出谁发行了更多专辑,并显示百分比差异。");
console.log(result);</code>
だけでなく、チャンキングセパレーターとして使用できます。

n

チャンキングの再帰的なセグメント化:

特定の長さの文字でテキストを厳密に分割したい場合は、

を使用できます。 RecursiveCharacterTextSplitter この例では、テキストは100文字ごとに分割され、チャンクは15文字に重なります。

<code>// 输出将取决于互联网搜索结果</code>

ブロックサイズとオーバーラップ:

これらの例を見ると、パラメーターが何を意味するのか、パフォーマンスにどのように影響するかを疑問に思い始めたかもしれません。わかりました、2つのことを簡単に説明させてください。

チャンクサイズは、各チャンクの文字の数を決定します。チャンクサイズが大きいほど、チャンクのデータが多いほど、Langchainを処理して出力を生成するのに時間がかかります。逆も同様です。

    ブロックオーバーラップは、ブロック間で情報を共有して、コンテキストを共有するコンテンツです。チャンクのオーバーラップが高いほど、チャンクが低くなるほど、チャンク間で共有されるコンテキストが少なくなります。通常、良いチャンキングのオーバーラップは、チャンキングサイズの約10%〜20%ですが、目的のチャンキングオーバーラップはテキストタイプとユースケースによって異なります。
  • チェーン:

章は、基本的に複数のLLM関数をリンクしてより複雑なタスクを実行します。そうしないと、単純なLLM入力&GTを使用することはできません。クールな例を見てみましょう:

Openaiを超えて:
<code class="language-javascript">import { OpenAI } from "langchain/llms/openai";

const llm = new OpenAI({
  openAIApiKey: "YOUR_OPENAI_KEY",
  model: "gpt-3.5-turbo",
  temperature: 0
});

const res = await llm.call("列出所有红色的浆果");

console.log(res);</code>

Langchainのさまざまな機能の例としてOpenaiモデルを使用していたとしても、Openaiモデルに限定されません。他の多くのLLMおよびAIサービスでLangchainを使用できます。 LangchainとJavaScript統合LLMの完全なリストをドキュメントに見つけることができます。 たとえば、

langchainでco -hearを使用できます。 Cohereをインストールした後、を使用して、以下に示すように、LangchainとCohereを使用して簡単なQ&Aコードを作成できます。

output:

npm install cohere-ai

<code>// 输出将列出红色的浆果</code>
結論:

このガイドでは、JavaScriptでLangchainのさまざまな側面と機能を見てきました。 Langchainを使用してJavaScriptでAIを搭載したWebアプリケーションを簡単に開発し、LLMで実験できます。特定の機能の詳細については、必ずLangchainjsのドキュメントを参照してください。
<code class="language-javascript">import { ChatOpenAI } from "langchain/chat_models/openai";
import { PromptTemplate } from "langchain/prompts";

const chat = new ChatOpenAI({
  openAIApiKey: "YOUR_OPENAI_KEY",
  model: "gpt-3.5-turbo",
  temperature: 0
});
const prompt = PromptTemplate.fromTemplate(`你是一个诗意的助手,总是用押韵来回答:{question}`);
const runnable = prompt.pipe(chat);
const response = await runnable.invoke({ question: "谁更好,德约科维奇、费德勒还是纳达尔?" });
console.log(response);</code>

JavaScriptでLangchainを実験して、幸せなコーディングと実験をお祈りします!この記事が気に入っている場合は、PythonでLangchainを使用することに関する記事を読むこともできます。

以上がJavaScriptのLangchainの完全なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。