此 HTML 檔案包含聊天訊息的容器、使用者訊息的輸入欄位和傳送按鈕。

CSS

接下來,建立一個名為 styles.css 的 CSS 檔案來設定聊天應用程式的樣式。

body {    font-family: Arial, sans-serif;    display: flex;    justify-content: center;    align-items: center;    height: 100vh;    background-color: #f0f0f0;    margin: 0;}#chat-container {    width: 400px;    border: 1px solid #ccc;    background-color: #fff;    border-radius: 8px;    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);    overflow: hidden;}#chat-window {    height: 300px;    padding: 10px;    overflow-y: auto;    border-bottom: 1px solid #ccc;}#messages {    display: flex;    flex-direction: column;}.message {    padding: 8px;    margin: 4px 0;    border-radius: 4px;}.user-message {    align-self: flex-end;    background-color: #007bff;    color: #fff;}.ai-message {    align-self: flex-start;    background-color: #e0e0e0;    color: #000;}#user-input {    width: calc(100% - 60px);    padding: 10px;    border: none;    border-radius: 0;    outline: none;}#send-button {    width: 60px;    padding: 10px;    border: none;    background-color: #007bff;    color: #fff;    cursor: pointer;}

此 CSS 檔案可確保聊天應用程式看起來乾淨且現代。

JavaScript

建立一個名為 script.js 的 JavaScript 檔案來處理前端功能。

document.getElementById(\\'send-button\\').addEventListener(\\'click\\', sendMessage);document.getElementById(\\'user-input\\').addEventListener(\\'keypress\\', function (e) {    if (e.key === \\'Enter\\') {        sendMessage();    }});function sendMessage() {    const userInput = document.getElementById(\\'user-input\\');    const messageText = userInput.value.trim();    if (messageText === \\'\\') return;    displayMessage(messageText, \\'user-message\\');    userInput.value = \\'\\';    // Send the message to the local AI and get the response    getAIResponse(messageText).then(aiResponse => {        displayMessage(aiResponse, \\'ai-message\\');    }).catch(error => {        console.error(\\'Error:\\', error);        displayMessage(\\'Sorry, something went wrong.\\', \\'ai-message\\');    });}function displayMessage(text, className) {    const messageElement = document.createElement(\\'div\\');    messageElement.textContent = text;    messageElement.className = `message ${className}`;    document.getElementById(\\'messages\\').appendChild(messageElement);    document.getElementById(\\'messages\\').scrollTop = document.getElementById(\\'messages\\').scrollHeight;}async function getAIResponse(userMessage) {    // Example AJAX call to a local server interacting with Ollama Llama 3    const response = await fetch(\\'http://localhost:5000/ollama\\', {        method: \\'POST\\',        headers: {            \\'Content-Type\\': \\'application/json\\',        },        body: JSON.stringify({ message: userMessage }),    });    if (!response.ok) {        throw new Error(\\'Network response was not ok\\');    }    const data = await response.json();    return data.response; // Adjust this based on your server\\'s response structure}

此 JavaScript 檔案將事件偵聽器新增至傳送按鈕和輸入字段,將使用者訊息傳送至後端,並顯示使用者和 AI 回應。

第 2 步:設定後端

Node.js 和 Express

確保您已安裝 Node.js。然後,為後端建立一個server.js檔案。

  1. 安裝 Express:

    npm install express body-parser
  2. 建立 server.js 檔案:

    const express = require(\\'express\\');const bodyParser = require(\\'body-parser\\');const app = express();const port = 5000;app.use(bodyParser.json());app.post(\\'/ollama\\', async (req, res) => {    const userMessage = req.body.message;    // Replace this with actual interaction with Ollama\\'s Llama 3    // This is a placeholder for demonstration purposes    const aiResponse = await getLlama3Response(userMessage);    res.json({ response: aiResponse });});// Placeholder function to simulate AI responseasync function getLlama3Response(userMessage) {    // Replace this with actual API call to Ollama\\'s Llama 3    return `Llama 3 says: ${userMessage}`;}app.listen(port, () => {    console.log(`Server running at http://localhost:${port}`);});
  3. 運行伺服器:

    node server.js

在此設定中,您的 Node.js 伺服器將處理傳入請求,與 Ollama 的 Llama 3 模型交互,並回傳回應。

結論

透過執行這些步驟,您已經建立了一個聊天應用程序,該應用程式將使用者訊息傳送到 Ollama 的 Llama 3 模型並顯示回應。此設定可以根據您的特定要求和 Llama 3 模型提供的功能進行擴展和自訂。

隨意探索並增強您的聊天應用程式的功能。快樂編碼!

","image":"http://www.luping.net/uploads/20240730/172234584966a8e979668b5.jpg","datePublished":"2024-07-30T21:24:08+08:00","dateModified":"2024-07-30T21:24:08+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 JavaScript、HTML 和 CSS 與 Ollama 的 Llama odel 建立聊天應用程式

使用 JavaScript、HTML 和 CSS 與 Ollama 的 Llama odel 建立聊天應用程式

發佈於2024-07-30
瀏覽:438

Building a Chat Application with Ollama

介紹

在這篇文章中,我們將逐步介紹創建一個與 Ollama 的 Llama 3 模型互動的簡單聊天應用程式的過程。我們將使用 JavaScript、HTML 和 CSS 作為前端,並使用 Node.js 和 Express 作為後端。最後,您將擁有一個可以運行的聊天應用程序,它將用戶訊息發送到 AI 模型並即時顯示回應。

先決條件

開始之前,請確保您的電腦上安裝了以下軟體:

  • Node.js
  • npm(節點套件管理器)

第 1 步:設定前端

超文本標記語言

首先,建立一個名為 index.html 的 HTML 文件,它定義聊天應用程式的結構。



    
    
    Chat with Ollama's Llama 3
    


    

此 HTML 檔案包含聊天訊息的容器、使用者訊息的輸入欄位和傳送按鈕。

CSS

接下來,建立一個名為 styles.css 的 CSS 檔案來設定聊天應用程式的樣式。

body {
    font-family: Arial, sans-serif;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    background-color: #f0f0f0;
    margin: 0;
}

#chat-container {
    width: 400px;
    border: 1px solid #ccc;
    background-color: #fff;
    border-radius: 8px;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    overflow: hidden;
}

#chat-window {
    height: 300px;
    padding: 10px;
    overflow-y: auto;
    border-bottom: 1px solid #ccc;
}

#messages {
    display: flex;
    flex-direction: column;
}

.message {
    padding: 8px;
    margin: 4px 0;
    border-radius: 4px;
}

.user-message {
    align-self: flex-end;
    background-color: #007bff;
    color: #fff;
}

.ai-message {
    align-self: flex-start;
    background-color: #e0e0e0;
    color: #000;
}

#user-input {
    width: calc(100% - 60px);
    padding: 10px;
    border: none;
    border-radius: 0;
    outline: none;
}

#send-button {
    width: 60px;
    padding: 10px;
    border: none;
    background-color: #007bff;
    color: #fff;
    cursor: pointer;
}

此 CSS 檔案可確保聊天應用程式看起來乾淨且現代。

JavaScript

建立一個名為 script.js 的 JavaScript 檔案來處理前端功能。

document.getElementById('send-button').addEventListener('click', sendMessage);
document.getElementById('user-input').addEventListener('keypress', function (e) {
    if (e.key === 'Enter') {
        sendMessage();
    }
});

function sendMessage() {
    const userInput = document.getElementById('user-input');
    const messageText = userInput.value.trim();

    if (messageText === '') return;

    displayMessage(messageText, 'user-message');
    userInput.value = '';

    // Send the message to the local AI and get the response
    getAIResponse(messageText).then(aiResponse => {
        displayMessage(aiResponse, 'ai-message');
    }).catch(error => {
        console.error('Error:', error);
        displayMessage('Sorry, something went wrong.', 'ai-message');
    });
}

function displayMessage(text, className) {
    const messageElement = document.createElement('div');
    messageElement.textContent = text;
    messageElement.className = `message ${className}`;
    document.getElementById('messages').appendChild(messageElement);
    document.getElementById('messages').scrollTop = document.getElementById('messages').scrollHeight;
}

async function getAIResponse(userMessage) {
    // Example AJAX call to a local server interacting with Ollama Llama 3
    const response = await fetch('http://localhost:5000/ollama', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({ message: userMessage }),
    });

    if (!response.ok) {
        throw new Error('Network response was not ok');
    }

    const data = await response.json();
    return data.response; // Adjust this based on your server's response structure
}

此 JavaScript 檔案將事件偵聽器新增至傳送按鈕和輸入字段,將使用者訊息傳送至後端,並顯示使用者和 AI 回應。

第 2 步:設定後端

Node.js 和 Express

確保您已安裝 Node.js。然後,為後端建立一個server.js檔案。

  1. 安裝 Express:

    npm install express body-parser
    
  2. 建立 server.js 檔案:

    const express = require('express');
    const bodyParser = require('body-parser');
    const app = express();
    const port = 5000;
    
    app.use(bodyParser.json());
    
    app.post('/ollama', async (req, res) => {
        const userMessage = req.body.message;
    
        // Replace this with actual interaction with Ollama's Llama 3
        // This is a placeholder for demonstration purposes
        const aiResponse = await getLlama3Response(userMessage);
    
        res.json({ response: aiResponse });
    });
    
    // Placeholder function to simulate AI response
    async function getLlama3Response(userMessage) {
        // Replace this with actual API call to Ollama's Llama 3
        return `Llama 3 says: ${userMessage}`;
    }
    
    app.listen(port, () => {
        console.log(`Server running at http://localhost:${port}`);
    });
    
  3. 運行伺服器:

    node server.js
    

在此設定中,您的 Node.js 伺服器將處理傳入請求,與 Ollama 的 Llama 3 模型交互,並回傳回應。

結論

透過執行這些步驟,您已經建立了一個聊天應用程序,該應用程式將使用者訊息傳送到 Ollama 的 Llama 3 模型並顯示回應。此設定可以根據您的特定要求和 Llama 3 模型提供的功能進行擴展和自訂。

隨意探索並增強您的聊天應用程式的功能。快樂編碼!

版本聲明 本文轉載於:https://dev.to/koolkamalkishor/building-a-chat-application-with-ollamas-llama-3-model-using-javascript-html-and-css-40ec?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1和$array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建構一...
    程式設計 發佈於2024-12-20
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-12-20
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而非:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST陣列:表單提交後使用 var_dump 檢查 $_POST 陣列的內...
    程式設計 發佈於2024-12-20
  • 插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入記錄時如何解決「一般錯誤:2006 MySQL 伺服器已消失」介紹:將資料插入MySQL 資料庫有時會導致錯誤「一般錯誤:2006 MySQL 伺服器已消失」。當與伺服器的連線遺失時會出現此錯誤,通常是由於 MySQL 配置中的兩個變數之一所致。 解決方案:解決此錯誤的關鍵是調整wait_tim...
    程式設計 發佈於2024-12-20
  • 如何在 Python 中存取和處理命令列參數?
    如何在 Python 中存取和處理命令列參數?
    在 Python 中處理命令列參數在 Python 中,命令列參數位於名為 sys.argv 的清單中。若要存取這些參數,請使用下列語法:import sys # Print all command line arguments print("\n".join(sys.argv)...
    程式設計 發佈於2024-12-20
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-20
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-20
  • Python If 語句中邏輯 AND (&&) 運算子的等價物是什麼?
    Python If 語句中邏輯 AND (&&) 運算子的等價物是什麼?
    Python中的If語句中&&(邏輯與)的等價是什麼? 在Python中,無法像其他程式語言一樣使用&&作為邏輯與運算子。使用if語句時,必須使用and關鍵字。 範例:以下範例嘗試使用&&作為邏輯與運算符,但會引發語法錯誤:if cond1 &amp;&amp; cond2:正確方法...
    程式設計 發佈於2024-12-20
  • 如何修改 Go 中作為函數參數傳遞的切片?
    如何修改 Go 中作為函數參數傳遞的切片?
    將切片作為函數參數傳遞並修改原始切片在Go 中,將參數傳遞給函數是按值完成的,這意味著對參數所做的任何更改函數內的內容不會反映在原始變數中。當使用可變資料類型(例如切片)時,這可能會出現問題,因為附加到函數內的切片不會影響超出函數範圍的原始切片。 考慮以下範例:nums := []int{1, 2,...
    程式設計 發佈於2024-12-20
  • 為什麼模板類別定義必須包含在頭檔中?
    為什麼模板類別定義必須包含在頭檔中?
    在頭文件中包含模板類定義:必要性問題是為什麼需要模板類的實現和聲明駐留在同一頭文件中。為了解決這個問題,至關重要的是要了解編譯器需要存取整個模板定義(而不僅僅是其簽名)才能為模板的每個實例化產生程式碼。因此,函數定義必須移至標題。 包含模型提供了對此要求的全面解釋。本質上,當實例化模板類別時,編譯器...
    程式設計 發佈於2024-12-20
  • 在 JavaScript 中使用浮點數時如何控制小數精確度?
    在 JavaScript 中使用浮點數時如何控制小數精確度?
    控制 JavaScript 中的小數精度在 JavaScript 中處理浮點數時,您可能會遇到需要控制小數點後顯示的位數的情況觀點。例如,您可能希望只顯示兩位小數的價格。 以固定精度格式化浮點型為了實現此目的,JavaScript 提供了 toFixed() 函數。此函數採用一個參數來指定要保留的小...
    程式設計 發佈於2024-12-20
  • 填充空 Python 清單時如何避免 IndexError?
    填充空 Python 清單時如何避免 IndexError?
    修復將元素分配給列表時的IndexError嘗試通過依次分配每個元素來創建列表時,您可能會遇到IndexError如果目標清單最初為空。出現此錯誤的原因是您試圖存取清單中不存在的索引。 要解決此問題並將元素正確添加到列表中,您可以使用追加方法:for l in i: j.append(l)此...
    程式設計 發佈於2024-12-20
  • 如何在 Android 中解析 ISO 8601 日期/時間字串?
    如何在 Android 中解析 ISO 8601 日期/時間字串?
    在Android 解析ISO 8601 日期/時間字串問題:您已收到來自Web 服務的標準ISO 8601字串,例如“2010-10-15T09:27:37Z”。如何在Android中將此字串轉換為日期/時間物件以進行進一步操作? 答案:Android提供了一個SimpleDateFormat類,讓...
    程式設計 發佈於2024-12-20
  • 如何使用正規表示式檢測 URL(包括裸 URL)?
    如何使用正規表示式檢測 URL(包括裸 URL)?
    使用正規表示式偵測 URL您目前的程式碼無法符合缺少「http://」前綴的裸 URL。為了解決這個問題,可以考慮採用綜合正規表示式:https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\ ~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9(...
    程式設計 發佈於2024-12-20
  • 如何在 AngularJS 中有效地求和數組屬性?
    如何在 AngularJS 中有效地求和數組屬性?
    AngularJS 中的高級數組求和在 AngularJS 中,對數組屬性求和可能是一項常見任務。基本方法包括迭代數組並累積屬性值。然而,當面對多個陣列和不同的屬性名稱時,這種方法變得乏味。 為了解決這個問題,需要一個更靈活、可重複使用的解決方案,它允許對任何陣列屬性進行方便的求和。這可以使用 re...
    程式設計 發佈於2024-12-20

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3