lua对接GPT4实现对话

演示效果:

 准备材料:

1、FastWeb网站开发服务:fwlua.com

2、一台服务器

该示例使用开源项目:fastweb 实现。

代码比较简单,主要是两部分,一个lua代码和一个html页面,用来用户发起请求和后台处理。

源码下载地址我放到文章尾部。

gpt.lua

利用httpclient发起一个POST请求,该请求携带了key、和对话内容,然后解析返回内容并发送给浏览器。

local dkjson = require("dkjson")
-- 配置区
local API_KEY = "你的密钥"
local ENGINE = "gpt-4o"
-- 请求访问GPT
function gpt_request(content)-- 创建HTTP客户端实例local client = httpclient.new()-- 设置超时时间client:set_timeout(3000,1000*60)-- 设置请求头client:request_header("Content-Type", "application/json")client:request_header("Authorization", "Bearer " .. API_KEY)-- 发起POST请求local url = "https://api.openai.com/v1/chat/completions"local body = {model = ENGINE,messages = {{role =  "system",content =  "You are a helpful assistant."},{role =  "user",content = content}}}local success = client:post(url, dkjson.encode(body))-- 检查请求是否成功if success thenlocal body = dkjson.decode(client:response())local status_code = client:status()-- 返回GPT的发送内容return body.choices[1].message.contentelsereturn "请求失败"end
end-- 获取请求参数
local content = dkjson.decode(request:body()).content
-- 发送给浏览器
response:send(gpt_request(content))

index.html

html部分就更简单了,只是一个表单提交和markdown的格式化显示

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Fast Web</title><script src="js/jquery-3.4.1.min.js"></script><style>.button-container {margin-bottom: 10px;}.button-container button {margin-right: 10px;}</style>
</head>
<body><h1>Fast Web GPT</h1><form id="interceptor-form"><label for="send">输入提问:</label><input type="text" id="send" name="send" required><button type="submit">提交</button></form><h3>回复内容:</h3><div id="markdown"></div><script src="/js/marked.min.js"></script><script>$(document).ready(function(){$('#interceptor-form').on('submit', function(event){event.preventDefault();var send = $('#send').val();var data = JSON.stringify({ content: send });$.ajax({url: "/api/gpt.lua",method: 'POST',contentType: 'application/json',data: data,success: function(response) {// 使用marked.js将Markdown转换为HTMLvar htmlContent = marked.parse(response);// 将生成的HTML设置到div中document.getElementById('markdown').innerHTML = htmlContent;},error: function(jqXHR, textStatus, errorThrown) {alert('请求失败: ' + textStatus + ' - ' + errorThrown);}});});});</script></body>
</html>

下载地址:OpenAI-GPT - Fast Web

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/27857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向事件编程之观察者模式

前言 村里的老人常说&#xff1a;真男人就该懂得遵守“三不原则”——不主动、不拒绝、不负责。 一个复杂的软件系统&#xff0c;其中必然会存在各种各样的“对象”&#xff0c;如果在设计之初没有注意控制好耦合度&#xff0c;导致各个对象甚至是函数之间高度耦合&#xff0…

无人机的力量——在民用方面的应用

无人机在民用方面的应用广泛且多样化&#xff0c;以下是对其应用的详细介绍&#xff1a; 影视航拍&#xff1a; 无人机航拍影像具有高清晰、大比例尺、小面积、高视角的优点&#xff0c;特别适合获取带状地区航拍影像&#xff08;如公路、铁路、河流、水库、海岸线等&#xff…

C#面:简述 private、 protected、 public、 internal 修饰符的访问权限 ?

private修饰符表示成员只能在当前类中访问。这意味着私有成员对于类的外部是不可见的。私有成员通常用于封装类的内部实现细节&#xff0c;以确保数据的安全性和一致性。 protected修饰符表示成员可以在当前类和派生类中访问。这意味着受保护的成员对于类的外部是不可见的&…

网络安全知识全景地图V1.0 - 20240616更新

网络安全领域的知识全景涵盖了从基础概念到高级技术的广泛内容。博主基于自身十年多的工作经验结合CISSP认证官方教材按照不同的主题和层次梳理出如下高层次的概览地图&#xff0c;可以帮助个人和组织理解网络安全领域的主题。 1.1. 基础理论 1.1.1. 网络安全概述 网络安全的…

React@16.x(29)useRef

目录 1&#xff0c;介绍2&#xff0c;和 React.createRef() 的区别3&#xff0c;计时器的问题 目前来说&#xff0c;因为函数组件每次触发更新时&#xff0c;都会重新运行。无法像类组件一样让一些内容保持不变。 所以才出现了各种 HOOK 函数&#xff1a;useState&#xff0c;u…

Camtasia Studio 2024软件最新版下载【安装详细图文教程】

​Camtasia是美国TechSmith公司出品的一款集电脑屏幕录制、视频剪辑为一体的软件套装。同时包含Camtasia 录制器、Camtasia Studio&#xff08;编辑器&#xff09;、Camtasia 菜单制作器、Camtasia 剧场、Camtasia 播放器和Screencast的内置功能。 安 装 包 获 取 地 址&#x…

AirPlay技术规范及认证资讯

AirPlay是Apple开发的一种无线技术&#xff0c;允许用户将音频、视频或图片从iOS设备、Mac电脑或其他支持AirPlay的设备无线传输到支持AirPlay的接收器设备上&#xff0c;例如智能电视或音响系统。这项技术基于Wi-Fi网络&#xff0c;提供了一种便捷的方式来共享媒体内容。AirPl…

Java 数据结构:栈和队列

Java 数据结构&#xff1a;栈和队列 在软件开发中&#xff0c;数据结构是组织和管理数据的基础。掌握常见的数据结构如栈&#xff08;Stack&#xff09;和队列&#xff08;Queue&#xff09;&#xff0c;能够帮助我们编写出更高效且结构清晰的代码。本文将深入探讨这两种数据结…

c++_0基础_讲解3 输入 输出

cin与cout C是一种通用的编程语言&#xff0c;支持面向对象编程。它是由Bjarne Stroustrup在1983年创建的&#xff0c;是C语言的一个扩展&#xff0c;为程序员提供了更多的功能和更高的抽象级别。 在C中&#xff0c;输入和输出是非常重要的操作&#xff0c;常用的输入操作是使…

车票信息的请求与显示

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 1 发送与分析车票信息的查询请求 得到了获取车票信息的网络请求地址&#xff0c;然后又分析出请求地址的必要参数以及车站名称转换的文件&#xff…

如何用Windows api查找标题相似的所有窗口句柄VB6

在 VB6 中&#xff0c;可以使用 FindWindow API 函数来查找窗口句柄。这个函数接受两个参数&#xff0c;一个是窗口类名&#xff0c;另一个是窗口标题。如果你只知道窗口标题的一部分或者想查找标题相似的所有窗口&#xff0c;可以使用通配符来进行模糊匹配。 在 VB6 中&#…

《软件测试52讲》——测试基础知识篇

1 你真的懂测试吗&#xff1f;从“用户登录”测试谈起 从“用户登录”测试谈起&#xff0c;“用户登录”功能作为测试对象 作为测试工程师&#xff0c;你的目标是要保证系统在各种应用场景下的功能是符合设计要求的&#xff0c;所以你需要考虑的测试用例就需要更多、更全面。 …

2078.两栋颜色不同且距离最远的房子

街上有 n 栋房子整齐地排成一列&#xff0c;每栋房子都粉刷上了漂亮的颜色。给你一个下标从 0 开始且长度为 n 的整数数组 colors &#xff0c;其中 colors[i] 表示第 i 栋房子的颜色。 返回 两栋 颜色 不同 房子之间的 最大 距离。 第 i 栋房子和第 j 栋房子之间的距离是 a…

Linux应用编程 - i2c-dev操作I2C

嵌入式Linux操作I2C设备&#xff0c;我们一般会在内核态编写I2C驱动程序。另外还能在用户空间编写I2C程序&#xff0c;下面介绍相关代码的实现。 i2c-dev框架在内核中封装了I2C通信所需要的所有通信细节&#xff0c;I2C适配器会在/dev目录下创建字符设备&#xff0c;例如&#…

kettle从入门到精通 第七十课 ETL之kettle kettle数据校验,脏数据清洗轻松拿捏

场景&#xff1a;输入在指定的错误(错误应涵盖数据类型不匹配的情况)行数内&#xff0c;trans不报错&#xff0c;但通过错误处理步骤捕捉&#xff0c;并记入文件&#xff0c;整个数据管线正常完成直至处理完最后一个输入行。 解决方案&#xff1a;使用步骤【数据检验】进行处理…

C# —— 算数运算符

算术运算符: 用于数值类型进行变量计算的运算符 他的返回结果是数值 赋值运算符 : 先看右侧 再看 左侧 将右侧的数据赋值给左侧的变量 int num 5; string name "老王"; float myHeight 187.5f; 加 先计算 再赋值 // 进行数据的加法…

本周MoonBit新增Wasm1引用计数支持、语法即将添加错误恢复机制

MoonBit更新 【Wasm MVP】Wasm1 后端添加基于 Perceus 算法的引用计数支持 【语法】throw raise try catch 均被保留为关键字 为了即将添加的错误处理机制 【Core】List与sorted_map被移动至core/immut下 List被移动至core/immut/list包中&#xff0c;并被移除内置类型支持 …

快速解决Windows和Linux文件格式转换

来源&#xff1a; “码农不会写诗”公众号 链接&#xff1a;快速解决Windows和Linux文件格式转换 文章目录 01 安装02 使用 NOTE-dos2uninx dos2unix是将Dos(Windows)格式文件转换为Linux格式的命令&#xff1b; unix2dos是将Linux格式文件转换为Dos(Windows)格式的命令。 Dos…

哈希表、递归在二叉树中的应用-1372. 二叉树中的最长交错路径

题目链接及描述 1372. 二叉树中的最长交错路径 - 力扣&#xff08;LeetCode&#xff09; 题目分析 题目所述&#xff0c;计算在二叉树中交替遍历的最大深度【左->右->左】【右->左->右】&#xff0c;例如对于从当前根节点root出发&#xff0c;则此时遍历方向有两个…

今日成果2024-6-7 TrustZone TEE安全SDK开发指南

Rockchip Vendor Storage Application Note.pdf OK 开机下&#xff0c;可以实现Vendor Storage的读写。 0ms时同步RTC时间 OK Rockchip_Developer_Guide_TEE_SDK_CN.pdf 什么是TrustZone 此系统方法意味着可以保护安全内存、加密块、键盘和屏幕等外设&#xff0c;从而可确…