亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

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

JavaScript中Langchain的完整指南

Feb 08, 2025 am 10:24 AM

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

A Complete Guide to LangChain in JavaScript

核心要點(diǎn):

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

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

前提條件:

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

npm install -S langchain

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

智能體 (Agents):

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

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

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

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年以來哪個(gè)藝術(shù)家發(fā)行了更多專輯——Nas還是Boldy James——并顯示百分比差異(使用Calculator)。

在這個(gè)例子中,我必須明確地告訴LLM“通過搜索互聯(lián)網(wǎng)……”,讓它使用互聯(lián)網(wǎng)獲取直到今天的數(shù)據(jù),而不是使用OpenAI默認(rèn)的僅限于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ù)。以下是一個(gè)使用OpenAI的示例:

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

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

輸出:

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,而是使用“聊天消息”作為輸入和輸出的接口。

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

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

如你所見,代碼首先發(fā)送系統(tǒng)消息,并告訴聊天機(jī)器人成為一個(gè)總是用押韻回答的詩意助手,之后它發(fā)送一條人類消息,告訴聊天機(jī)器人告訴我誰是更好的網(wǎng)球運(yùn)動(dòng)員:德約科維奇、費(fèi)德勒還是納達(dá)爾。如果你運(yùn)行這個(gè)聊天機(jī)器人模型,你會(huì)看到類似這樣的內(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(`你是一個(gè)詩意的助手,總是用押韻來回答:{question}`);
const runnable = prompt.pipe(chat);
const response = await runnable.invoke({ question: "誰更好,德約科維奇、費(fèi)德勒還是納達(dá)爾?" });
console.log(response);

嵌入 (Embeddings):

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

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

這將返回一個(gè)很長的浮點(diǎn)數(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)

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

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

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

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

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。

遞歸分割分塊:

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

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

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

分塊大小和重疊:

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

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

鏈 (Chains):

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

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)建一個(gè)簡單的問答代碼,如下所示:

<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(`你是一個(gè)詩意的助手,總是用押韻來回答:{question}`);
const runnable = prompt.pipe(chat);
const response = await runnable.invoke({ question: "誰更好,德約科維奇、費(fèi)德勒還是納達(dá)爾?" });
console.log(response);

結(jié)論:

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

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

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

垃圾收集如何在JavaScript中起作用? 垃圾收集如何在JavaScript中起作用? Jul 04, 2025 am 12:42 AM

JavaScript的垃圾回收機(jī)制通過標(biāo)記-清除算法自動(dòng)管理內(nèi)存,以減少內(nèi)存泄漏風(fēng)險(xiǎn)。引擎從根對象出發(fā)遍歷并標(biāo)記活躍對象,未被標(biāo)記的則被視為垃圾并被清除。例如,當(dāng)對象不再被引用(如將變量設(shè)為null),它將在下一輪回收中被釋放。常見的內(nèi)存泄漏原因包括:①未清除的定時(shí)器或事件監(jiān)聽器;②閉包中對外部變量的引用;③全局變量持續(xù)持有大量數(shù)據(jù)。V8引擎通過分代回收、增量標(biāo)記、并行/并發(fā)回收等策略優(yōu)化回收效率,降低主線程阻塞時(shí)間。開發(fā)時(shí)應(yīng)避免不必要的全局引用、及時(shí)解除對象關(guān)聯(lián),以提升性能與穩(wěn)定性。

如何在node.js中提出HTTP請求? 如何在node.js中提出HTTP請求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。1.使用內(nèi)置的http/https模塊無需依賴,適合基礎(chǔ)場景,但需手動(dòng)處理數(shù)據(jù)拼接和錯(cuò)誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請求;2.axios是基于Promise的第三方庫,語法簡潔且功能強(qiáng)大,支持async/await、自動(dòng)JSON轉(zhuǎn)換、攔截器等,推薦用于簡化異步請求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基于Promise且語法簡單

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時(shí)復(fù)制副本,因此互不影響;引用類型如對象、數(shù)組和函數(shù)存儲的是內(nèi)存地址,指向同一對象的變量會(huì)相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助于編寫更穩(wěn)定可靠的代碼。

JavaScript時(shí)間對象,某人構(gòu)建了一個(gè)eactexe,在Google Chrome上更快的網(wǎng)站等等 JavaScript時(shí)間對象,某人構(gòu)建了一個(gè)eactexe,在Google Chrome上更快的網(wǎng)站等等 Jul 08, 2025 pm 02:27 PM

JavaScript開發(fā)者們,大家好!歡迎閱讀本周的JavaScript新聞!本周我們將重點(diǎn)關(guān)注:Oracle與Deno的商標(biāo)糾紛、新的JavaScript時(shí)間對象獲得瀏覽器支持、GoogleChrome的更新以及一些強(qiáng)大的開發(fā)者工具。讓我們開始吧!Oracle與Deno的商標(biāo)之爭Oracle試圖注冊“JavaScript”商標(biāo)的舉動(dòng)引發(fā)爭議。Node.js和Deno的創(chuàng)建者RyanDahl已提交請?jiān)笗?,要求取消該商?biāo),他認(rèn)為JavaScript是一個(gè)開放標(biāo)準(zhǔn),不應(yīng)由Oracle

React與Angular vs Vue:哪個(gè)JS框架最好? React與Angular vs Vue:哪個(gè)JS框架最好? Jul 05, 2025 am 02:24 AM

選哪個(gè)JavaScript框架最好?答案是根據(jù)需求選擇最適合的。1.React靈活自由,適合需要高度定制、團(tuán)隊(duì)有架構(gòu)能力的中大型項(xiàng)目;2.Angular提供完整解決方案,適合企業(yè)級應(yīng)用和長期維護(hù)的大項(xiàng)目;3.Vue上手簡單,適合中小型項(xiàng)目或快速開發(fā)。此外,是否已有技術(shù)棧、團(tuán)隊(duì)規(guī)模、項(xiàng)目生命周期及是否需要SSR也都是選擇框架的重要因素??傊瑳]有絕對最好的框架,適合自己需求的就是最佳選擇。

立即在JavaScript中立即調(diào)用功能表達(dá)式(IIFE) 立即在JavaScript中立即調(diào)用功能表達(dá)式(IIFE) Jul 04, 2025 am 02:42 AM

IIFE(ImmediatelyInvokedFunctionExpression)是一種在定義后立即執(zhí)行的函數(shù)表達(dá)式,用于變量隔離和避免污染全局作用域。它通過將函數(shù)包裹在括號中使其成為表達(dá)式,并緊隨其后的一對括號來調(diào)用,如(function(){/code/})();。其核心用途包括:1.避免變量沖突,防止多個(gè)腳本間的命名重復(fù);2.創(chuàng)建私有作用域,使函數(shù)內(nèi)部變量不可見;3.模塊化代碼,便于初始化工作而不暴露過多變量。常見寫法包括帶參數(shù)傳遞的版本和ES6箭頭函數(shù)版本,但需注意:必須使用表達(dá)式、結(jié)

處理諾言:鏈接,錯(cuò)誤處理和承諾在JavaScript中 處理諾言:鏈接,錯(cuò)誤處理和承諾在JavaScript中 Jul 08, 2025 am 02:40 AM

Promise是JavaScript中處理異步操作的核心機(jī)制,理解鏈?zhǔn)秸{(diào)用、錯(cuò)誤處理和組合器是掌握其應(yīng)用的關(guān)鍵。1.鏈?zhǔn)秸{(diào)用通過.then()返回新Promise實(shí)現(xiàn)異步流程串聯(lián),每個(gè).then()接收上一步結(jié)果并可返回值或Promise;2.錯(cuò)誤處理應(yīng)統(tǒng)一使用.catch()捕獲異常,避免靜默失敗,并可在catch中返回默認(rèn)值繼續(xù)流程;3.組合器如Promise.all()(全成功才成功)、Promise.race()(首個(gè)完成即返回)和Promise.allSettled()(等待所有完成)

什么是緩存API?如何與服務(wù)人員使用? 什么是緩存API?如何與服務(wù)人員使用? Jul 08, 2025 am 02:43 AM

CacheAPI是瀏覽器提供的一種緩存網(wǎng)絡(luò)請求的工具,常與ServiceWorker配合使用,以提升網(wǎng)站性能和離線體驗(yàn)。1.它允許開發(fā)者手動(dòng)存儲如腳本、樣式表、圖片等資源;2.可根據(jù)請求匹配緩存響應(yīng);3.支持刪除特定緩存或清空整個(gè)緩存;4.通過ServiceWorker監(jiān)聽fetch事件實(shí)現(xiàn)緩存優(yōu)先或網(wǎng)絡(luò)優(yōu)先等策略;5.常用于離線支持、加快重復(fù)訪問速度、預(yù)加載關(guān)鍵資源及后臺更新內(nèi)容;6.使用時(shí)需注意緩存版本控制、存儲限制及與HTTP緩存機(jī)制的區(qū)別。

See all articles