【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 (
            <Chat
            navbar={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官方文档
百度云函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在 WinForm 应用程序中创建 Web API,您需要执行以下步骤: 1. 在 Visual Studio 中创建一个新的 WinForm 应用程序项目。 2. 在项目中添加一个控制器类。在该类中,您可以定义您的 API 方法和路由。例如,以下代码定义了一个返回字符串的简单 API 方法: ```csharp public class MyApiController : ApiController { [HttpGet] [Route("api/hello")] public string GetHello() { return "Hello, world!"; } } ``` 3. 在项目中添加一个 Web API 配置类。在该类中,您可以配置 Web API 的路由和其他设置。例如,以下代码将配置 Web API 使用默认路由: ```csharp public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } ``` 4. 在您的 WinForm 应用程序入口点中注册 Web API。例如,以下代码将 Web API 注册到默认 HttpServer 上: ```csharp static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); // 注册 Web API HttpConfiguration config = new HttpConfiguration(); WebApiConfig.Register(config); HttpServer server = new HttpServer(config); GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container); var listener = (HttpListener)server.GetType().GetProperty("Listener", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(server); listener.Prefixes.Add("http://localhost:8080/"); // 设置监听地址 server.Start(); // 启动 WinForm 应用程序 Application.Run(new MainForm()); } ``` 5. 在您的 WinForm 应用程序中使用 HttpClient 或 WebClient 等工具来调用 Web API。例如,以下代码使用 HttpClient 调用上面定义的 API 方法: ```csharp using (HttpClient client = new HttpClient()) { HttpResponseMessage response = await client.GetAsync("http://localhost:8080/api/hello"); if (response.IsSuccessStatusCode) { string result = await response.Content.ReadAsStringAsync(); MessageBox.Show(result); } } ``` 请注意,这只是一个简单的示例,您可以根据需要添加更多的 API 方法和配置选项。此外,如果您需要在 Web API 中使用依赖注入等高级功能,您可能需要使用一些支持 DI 的框架,如 Autofac 或 Unity。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KmBase

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值