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

首頁 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是一個(gè)功能強(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ù),確保在處理大型文本時(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ù)文本輸入生成文本輸出。它不像聊天模型那樣複雜,最適合用於簡單的輸入-輸出語言任務(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):

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

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

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

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

如你所見,代碼首先發(fā)送系統(tǒng)消息,並告訴聊天機(jī)器人成為一個(gè)總是用押韻回答的詩意助手,之後它發(fā)送一條人類消息,告訴聊天機(jī)器人告訴我誰是更好的網(wǎng)球運(yùn)動員:德約科維奇、費(fèi)德勒還是納達(dá)爾。如果你運(yùn)行這個(gè)聊天機(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(`你是一個(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è)腳本,它將使用嵌入來獲取問題“最重的動物是什麼?”並從提供的可能的答案列表中找到正確的答案:

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í)行更複雜的任務(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ū)動的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)

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)

如何在JS中與日期和時(shí)間合作? 如何在JS中與日期和時(shí)間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時(shí)間處理需注意以下幾點(diǎn):1.創(chuàng)建Date對像有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開始;3.手動格式化日期需拼接字符串,也可使用第三方庫;4.處理時(shí)區(qū)問題建議使用支持時(shí)區(qū)的庫,如Luxon。掌握這些要點(diǎn)能有效避免常見錯(cuò)誤。

為什麼要將標(biāo)籤放在的底部? 為什麼要將標(biāo)籤放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

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

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

JavaScript:探索用於高效編碼的數(shù)據(jù)類型 JavaScript:探索用於高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

什麼是在DOM中冒泡和捕獲的事件? 什麼是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個(gè)階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。 1.事件捕獲通過addEventListener的useCapture參數(shù)設(shè)為true實(shí)現(xiàn);2.事件冒泡是默認(rèn)行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委託,提高動態(tài)內(nèi)容處理效率;5.捕獲可用於提前攔截事件,如日誌記錄或錯(cuò)誤處理。了解這兩個(gè)階段有助於精確控制JavaScript響應(yīng)用戶操作的時(shí)機(jī)和方式。

Java和JavaScript有什麼區(qū)別? Java和JavaScript有什麼區(qū)別? Jun 17, 2025 am 09:17 AM

Java和JavaScript是不同的編程語言。 1.Java是靜態(tài)類型、編譯型語言,適用於企業(yè)應(yīng)用和大型系統(tǒng)。 2.JavaScript是動態(tài)類型、解釋型語言,主要用於網(wǎng)頁交互和前端開發(fā)。

See all articles