LangChainJS:構建AI驅動的JavaScript語言模型和智能體的強大框架
核心要點:
- LangChainJS是一個功能強大的JavaScript框架,使開發人員能夠構建和試驗AI驅動的語言模型和智能體,並無縫集成到Web應用程序中。
- 該框架允許創建能夠利用各種工具和數據源來執行複雜語言任務(例如互聯網搜索和數學計算)的智能體,從而提高響應的準確性和相關性。
- LangChain支持各種模型,包括用於簡單文本輸出的語言模型、用於交互式對話的聊天模型以及用於將文本轉換為數值向量的嵌入模型,從而促進各種NLP應用程序的開發。
- 通過可定制的分塊方法可以高效地管理和處理文本數據,確保在處理大型文本時獲得最佳性能和上下文相關性。
- 除了使用OpenAI模型外,LangChain還兼容其他大型語言模型(LLM)和AI服務,為探索在其項目中集成不同AI的開發人員提供靈活性和擴展功能。
本指南將深入探討LangChain的關鍵組件,並演示如何在JavaScript中利用其強大功能。 LangChainJS是一個通用的JavaScript框架,使開發人員和研究人員能夠創建、試驗和分析語言模型和智能體。它為自然語言處理(NLP)愛好者提供了豐富的功能,從構建自定義模型到高效地操作文本數據。作為一個JavaScript框架,它還允許開發人員輕鬆地將他們的AI應用程序集成到Web應用程序中。
前提條件:
要學習本文,請創建一個新文件夾並安裝LangChain npm包:
npm install -S langchain
創建新文件夾後,使用.mjs
後綴創建一個新的JS模塊文件(例如test1.mjs
)。
智能體 (Agents):
在LangChain中,智能體是一個能夠理解和生成文本的實體。這些智能體可以配置特定的行為和數據源,並經過訓練以執行各種與語言相關的任務,使其成為各種應用的多功能工具。
創建LangChain智能體:
智能體可以配置為使用“工具”來收集所需的數據並製定良好的響應。請看下面的示例。它使用Serp API(一個互聯網搜索API)來搜索與問題或輸入相關的信息,並以此來做出響應。它還使用llm-math
工具執行數學運算——例如,轉換單位或查找兩個值之間的百分比變化:
npm install -S langchain
在使用modelName: "gpt-3.5-turbo"
和temperature: 0
創建模型變量後,我們創建了執行器,它將創建的模型與指定的工具(SerpAPI和Calculator)結合起來。在輸入中,我要求LLM搜索互聯網(使用SerpAPI),並找出自2010年以來哪個藝術家發行了更多專輯——Nas還是Boldy James——並顯示百分比差異(使用Calculator)。
在這個例子中,我必須明確地告訴LLM“通過搜索互聯網……”,讓它使用互聯網獲取直到今天的數據,而不是使用OpenAI默認的僅限於2021年的數據。
輸出如下所示:
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("通过搜索互联网,查找Boldy James自2010年以来发行了多少张专辑,以及Nas自2010年以来发行了多少张专辑?找出谁发行了更多专辑,并显示百分比差异。"); console.log(result);
模型 (Models):
LangChain中有三種類型的模型:LLM、聊天模型和文本嵌入模型。讓我們通過一些示例來探索每種類型的模型。
語言模型 (Language Model):
LangChain提供了一種在JavaScript中使用語言模型的方法,以根據文本輸入生成文本輸出。它不像聊天模型那樣複雜,最適合用於簡單的輸入-輸出語言任務。以下是一個使用OpenAI的示例:
<code>// 输出将取决于互联网搜索结果</code>
如你所見,它使用gpt-3.5-turbo
模型列出所有紅色的漿果。在這個例子中,我將溫度設置為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):
如果你想要更複雜的答案和對話,你需要使用聊天模型。從技術上講,聊天模型與語言模型有何不同?用LangChain文檔中的話來說:
聊天模型是語言模型的一種變體。雖然聊天模型在後台使用語言模型,但它們使用的接口略有不同。它們不是使用“文本輸入,文本輸出”API,而是使用“聊天消息”作為輸入和輸出的接口。
這是一個簡單的(相當無用但有趣的)JavaScript聊天模型腳本:
<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);
嵌入 (Embeddings):
嵌入模型提供了一種將文本中的單詞和數字轉換為向量的方法,然後可以將這些向量與其他單詞或數字關聯起來。這聽起來可能很抽象,所以讓我們來看一個例子:
<code>// 输出将是一个用押韵回答的问题</code>
這將返回一個很長的浮點數列表:
import { OpenAIEmbeddings } from "langchain/embeddings/openai"; process.env["OPENAI_API_KEY"] = "YOUR_OPENAI_KEY" const embeddings = new OpenAIEmbeddings(); const res = await embeddings.embedQuery("谁创造了万维网?"); console.log(res)
這就是嵌入的樣子。僅僅六個單詞就有這麼多的浮點數!
然後可以使用此嵌入將輸入文本與潛在答案、相關文本、名稱等關聯起來。
現在讓我們來看一個嵌入模型的用例……
現在,這是一個腳本,它將使用嵌入來獲取問題“最重的動物是什麼?”並從提供的可能的答案列表中找到正確的答案:
npm install -S langchain
分塊 (Chunks):
LangChain模型無法處理大型文本並使用它們來生成響應。這就是分塊和文本分割發揮作用的地方。讓我向你展示兩種在將文本數據饋送到LangChain之前將其分割成塊的簡單方法。
按字符分割分塊:
為了避免分塊中的突然中斷,你可以通過在換行符的每次出現處分割文本,按段落分割文本:
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("通过搜索互联网,查找Boldy James自2010年以来发行了多少张专辑,以及Nas自2010年以来发行了多少张专辑?找出谁发行了更多专辑,并显示百分比差异。"); console.log(result);
這是分割文本的一種有用方法。但是,你可以使用任何字符作為分塊分隔符,而不僅僅是n
。
遞歸分割分塊:
如果你想嚴格地按一定長度的字符分割文本,可以使用RecursiveCharacterTextSplitter
:
<code>// 输出将取决于互联网搜索结果</code>
在這個例子中,文本每100個字符分割一次,分塊重疊為15個字符。
分塊大小和重疊:
通過查看這些示例,你可能已經開始想知道分塊大小和重疊參數的確切含義以及它們對性能的影響。好吧,讓我簡單地說明兩點。
- 分塊大小決定每個分塊中的字符數量。分塊大小越大,分塊中的數據越多,LangChain處理它並生成輸出所需的時間就越長,反之亦然。
- 分塊重疊是共享分塊之間信息的內容,以便它們共享一些上下文。分塊重疊越高,你的分塊就越冗餘;分塊重疊越低,分塊之間共享的上下文就越少。通常,良好的分塊重疊約為分塊大小的10%到20%,儘管理想的分塊重疊因不同的文本類型和用例而異。
鏈 (Chains):
鏈基本上是多個LLM功能鏈接在一起以執行更複雜的任務,否則無法通過簡單的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服務一起使用。你可以在他們的文檔中找到LangChain和JavaScript可集成LLM的完整列表。
例如,你可以將Cohere與LangChain一起使用。安裝Cohere後,使用npm install cohere-ai
,你可以使用LangChain和Cohere創建一個簡單的問答代碼,如下所示:
<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);
結論:
在本指南中,你已經看到了LangChain在JavaScript中的不同方面和功能。你可以使用LangChain在JavaScript中輕鬆開發AI驅動的Web應用程序並試驗LLM。請務必參考LangChainJS文檔以了解有關特定功能的更多詳細信息。
祝你使用LangChain在JavaScript中進行快樂的編碼和實驗!如果你喜歡這篇文章,你可能還想閱讀有關使用LangChain與Python的文章。
以上是JavaScript中Langchain的完整指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

記事本++7.3.1
好用且免費的程式碼編輯器

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器