此 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
浏览:644

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]删除
最新教程 更多>
  • Java中如何使用观察者模式实现自定义事件?
    Java中如何使用观察者模式实现自定义事件?
    在Java 中创建自定义事件的自定义事件在许多编程场景中都是无关紧要的,使组件能够基于特定的触发器相互通信。本文旨在解决以下内容:问题语句我们如何在Java中实现自定义事件以促进基于特定事件的对象之间的交互,定义了管理订阅者的类界面。以下代码片段演示了如何使用观察者模式创建自定义事件: args)...
    编程 发布于2025-07-01
  • 为什么HTML无法打印页码及解决方案
    为什么HTML无法打印页码及解决方案
    无法在html页面上打印页码? @page规则在@Media内部和外部都无济于事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: bo...
    编程 发布于2025-07-01
  • `console.log`显示修改后对象值异常的原因
    `console.log`显示修改后对象值异常的原因
    foo = [{id:1},{id:2},{id:3},{id:4},{id:id:5},],]; console.log('foo1',foo,foo.length); foo.splice(2,1); console.log('foo2', foo, foo....
    编程 发布于2025-07-01
  • 在C#中如何高效重复字符串字符用于缩进?
    在C#中如何高效重复字符串字符用于缩进?
    在基于项目的深度下固定字符串时,重复一个字符串以进行凹痕,很方便有效地有一种有效的方法来返回字符串重复指定的次数的字符串。使用指定的次数。 constructor 这将返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.Wr...
    编程 发布于2025-07-01
  • 查找当前执行JavaScript的脚本元素方法
    查找当前执行JavaScript的脚本元素方法
    如何引用当前执行脚本的脚本元素在某些方案中理解问题在某些方案中,开发人员可能需要将其他脚本动态加载其他脚本。但是,如果Head Element尚未完全渲染,则使用document.getElementsbytagname('head')[0] .appendChild(v)的常规方...
    编程 发布于2025-07-01
  • PHP与C++函数重载处理的区别
    PHP与C++函数重载处理的区别
    作为经验丰富的C开发人员脱离谜题,您可能会遇到功能超载的概念。这个概念虽然在C中普遍,但在PHP中构成了独特的挑战。让我们深入研究PHP功能过载的复杂性,并探索其提供的可能性。在PHP中理解php的方法在PHP中,函数超载的概念(如C等语言)不存在。函数签名仅由其名称定义,而与他们的参数列表无关。...
    编程 发布于2025-07-01
  • 如何避免Go语言切片时的内存泄漏?
    如何避免Go语言切片时的内存泄漏?
    ,a [j:] ...虽然通常有效,但如果使用指针,可能会导致内存泄漏。这是因为原始的备份阵列保持完整,这意味着新切片外部指针引用的任何对象仍然可能占据内存。 copy(a [i:] 对于k,n:= len(a)-j i,len(a); k
    编程 发布于2025-07-01
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-07-01
  • input: Why Does "Warning: mysqli_query() expects parameter 1 to be mysqli, resource given" Error Occur and How to Fix It?

output: 解决“Warning: mysqli_query() 参数应为 mysqli 而非 resource”错误的解析与修复方法
    input: Why Does "Warning: mysqli_query() expects parameter 1 to be mysqli, resource given" Error Occur and How to Fix It? output: 解决“Warning: mysqli_query() 参数应为 mysqli 而非 resource”错误的解析与修复方法
    mysqli_query()期望参数1是mysqli,resource给定的,尝试使用mysql Query进行执行MySQLI_QUERY_QUERY formation,be be yessqli:sqli:sqli:sqli:sqli:sqli:sqli: mysqli,给定的资源“可能发...
    编程 发布于2025-07-01
  • 表单刷新后如何防止重复提交?
    表单刷新后如何防止重复提交?
    在Web开发中预防重复提交 在表格提交后刷新页面时,遇到重复提交的问题是常见的。要解决这个问题,请考虑以下方法: 想象一下具有这样的代码段,看起来像这样的代码段:)){ //数据库操作... 回声“操作完成”; 死(); } ?> ...
    编程 发布于2025-07-01
  • 在JavaScript中如何并发运行异步操作并正确处理错误?
    在JavaScript中如何并发运行异步操作并正确处理错误?
    同意操作execution 在执行asynchronous操作时,相关的代码段落会遇到一个问题,当执行asynchronous操作:此实现在启动下一个操作之前依次等待每个操作的完成。要启用并发执行,需要进行修改的方法。 第一个解决方案试图通过获得每个操作的承诺来解决此问题,然后单独等待它们: co...
    编程 发布于2025-07-01
  • Java的Map.Entry和SimpleEntry如何简化键值对管理?
    Java的Map.Entry和SimpleEntry如何简化键值对管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    编程 发布于2025-07-01
  • Python元类工作原理及类创建与定制
    Python元类工作原理及类创建与定制
    python中的metaclasses是什么? Metaclasses负责在Python中创建类对象。就像类创建实例一样,元类也创建类。他们提供了对类创建过程的控制层,允许自定义类行为和属性。在Python中理解类作为对象的概念,类是描述用于创建新实例或对象的蓝图的对象。这意味着类本身是使用类关...
    编程 发布于2025-07-01
  • 如何使用组在MySQL中旋转数据?
    如何使用组在MySQL中旋转数据?
    在关系数据库中使用mySQL组使用mySQL组进行查询结果,在关系数据库中使用MySQL组,转移数据的数据是指重新排列的行和列的重排以增强数据可视化。在这里,我们面对一个共同的挑战:使用组的组将数据从基于行的基于列的转换为基于列。 Let's consider the following ...
    编程 发布于2025-07-01
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-07-01

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3