国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 web前端 js教程 JavaScript中Langchain的完整指南

JavaScript中Langchain的完整指南

Feb 08, 2025 am 10:24 AM

LangChainJS:構(gòu)建AI驅(qū)動的JavaScript語言模型和智能體的強大框架

A Complete Guide to LangChain in JavaScript

核心要點:

  • LangChainJS是一個功能強大的JavaScript框架,使開發(fā)人員能夠構(gòu)建和試驗AI驅(qū)動的語言模型和智能體,并無縫集成到Web應(yīng)用程序中。
  • 該框架允許創(chuàng)建能夠利用各種工具和數(shù)據(jù)源來執(zhí)行復(fù)雜語言任務(wù)(例如互聯(lián)網(wǎng)搜索和數(shù)學計算)的智能體,從而提高響應(yīng)的準確性和相關(guān)性。
  • LangChain支持各種模型,包括用于簡單文本輸出的語言模型、用于交互式對話的聊天模型以及用于將文本轉(zhuǎn)換為數(shù)值向量的嵌入模型,從而促進各種NLP應(yīng)用程序的開發(fā)。
  • 通過可定制的分塊方法可以高效地管理和處理文本數(shù)據(jù),確保在處理大型文本時獲得最佳性能和上下文相關(guān)性。
  • 除了使用OpenAI模型外,LangChain還兼容其他大型語言模型(LLM)和AI服務(wù),為探索在其項目中集成不同AI的開發(fā)人員提供靈活性和擴展功能。

本指南將深入探討LangChain的關(guān)鍵組件,并演示如何在JavaScript中利用其強大功能。LangChainJS是一個通用的JavaScript框架,使開發(fā)人員和研究人員能夠創(chuàng)建、試驗和分析語言模型和智能體。它為自然語言處理(NLP)愛好者提供了豐富的功能,從構(gòu)建自定義模型到高效地操作文本數(shù)據(jù)。作為一個JavaScript框架,它還允許開發(fā)人員輕松地將他們的AI應(yīng)用程序集成到Web應(yīng)用程序中。

前提條件:

要學習本文,請創(chuàng)建一個新文件夾并安裝LangChain npm包:

npm install -S langchain

創(chuàng)建新文件夾后,使用.mjs后綴創(chuàng)建一個新的JS模塊文件(例如test1.mjs)。

智能體 (Agents):

在LangChain中,智能體是一個能夠理解和生成文本的實體。這些智能體可以配置特定的行為和數(shù)據(jù)源,并經(jīng)過訓練以執(zhí)行各種與語言相關(guān)的任務(wù),使其成為各種應(yīng)用的多功能工具。

創(chuàng)建LangChain智能體:

智能體可以配置為使用“工具”來收集所需的數(shù)據(jù)并制定良好的響應(yīng)。請看下面的示例。它使用Serp API(一個互聯(lián)網(wǎng)搜索API)來搜索與問題或輸入相關(guān)的信息,并以此來做出響應(yīng)。它還使用llm-math工具執(zhí)行數(shù)學運算——例如,轉(zhuǎn)換單位或查找兩個值之間的百分比變化:

npm install -S langchain

在使用modelName: "gpt-3.5-turbo"temperature: 0創(chuàng)建模型變量后,我們創(chuàng)建了執(zhí)行器,它將創(chuàng)建的模型與指定的工具(SerpAPI和Calculator)結(jié)合起來。在輸入中,我要求LLM搜索互聯(lián)網(wǎng)(使用SerpAPI),并找出自2010年以來哪個藝術(shù)家發(fā)行了更多專輯——Nas還是Boldy James——并顯示百分比差異(使用Calculator)。

在這個例子中,我必須明確地告訴LLM“通過搜索互聯(lián)網(wǎng)……”,讓它使用互聯(lián)網(wǎng)獲取直到今天的數(shù)據(jù),而不是使用OpenAI默認的僅限于2021年的數(shù)據(jù)。

輸出如下所示:

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("通過搜索互聯(lián)網(wǎng),查找Boldy James自2010年以來發(fā)行了多少張專輯,以及Nas自2010年以來發(fā)行了多少張專輯?找出誰發(fā)行了更多專輯,并顯示百分比差異。");
console.log(result);

模型 (Models):

LangChain中有三種類型的模型:LLM、聊天模型和文本嵌入模型。讓我們通過一些示例來探索每種類型的模型。

語言模型 (Language Model):

LangChain提供了一種在JavaScript中使用語言模型的方法,以根據(jù)文本輸入生成文本輸出。它不像聊天模型那樣復(fù)雜,最適合用于簡單的輸入-輸出語言任務(wù)。以下是一個使用OpenAI的示例:

<code>// 輸出將取決于互聯(lián)網(wǎng)搜索結(jié)果</code>

如你所見,它使用gpt-3.5-turbo模型列出所有紅色的漿果。在這個例子中,我將溫度設(shè)置為0,以使LLM具有事實上的準確性。

輸出:

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);

聊天模型 (Chat Model):

如果你想要更復(fù)雜的答案和對話,你需要使用聊天模型。從技術(shù)上講,聊天模型與語言模型有何不同?用LangChain文檔中的話來說:

聊天模型是語言模型的一種變體。雖然聊天模型在后臺使用語言模型,但它們使用的接口略有不同。它們不是使用“文本輸入,文本輸出”API,而是使用“聊天消息”作為輸入和輸出的接口。

這是一個簡單的(相當無用但有趣的)JavaScript聊天模型腳本:

<code>// 輸出將列出紅色的漿果</code>

如你所見,代碼首先發(fā)送系統(tǒng)消息,并告訴聊天機器人成為一個總是用押韻回答的詩意助手,之后它發(fā)送一條人類消息,告訴聊天機器人告訴我誰是更好的網(wǎng)球運動員:德約科維奇、費德勒還是納達爾。如果你運行這個聊天機器人模型,你會看到類似這樣的內(nèi)容:

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);

嵌入 (Embeddings):

嵌入模型提供了一種將文本中的單詞和數(shù)字轉(zhuǎn)換為向量的方法,然后可以將這些向量與其他單詞或數(shù)字關(guān)聯(lián)起來。這聽起來可能很抽象,所以讓我們來看一個例子:

<code>// 輸出將是一個用押韻回答的問題</code>

這將返回一個很長的浮點數(shù)列表:

import { OpenAIEmbeddings } from "langchain/embeddings/openai";

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

const embeddings = new OpenAIEmbeddings();
const res = await embeddings.embedQuery("誰創(chuàng)造了萬維網(wǎng)?");
console.log(res)

這就是嵌入的樣子。僅僅六個單詞就有這么多的浮點數(shù)!

然后可以使用此嵌入將輸入文本與潛在答案、相關(guān)文本、名稱等關(guān)聯(lián)起來。

現(xiàn)在讓我們來看一個嵌入模型的用例……

現(xiàn)在,這是一個腳本,它將使用嵌入來獲取問題“最重的動物是什么?”并從提供的可能的答案列表中找到正確的答案:

npm install -S langchain

分塊 (Chunks):

LangChain模型無法處理大型文本并使用它們來生成響應(yīng)。這就是分塊和文本分割發(fā)揮作用的地方。讓我向你展示兩種在將文本數(shù)據(jù)饋送到LangChain之前將其分割成塊的簡單方法。

按字符分割分塊:

為了避免分塊中的突然中斷,你可以通過在換行符的每次出現(xiàn)處分割文本,按段落分割文本:

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("通過搜索互聯(lián)網(wǎng),查找Boldy James自2010年以來發(fā)行了多少張專輯,以及Nas自2010年以來發(fā)行了多少張專輯?找出誰發(fā)行了更多專輯,并顯示百分比差異。");
console.log(result);

這是分割文本的一種有用方法。但是,你可以使用任何字符作為分塊分隔符,而不僅僅是n。

遞歸分割分塊:

如果你想嚴格地按一定長度的字符分割文本,可以使用RecursiveCharacterTextSplitter

<code>// 輸出將取決于互聯(lián)網(wǎng)搜索結(jié)果</code>

在這個例子中,文本每100個字符分割一次,分塊重疊為15個字符。

分塊大小和重疊:

通過查看這些示例,你可能已經(jīng)開始想知道分塊大小和重疊參數(shù)的確切含義以及它們對性能的影響。好吧,讓我簡單地說明兩點。

  • 分塊大小決定每個分塊中的字符數(shù)量。分塊大小越大,分塊中的數(shù)據(jù)越多,LangChain處理它并生成輸出所需的時間就越長,反之亦然。
  • 分塊重疊是共享分塊之間信息的內(nèi)容,以便它們共享一些上下文。分塊重疊越高,你的分塊就越冗余;分塊重疊越低,分塊之間共享的上下文就越少。通常,良好的分塊重疊約為分塊大小的10%到20%,盡管理想的分塊重疊因不同的文本類型和用例而異。

鏈 (Chains):

鏈基本上是多個LLM功能鏈接在一起以執(zhí)行更復(fù)雜的任務(wù),否則無法通過簡單的LLM輸入->輸出方式完成。讓我們來看一個很酷的例子:

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);

超越OpenAI:

即使我一直使用OpenAI模型作為LangChain不同功能的示例,它也不限于OpenAI模型。你可以將LangChain與眾多其他LLM和AI服務(wù)一起使用。你可以在他們的文檔中找到LangChain和JavaScript可集成LLM的完整列表。

例如,你可以將Cohere與LangChain一起使用。安裝Cohere后,使用npm install cohere-ai,你可以使用LangChain和Cohere創(chuàng)建一個簡單的問答代碼,如下所示:

<code>// 輸出將列出紅色的漿果</code>

輸出:

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);

結(jié)論:

在本指南中,你已經(jīng)看到了LangChain在JavaScript中的不同方面和功能。你可以使用LangChain在JavaScript中輕松開發(fā)AI驅(qū)動的Web應(yīng)用程序并試驗LLM。請務(wù)必參考LangChainJS文檔以了解有關(guān)特定功能的更多詳細信息。

祝你使用LangChain在JavaScript中進行快樂的編碼和實驗!如果你喜歡這篇文章,你可能還想閱讀有關(guān)使用LangChain與Python的文章。

以上是JavaScript中Langchain的完整指南的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應(yīng)法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

JavaScript與Java:您應(yīng)該學到哪種語言? JavaScript與Java:您應(yīng)該學到哪種語言? Jun 10, 2025 am 12:05 AM

javascriptisidealforwebdevelogment,whilejavasuitslarge-scaleapplicationsandandandroiddevelopment.1)javascriptexceleatingingingingingingingbeatingwebexperienceswebexperienceswebexperiencesandfull-stackdeevermentwithnode.js.2)

在JavaScript中使用哪些評論符號:一個明確的解釋 在JavaScript中使用哪些評論符號:一個明確的解釋 Jun 12, 2025 am 10:27 AM

在JavaScript中,選擇單行注釋(//)還是多行注釋(//)取決于注釋的目的和項目需求:1.使用單行注釋進行快速、內(nèi)聯(lián)的解釋;2.使用多行注釋進行詳細的文檔說明;3.保持注釋風格的一致性;4.避免過度注釋;5.確保注釋與代碼同步更新。選擇合適的注釋風格有助于提高代碼的可讀性和可維護性。

JavaScript評論的最終指南:增強代碼清晰度 JavaScript評論的最終指南:增強代碼清晰度 Jun 11, 2025 am 12:04 AM

是的,javascriptcommentsarenectary和shouldshouldshouldseffectional.1)他們通過codeLogicAndIntentsgudedepleders,2)asevitalincomplexprojects,和3)handhanceClaritywithOutClutteringClutteringThecode。

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語言,各自適用于不同的應(yīng)用場景。Java用于大型企業(yè)和移動應(yīng)用開發(fā),而JavaScript主要用于網(wǎng)頁開發(fā)。

JavaScript評論:簡短說明 JavaScript評論:簡短說明 Jun 19, 2025 am 12:40 AM

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

掌握JavaScript評論:綜合指南 掌握JavaScript評論:綜合指南 Jun 14, 2025 am 12:11 AM

評論arecrucialinjavascriptformaintainingclarityclarityandfosteringCollaboration.1)heelpindebugging,登機,andOnderStandingCodeeVolution.2)使用林格forquickexexplanations andmentmentsmmentsmmentsmments andmmentsfordeffordEffordEffordEffordEffordEffordEffordEffordEddeScriptions.3)bestcractices.3)bestcracticesincracticesinclud

JavaScript數(shù)據(jù)類型:深度潛水 JavaScript數(shù)據(jù)類型:深度潛水 Jun 13, 2025 am 12:10 AM

JavaScripthasseveralprimitivedatatypes:Number,String,Boolean,Undefined,Null,Symbol,andBigInt,andnon-primitivetypeslikeObjectandArray.Understandingtheseiscrucialforwritingefficient,bug-freecode:1)Numberusesa64-bitformat,leadingtofloating-pointissuesli

JavaScript與Java:開發(fā)人員的全面比較 JavaScript與Java:開發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

See all articles