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

首頁 web前端 js教程 使用 JavaScript 和 Gemini AI 創(chuàng)建聊天機(jī)器人:創(chuàng)建后端

使用 JavaScript 和 Gemini AI 創(chuàng)建聊天機(jī)器人:創(chuàng)建后端

Jan 04, 2025 am 09:26 AM

保存!哦

繼續(xù)使用 Javascript 和 Gemini AI 創(chuàng)建我們的聊天機(jī)器人,我們將添加項(xiàng)目的“后端”。上次我們使用 HTML、CSS 和 Javascript 創(chuàng)建前端,我們保證用戶界面將反映用戶和聊天機(jī)器人之間的對話。

現(xiàn)在我們需要創(chuàng)建一個服務(wù)器,使用express.js配置路由來與Gemini API進(jìn)行通信。我們走吧!

安裝項(xiàng)目依賴項(xiàng)

好吧,我們需要express.js、Google Gemini SDK,為了保護(hù)我們的API密鑰,我將安裝dotenv來使用環(huán)境變量。

npm install @google/generative-ai express dotenv

現(xiàn)在我們準(zhǔn)備好采用最佳實(shí)踐創(chuàng)建服務(wù)器,例如使用本地環(huán)境變量來保護(hù)私有數(shù)據(jù)。

為此,我們將在項(xiàng)目根文件夾中創(chuàng)建一個名為 server.js 的文件。在此文件中,我們將首先導(dǎo)入依賴項(xiàng)并配置必要的資源。

const express = require("express");
require("dotenv").config();
const { GoogleGenerativeAI } = require("@google/generative-ai");

const app = express();
const port = 3000;

const genAI = new GoogleGenerativeAI(process.env.GOOGLE_GEMINI_API_KEY);

app.use(express.static("public"));

app.use(express.json());

此代碼將 Express 配置為從“public”文件夾提供靜態(tài)文件,并接受帶有 JSON 負(fù)載的請求。這就是為什么我們將index.html、styles.css 和script.js 文件放在這個文件夾中。我們還將應(yīng)用程序配置為在端口 3000 上運(yùn)行。

我們使用 @google/generative-ai 庫來集成 Gemini API,并使用存儲在名為 GOOGLE_GEMINI_API_KEY 的環(huán)境變量中的密鑰對其進(jìn)行身份驗(yàn)證。

但是我們從哪里獲得這個 API Key 呢?這就是我們現(xiàn)在要找出的。

雙子座 API 密鑰

獲取密鑰

要獲取 Gemini API 密鑰,我建議您登錄“@gmail.com”帳戶。之后,訪問此鏈接,您將看到如下屏幕:

Criando um Chatbot com JavaScript e Gemini AI: criando o backend

單擊“創(chuàng)建 API 密鑰”按鈕,指定您將在其中使用此密鑰的項(xiàng)目,然后就完成了。您的密鑰將顯示在下方,您可以查看它,甚至可以復(fù)制它以進(jìn)行下一步。

保護(hù)您的 API 密鑰

現(xiàn)在在您的項(xiàng)目中,在項(xiàng)目的根文件夾中創(chuàng)建一個名為 .env.local 或僅 .env 的文件。在此文件中輸入您的 API 密鑰,如下所示:

GOOGLE_GEMINI_API_KEY="sua-chave-vai-aqui"

現(xiàn)在保存您的文件即可。如果您正確執(zhí)行了上一步,您的 API 密鑰將起作用。

PS:請注意您的 API 密鑰中顯示的計(jì)劃。 Gemini 提供免費(fèi)計(jì)劃,您的鑰匙可以返還有限數(shù)量的代幣。如果您想要更多的代幣,請考慮訂閱付費(fèi)計(jì)劃。我們將使用免費(fèi)計(jì)劃,該計(jì)劃雖然有限,但允許我們與聊天機(jī)器人交換一些消息。

創(chuàng)建 /chat 路由

現(xiàn)在配置了依賴項(xiàng)并掌握了 API 密鑰,讓我們打開人工智能的可能性之門。

在 server.js 文件中,我們將創(chuàng)建 /chat 路由:

npm install @google/generative-ai express dotenv

我們的路由是 POST 類型,因?yàn)槟鷮⒃谡闹惺盏揭粭l消息,正是來自將與聊天交互的用戶的消息。因此,對于此消息,我們使用了一些防御性編程(小心一點(diǎn)不會傷害任何人,哈哈)并檢查我們是否沒有收到消息。如果不這樣做,則會返回一個錯誤作為響應(yīng),并拋出一條消息。

如果我們有消息,那么我們會將其作為我們選擇的模型的提示發(fā)送,如下所示:

const express = require("express");
require("dotenv").config();
const { GoogleGenerativeAI } = require("@google/generative-ai");

const app = express();
const port = 3000;

const genAI = new GoogleGenerativeAI(process.env.GOOGLE_GEMINI_API_KEY);

app.use(express.static("public"));

app.use(express.json());

由于此通信是一個異步過程,因此我們將使用 try/catch 來處理響應(yīng)。首先,我定義將使用的 Gemini 模型(您可以在此鏈接中查看模型列表)。在這種情況下,我選擇了gemini-1.5-flash。

第二步是開始聊天。因此,通過 model.startChat() 我可以開始與 Gemini 通信,配置我想要在響應(yīng)中的最大令牌數(shù)(在本例中每個響應(yīng) 100 個令牌)。

現(xiàn)在,我們在使用 chat.sendMessage(message) 將消息發(fā)送到模型后等待此響應(yīng)。當(dāng)我們收到響應(yīng)時,我們會將其返回給發(fā)出請求的人,并將模型返回的文本格式轉(zhuǎn)換為 JSON。

最后但并非最不重要的一點(diǎn)是,如果我們遇到錯誤,我們可以在 catch 中使用它在控制臺中拋出此錯誤,并返回狀態(tài) 500,使使用此“迷你 api”的客戶端的生活更輕松。美麗?

現(xiàn)在我們只需要使用下面的代碼片段來指示我們的“mini api”將在哪里運(yùn)行:

GOOGLE_GEMINI_API_KEY="sua-chave-vai-aqui"

我們的 api 將在我們一開始指定的端口上運(yùn)行。完整的server.js代碼如下所示:

app.post("/chat", async (req, res) => {
  const { message } = req.body;

  if (!message) {
    return res.status(400).json({ error: "Mensagem n?o pode estar vazia." });
  }

  //...
});

測試聊天機(jī)器人

現(xiàn)在最期待的時刻到了,測試我們的聊天機(jī)器人。為此,我們打開終端并輸入以下命令:

try {
    const model = genAI.getGenerativeModel({
      model: "gemini-1.5-flash",
    });

    const chat = model.startChat({
      history: [],
      generationConfig: { maxOutputTokens: 100 },
    });

    const result = await chat.sendMessage(message);
    res.json({ response: result.response.text() });
  } catch (error) {
    console.error(error);
    res.status(500).json({ error: "Erro ao processar mensagem." });
  }

運(yùn)行此命令后,您應(yīng)該在終端中收到以下消息:

app.listen(port, () => {
  console.log(`Servidor rodando em http://localhost:${port}`);
});

現(xiàn)在,通過訪問 URL http://localhost:3000 并在輸入中寫入消息并按發(fā)送按鈕,AI 會回復(fù)您的消息并將其顯示在屏幕上。

Criando um Chatbot com JavaScript e Gemini AI: criando o backend

非??幔瑢Π??

結(jié)論

至此,我們使用 JavaScript 和 Google Gemini API 完成了聊天機(jī)器人的創(chuàng)建。我們了解了如何從頭開始創(chuàng)建前端、應(yīng)用樣式、操作 DOM。我們使用express.js創(chuàng)建了一個服務(wù)器,使用了Gemini API,配置了一條POST路由來與應(yīng)用程序客戶端通信,并能夠通過我們自己開發(fā)的接口與AI對話。


但這并不是您能做的全部。我們可以為不同的任務(wù)定制和配置這個聊天機(jī)器人,從語言助理,到回答你的數(shù)學(xué)或編程問題的虛擬老師,這將取決于你的創(chuàng)造力。

將人工智能轉(zhuǎn)變?yōu)閭€性化助手需要訓(xùn)練模型,更多的是關(guān)于你希望它響應(yīng)和表現(xiàn)的方式,而不是代碼本身。

我們將在以后的文章中探討其中的一些內(nèi)容。

到時候見!

以上是使用 JavaScript 和 Gemini AI 創(chuàng)建聊天機(jī)器人:創(chuàng)建后端的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(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

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

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)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
如何在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)定可靠的代碼。

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時間對象,某人構(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已提交請?jiān)笗?,要求取消該商?biāo),他認(rèn)為JavaScript是一個開放標(biāo)準(zhǔn),不應(yīng)由Oracle

什么是緩存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.常用于離線支持、加快重復(fù)訪問速度、預(yù)加載關(guān)鍵資源及后臺更新內(nèi)容;6.使用時需注意緩存版本控制、存儲限制及與HTTP緩存機(jī)制的區(qū)別。

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

Promise是JavaScript中處理異步操作的核心機(jī)制,理解鏈?zhǔn)秸{(diào)用、錯誤處理和組合器是掌握其應(yīng)用的關(guān)鍵。1.鏈?zhǔn)秸{(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()(等待所有完成)

利用Array.Prototype方法用于JavaScript中的數(shù)據(jù)操作 利用Array.Prototype方法用于JavaScript中的數(shù)據(jù)操作 Jul 06, 2025 am 02:36 AM

JavaScript數(shù)組內(nèi)置方法如.map()、.filter()和.reduce()可簡化數(shù)據(jù)處理;1).map()用于一對一轉(zhuǎn)換元素生成新數(shù)組;2).filter()按條件篩選元素;3).reduce()用于聚合數(shù)據(jù)為單一值;使用時應(yīng)避免誤用導(dǎo)致副作用或性能問題。

JS綜述:深入研究JavaScript事件循環(huán) JS綜述:深入研究JavaScript事件循環(huán) Jul 08, 2025 am 02:24 AM

JavaScript的事件循環(huán)通過協(xié)調(diào)調(diào)用棧、WebAPI和任務(wù)隊(duì)列來管理異步操作。1.調(diào)用棧執(zhí)行同步代碼,遇到異步任務(wù)時交由WebAPI處理;2.WebAPI在后臺完成任務(wù)后將回調(diào)放入相應(yīng)的隊(duì)列(宏任務(wù)或微任務(wù));3.事件循環(huán)檢查調(diào)用棧是否為空,若為空則從隊(duì)列中取出回調(diào)推入調(diào)用棧執(zhí)行;4.微任務(wù)(如Promise.then)優(yōu)先于宏任務(wù)(如setTimeout)執(zhí)行;5.理解事件循環(huán)有助于避免阻塞主線程并優(yōu)化代碼執(zhí)行順序。

See all articles