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中文網其他相關文章!

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

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

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver CS6
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。