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

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

JavaScript中Langchain的完整指南

Feb 08, 2025 am 10:24 AM

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

A Complete Guide to LangChain in JavaScript

核心要點(diǎn):

  • LangChainJS是一個功能強(qiáng)大的JavaScript框架,使開發(fā)人員能夠構(gòu)建和試驗(yàn)AI驅(qū)動的語言模型和智能體,並無縫集成到Web應(yīng)用程序中。
  • 該框架允許創(chuàng)建能夠利用各種工具和數(shù)據(jù)源來執(zhí)行複雜語言任務(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ù),確保在處理大型文本時獲得最佳性能和上下文相關(guān)性。
  • 除了使用OpenAI模型外,LangChain還兼容其他大型語言模型(LLM)和AI服務(wù),為探索在其項(xiàng)目中集成不同AI的開發(fā)人員提供靈活性和擴(kuò)展功能。

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

前提條件:

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

npm install -S langchain

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

智能體 (Agents):

在LangChain中,智能體是一個能夠理解和生成文本的實(shí)體。這些智能體可以配置特定的行為和數(shù)據(jù)源,並經(jīng)過訓(xùn)練以執(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ù)學(xué)運(yùn)算——例如,轉(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默認(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ù)文本輸入生成文本輸出。它不像聊天模型那樣複雜,最適合用於簡單的輸入-輸出語言任務(wù)。以下是一個使用OpenAI的示例:

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

如你所見,它使用gpt-3.5-turbo模型列出所有紅色的漿果。在這個例子中,我將溫度設(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):

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

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

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

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

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

嵌入 (Embeddings):

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

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

這將返回一個很長的浮點(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)

這就是嵌入的樣子。僅僅六個單詞就有這麼多的浮點(diǎn)數(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。

遞歸分割分塊:

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

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

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

分塊大小和重疊:

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

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

鏈 (Chains):

鏈基本上是多個LLM功能鏈接在一起以執(zhí)行更複雜的任務(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: "誰更好,德約科維奇、費(fèi)德勒還是納達(dá)爾?" });
console.log(response);

結(jié)論:

在本指南中,你已經(jīng)看到了LangChain在JavaScript中的不同方面和功能。你可以使用LangChain在JavaScript中輕鬆開發(fā)AI驅(qū)動的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)文章!

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

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

使用我們完全免費(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)記-清除算法自動管理內(nèi)存,以減少內(nèi)存洩漏風(fēng)險。引擎從根對像出發(fā)遍歷並標(biāo)記活躍對象,未被標(biāo)記的則被視為垃圾並被清除。例如,當(dāng)對像不再被引用(如將變量設(shè)為null),它將在下一輪迴收中被釋放。常見的內(nèi)存洩漏原因包括:①未清除的定時器或事件監(jiān)聽器;②閉包中對外部變量的引用;③全局變量持續(xù)持有大量數(shù)據(jù)。 V8引擎通過分代回收、增量標(biāo)記、並行/並發(fā)回收等策略優(yōu)化回收效率,降低主線程阻塞時間。開發(fā)時應(yīng)避免不必要的全局引用、及時解除對象關(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ǔ)場景,但需手動處理數(shù)據(jù)拼接和錯誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請求;2.axios是基於Promise的第三方庫,語法簡潔且功能強(qiáng)大,支持async/await、自動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,其值不可變且賦值時復(fù)制副本,因此互不影響;引用類型如對象、數(shù)組和函數(shù)存儲的是內(nèi)存地址,指向同一對象的變量會相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助於編寫更穩(wěn)定可靠的代碼。

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

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

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

選哪個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.避免變量衝突,防止多個腳本間的命名重複;2.創(chuàng)建私有作用域,使函數(shù)內(nèi)部變量不可見;3.模塊化代碼,便於初始化工作而不暴露過多變量。常見寫法包括帶參數(shù)傳遞的版本和ES6箭頭函數(shù)版本,但需注意:必須使用表達(dá)式、結(jié)

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

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

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

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

See all articles