【winform】一个简单的桌面版聊天工具,支持远程授权,以及自定义API

本文主要是介绍【winform】一个简单的桌面版聊天工具,支持远程授权,以及自定义API,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、程序结构

程序主要结构如下:
在这里插入图片描述

二、 程序源码

源码包括:
在这里插入图片描述
其中dist中为打包发布后的exe文件,授权后会自动生成temp文件。aproj为工程文件,点击后可使用aardio进行修改,重新发布

使用ChatUI的核心代码如下,全部源码见源代码下载:

import web.view;
var wb = web.view(winform);
import web.rest.jsonClient;
var http = web.rest.jsonClient();
http.setAuthToken(web_api);
var ai = http.api("https://api.openai.com/v1/");
var conversation = {};
var chatGptName = "chatty";
var chatGptInfo = "一个人工智能";
wb.external = {ask = function(q){table.push(conversation,"用户:"+q);var prompt;do{prompt =  "提示:你叫"+chatGptName+","+chatGptInfo+"。<|endoftext|>"  +"当前时间:"+tostring(time())+"。<|endoftext|>"  + ..string.join(conversation,"<|endoftext|>") + "<|endoftext|>"+chatGptName+":";}while(#prompt > 2000);var ret,err = ai.completions({"prompt": prompt,//发送提示"model": "text-davinci-003",//模型 "temperature": 0.8,//热度,0~1 之间。"max_tokens": 2048,//最大允许的字符数量 "stop": {"<|endoftext|>"}  })if(ret){var a = ret.choices[1].text; table.push(conversation,chatGptName+":"+a);return a;}else {if(err[1]=='{'#){var json = web.json.tryParse(err);if(json[["error"]][["message"]]) return json[["error"]][["message"]];}return err;}};  
} 
wb.html = /**
<!DOCTYPE html><html>
<head><meta charset="utf-8" /><title>WebView2</title> <script src="https://lib.baomitu.com/react/17.0.2/umd/react.development.js"></script><script src="https://lib.baomitu.com/react-dom/17.0.2/umd/react-dom.development.js"></script><script src="https://lib.baomitu.com/chatui-core/2.4.2/index.min.js"></script> <link rel="stylesheet" href="https://lib.baomitu.com/chatui-core/2.4.2/index.min.css"> <script src="https://lib.baomitu.com/babel-standalone/7.18.13/babel.min.js"></script><script src="https://g.alicdn.com/chatui/icons/0.3.0/index.js"></script><style type="text/css">html,body,#app{height:100%}</style><script type="text/javascript">
window.onload = function () {
document.onkeydown = function() {var e = window.event || arguments[0];if (e.keyCode == 123) {return false;} else if ((e.ctrlKey) && (e.shiftKey) && (e.keyCode == 73)) {return false;} else if ((e.shiftKey) && (e.keyCode == 121)) {return false;} else if ((e.ctrlKey) && (e.keyCode == 85)) {return false;}};document.oncontextmenu = function() {return false;}
}
</script>
</head>
<body>  
<script type="text/babel"> const { useState,useEffect,useCallback,useRef } =  React;  const { default: Chat, Bubble, useMessages } = ChatUI;  const App = () => {const { messages, appendMsg, setTyping } = useMessages([{type: 'text',content: { text: 'Hello,我是 ai~' },user: { avatar: 'https://openaiapi-site.azureedge.net/public-assets/d/a95be687ff/favicon.svg' },}]);// 默认快捷短语,可选const defaultQuickReplies = [{name: '讲个笑话',isHighlight: true,},{name: '将hello翻译为中文',},{name: '用Python帮我写个Hello World!',},];// 快捷短语回调,可根据 item 数据做出不同的操作,这里以发送文本消息为例function handleQuickReplyClick(item) {handleSend('text', item.name);}function handleSend(type, val) {if (type === 'text' && val.trim()) {appendMsg({type: 'text',content: { text: val },position: 'right',});setTyping(true);aardio.ask(val).then( text=>{appendMsg({type: 'text',content: { text: text },}); }) }}function renderMessageContent(msg) {const { content } = msg;return <Bubble content={content.text.trim()} />;}return (<Chatnavbar={null}messages={messages}renderMessageContent={renderMessageContent}quickReplies={defaultQuickReplies}onQuickReplyClick={handleQuickReplyClick}onSend={handleSend}/>);};ReactDOM.render(<App />, document.querySelector('#app')); 
</script>
<div id="app"></div>
**/winform.show();
return win.loopMessage();

四、 参考

chatui官方文档
百度云函数

这篇关于【winform】一个简单的桌面版聊天工具,支持远程授权,以及自定义API的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/215378

相关文章

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

WinForm跨线程访问UI及UI卡死的解决方案

《WinForm跨线程访问UI及UI卡死的解决方案》在WinForm开发过程中,跨线程访问UI控件和界面卡死是常见的技术难题,由于Windows窗体应用程序的UI控件默认只能在主线程(UI线程)上操作... 目录前言正文案例1:直接线程操作(无UI访问)案例2:BeginInvoke访问UI(错误用法)案例

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam