零基础写个 AI 聊天软件,自动部署本地大模型(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();

点击『保存 』按钮:

零基础写个 AI 聊天软件,自动部署本地大模型(ai聊天工具)

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

运行效果如下:

零基础写个 AI 聊天软件,自动部署本地大模型(ai聊天工具)

按 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聊天工具)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年5月2日 下午5:40
下一篇 2024年5月3日 上午8:09

相关推荐