【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

相关文章

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

Mysql用户授权(GRANT)语法及示例解读

《Mysql用户授权(GRANT)语法及示例解读》:本文主要介绍Mysql用户授权(GRANT)语法及示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql用户授权(GRANT)语法授予用户权限语法GRANT语句中的<权限类型>的使用WITH GRANT

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

SpringSecurity6.0 如何通过JWTtoken进行认证授权

《SpringSecurity6.0如何通过JWTtoken进行认证授权》:本文主要介绍SpringSecurity6.0通过JWTtoken进行认证授权的过程,本文给大家介绍的非常详细,感兴趣... 目录项目依赖认证UserDetailService生成JWT token权限控制小结之前写过一个文章,从S

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优