用最少代码写个 AI 聊天软件,一键部署本地大模型

本文主要内容:

1、用最少的代码写个 AI 桌面聊天软件。

2、调用简洁易用的 ChatUI 实现前端界面。

3、自动部署一切,检测到没有 Ollama 自动下载安装,输入未安装的大模型名自动下载安装 —— 实时显示下载进度。

4、一键生成独立 EXE 文件,打包后仅 700 KB。

如果有代理可以开一下,首次下载 Ollama 与模型会快一些。后面使用的时候就不需要了。

打开只有几 MB 的极简开发工具 aardio ,新建工程。在 main.aardio 中输入下面的代码:

import win.ui;  
/*DSG{{*/  
var winform = win.form(text="Ollama 桌面助理";right=644;bottom=556)  
winform.add(  
cmbModels={cls="combobox";left=171;top=520;right=336;bottom=546;db=1;dl=1;edge=1;items={};mode="dropdown";z=2};  
custom={cls="custom";text="自定义控件";left=3;top=3;right=638;bottom=504;db=1;dl=1;dr=1;dt=1;z=1};  
goLibrary={cls="syslink";text='<a href="https://ollama.com/library?sort=popular">搜索大模型</a>';left=369;top=523;right=471;bottom=541;color=16729600;db=1;dl=1;dr=1;notify=1;z=4};  
static={cls="static";text="请输入或选择模型名称:";left=9;top=520;right=166;bottom=546;align="right";db=1;dl=1;transparent=1;z=3}  
)  
/*}}*/  
  
//导入浏览器控件  
import web.view;  
var wb = web.view(winform.custom);  
  
//几句代码创建 Ollama 接口,不需要额外封装库  
import web.rest.jsonClient;  
var client = web.rest.jsonClient();  
var ollama = client.api("http://localhost:11434/api/")  
  
//创建聊天上下文  
import web.simpleChatUi.messages;  
var messages = web.simpleChatUi.messages();   
  
//添加消息  
messages.push(   
    //system 角色用来写系统指令提示  
    role = "system";   
    content  = "你是 Ollama 智能助理,用户的贴心小助手~。现在的时间是 " + tostring(time()) + "。"  
)  
  
//导出网页 JavaScript 可以调用的接口  
wb.external = {};  
wb.external.sendMessage = function(id,prompt){   
       
    //启动时 ChatUI 会发一个空消息  
    if(!id){  
          
        //第一次显示欢迎消息  
        return chatUi.emit(  
            content = '主人好,我是 Ollama 智能助理,您的贴心小助手~';   
        );  
    }  
          
    //加入到聊天上下文  
    messages.push(   
        role = "user";  
        content = prompt;  
    )    
      
    //非阻塞异步调用,让 JavaScript 调用先返回     wb.setTimeout(   
        function(){  
              
            //记录应答消息  
            var content = "";  
                  
            //发送聊天请求  
            var ok,err = ollama.chat({  
                model = winform.cmbModels.text;  
                options = {  
                    temperature = 0.7;//模型选项  
                }  
                messages = messages;  
            },function(result){       
                  
                //流式响应,每次应答一个字  
                content = content ++ result.message.content;  
                  
                //逐字发送聊天消息到界面,实现打字效果                  chatUi.emit({  
                    id = id;  
                    content = content  
                })      
            } )    
              
            if(ok){  
                //加入到聊天记录  
                messages.push(   
                    role = "assistant";  
                    content = string.trim(content);  
                )  
            }    
            else{  
                //如果模型不存在  
                if(string.indexOf(err,`try pulling it first`)){  
                      
                    //下载模型  
                    var ok,err = ollama.pull({  
                        model = winform.cmbModels.text;   
                    },function(result){     
                          
                        //出错了,显示错误信息  
                        if( result.error ){  
                            chatUi.emit({  
                                id = id;  
                                content = result.error   
                            })    
                            return;  
                        }  
                          
                        //显示模型下载进度                          if(result.completed) {  
                            chatUi.emit({  
                                id = id;  
                                content = "正在下载模型:"  + ..math.round((result.completed / result.total) * 100) + "% " + ..math.size64(result.completed).format()  
                            })    
                        }  
                        elseif( result.status ){  
                              
                            //显示下载状态  
                            chatUi.emit({  
                                id = id;  
                                content = result.status  
                            })   
                              
                            //下载完成  
                            if(result.status == "success"){  
                                wb.external.sendMessage(id,prompt);  
                                return;  
                            }   
                        }     
                    } )   
                      
                    //下载成功  
                    if(ok) return ;   
                }  
                      
                //显示错误信息  
                chatUi.emit({  
                    id = id;  
                    content = client.lastResponseError("error"):err;  
                })     
            }   
        }  
    );   
};     
  
//加载 ChatUI 前端界面  
import web.simpleChatUi;  
chatUi = web.simpleChatUi(wb);  
chatUi.avatar = 'https://gw.alicdn.com/tfs/TB1DYHLwMHqK1RjSZFEXXcGMXXa-56-62.svg';  
  
//列出已安装的大模型  
var ret = ollama.tags.get();   
winform.cmbModels.items = table.map(ret.models,lambda(v) v.name )  
winform.cmbModels.selIndex = 1;  
  
//搜索在线大模型  
import process;  
winform.goLibrary.onHyperlinkClick = function(nmSysLink,url,id){  
    process.openUrl(url) //打开超链接    }   
  
winform.show();  
win.loopMessage();

点击『保存 』按钮:

然后按『运行 F5 』按钮,就可以自动配置好并启动程序。

运行效果如下:

按 F7 发布为 EXE 文件。就这么简单没有其他复杂的内容。

下面我们写个更简单控制台版本,代码如下:

import console;   
console.setTitle("聊天助手")  
  
//创建 Ollama 客户端  
import web.rest.jsonClient;  
var client = web.rest.jsonClient();  
var ollama = client.api("http://localhost:11434/api/")  
  
//循环读取用户输入问题  
while(   
    var str = console.getText( "请输入:" )   
    ) {    
      
    //调用 Ollama 聊天接口  
    var ok,err = ollama.chat({  
          
        //选择模型,这里选择千问0.5b  
        model = "qwen:0.5b";  
          
        //这是聊天消息队列(可用于保存上下文)  
        messages = {  
            {  
                //system 角色用来写系统指令提示  
                role = "system";   
                content  = "你是 Ollama 智能助理,用户的贴心小助手~。现在的时间是 " + tostring(time()) + "。"  
            };  
            {  
                //user 角色代表用户  
                role = "user";  
                content  = str  
            };  
        }  
    },function(result){  
        //这个 API 是流式输出。  
        console.writeText(result.message.content)   
    } )   
      
    //如果出错,输出错误信息  
    if(!ok){  
        console.log( client.lastResponseError("error") || err )  
    }   
}  
   
console.pause(true);  

system 角色用来写系统指令提示。

user 角色代表用户。

assistant 角色表示 AI 模型。

这 3 个角色来回发送的所有消息,一问一答都要记录在 messages 队列中,每次请求都作为聊天上下文发送过去。

看一下运行效果:

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值