国产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ù)學(xué)計算)的智能體,從而提高響應(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)用程序中。

前提條件:

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

npm install -S langchain

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

智能體 (Agents):

在LangChain中,智能體是一個能夠理解和生成文本的實體。這些智能體可以配置特定的行為和數(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é)運算——例如,轉(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)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(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)

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中與日期和時間合作? 如何在JS中與日期和時間合作? Jul 01, 2025 am 01:27 AM

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

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

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

為什么要將標簽放在的底部? 為什么要將標簽放在的底部? Jul 02, 2025 am 01:22 AM

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

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

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