Compose Multiplatform+Kotlin Multiplatfrom 第七弹跨平台 AI开源
引言
随着AI浪潮,很多工具都集成各种AI功能,要说最贴近生活的就是手机语音助手引入大模型技术,图片消除人或消除反光,即圈即搜,智能帮写等。我最开始接触AI是买了个咪鼠无线鼠标,可以白嫖所有AI功能而且软件服务永久更新,到后面做IDE编程助手插件,实现基于大模型接口的AI流式内容处理功能,再到拥有持有上下文访问支持的智能体开发,研究了很多专业知识,包括RAG和向量化存储,memory,节点、边和图,mcp和functioncall工具等,后面都以AI COOK项目展现,当前的Chat Bot就此完结,它是加深我对AI技术的掌握和kmp+cmp框架和AVI意图的开发能力,内部ui的设计多没做到数据分离,导致无法preview,AVI的设计也是青涩,大模型接口每次需要完整的消息数据作为参数,这方面的结构设计冗余,此项目作为AI参考学习研究请勿喷。
注意readme.md的内容指示,方便构建项目
要点讲解
1.precompose框架页面导航设计,参照它官方是将导航图谱设计是将所有页面外壳都定义放在整个主路由NavHost中,然后每个页面外壳都要传递很多lambal函数作为参数,感觉很冗余,所以我设计了个以路径为标识的跳转页面,NavigationScene下是各个页面标识路径,NavigateRoute是定义函数是screen界面.
2.实现类似Eventbus的功能类EventHelper,但前提是页面绑定单例的viewModel,事件响应放在viewModel中实现。
3.应用内部有文字、图片、工具处理,所以会根据请求的类型进行切换大模型,视图模型就专门处理图片,有些大模型是不支持工具调用,代码里只简单处理自定义的functionCall工具,大模型请求基于LLMChatRepository.kt,原生写法LLMRepository.kt。
4.开源代码 github代码,gitee代码,代码打了几个tag,是对多平台构建模版的依赖引入的快速标记,不涉及功能代码。
README.md
软件架构
以compose multiplatform为UI框架,kotlin
multiplatform为逻辑开发,实现Android、iOS、macOS、Windows、Linux端,以大模型api为接口调用数据,
kotlin 2.1.0,jdk 21(17也是支持的),
开发机器人聊天、文本问答、图片问答、截图、快捷键识别、翻译、历史保存、划词检测、深度思考、黑白主题切换。
开发注意
编译环境注意
Android studio 2024-2025.1
macOs sonoma 14.3.1
Windows 11
kotlin 2.2.0,(旧的2.1.0也可以) gradle8.5.0
项目脚本环境
1.Gradle.properties 内设置当前的系统的环境gradle的本地路径,这样可以指定不同的jdk版本,windows电脑和mac电脑的肯定不同,不然就取gradle_home
2.jvmMain/resources/.env 是大模型的key,需要替换成自己的服务器和apikey,不然容易爆和过期
编译命令
Mac/windows 编译是在terminal实现,命令都写在 DesktopApp.kt类中
系统适配桥接
多平台定义的桥接接口除了Platform.kt类,在com.hwj.ai.except下的接口都是桥接,另外就是依赖注入di中的。
错误提示
项目是实验性验证多模态大模型的使用,包含接口数据结构的设计,界面UI的设计,引入了很多可能验证性依赖库。
注意:
1.当前没有使用的sqldelight,在开发web端的存储时一直报错最后放弃了,用了简单的saveKey方式存聊天历史。
2.objectbox数据库在纯android成功,但是kmp中无法用ksp生成代码,最后弃用。
3.验证ocr识别鼠标划词时引入bytedeco发现很难解决多行划词的不规则矩形,而且识别字错误多,最后弃用。
4.iosApp运行要在xcode启动,xcode中引入自定义的编译文件类,如果只是在ide编写了swift的代码文件还是不能直接参与xcode的编译,要在项目信息中手动引入,对Android开发者简直噩梦。
运行效果
全平台
- 1.多轮机器对话 ,支持多个大模型切换
- 2.本地会话记录缓存,文本、图片会话加载
- 3.黑暗模式切换,支持所有系统,支持代码框包裹
- 4.富文本对代码支持,对部分公式函数支持
- 5.系统图册选择后模型问答,支持每轮引用图片问答
- 6.desktop端截图后的模型问答,手机拍照回答图片的问答
- 7.多端编译,一套代码开发,适配不同机型和系统,磨平差异性
- 8.大模型自动调度,接入深度思考R1
- 9.消息对话内容可选择,可复制,可重新生成问答
- 10.图片预览
- 11.欢迎语动画welcome,支持lottie动画
- 12.消息列表、历史列表根据内容自适应滚动条
- 13.消息列表过长可一键置底
- 14.抽屉布局自适应,桌面端可隐藏,手机端是抽屉
- 15.点击头像跳转默认浏览器
- 16.设置回答用中文或英文,实时生效
- 17.引入koog 开发智能体
desktop端
- 1.截图功能,第五弹文章单独放出实现代码,后面再融入更多需求后扩展了,截图可windows/mac,Mac使用时就会询问权限,windows添加了全局快捷键Alt+A响应快速截图然后拉起应用直接问答。Alt+B全局拉起应用主窗口。
- 托盘隐藏最小化,托盘菜单有打开、退出,双击打开应用主窗口。
- 这次实现了类似豆包的AI划词工具,但是支持的应用有限,选中的速度也没它快,因为是纯Java实现,用了JNA+UIAutomation组合技术架构,获取系统钩子监听鼠标状态,部分win32应用,如记事本和notepad++直接可用user32消息命令检测所选文字,主要支持Chrome浏览器、Edge浏览器,火狐不知道为啥只能定位到首个标签页。
- 划词后,全局AI浮窗显示,可一键搜索、总结、复制,快速拉起主应用窗口进行问答。
为了更好支持kmp+cmp的开发和AI应用,此文章是以总结学习结束对话应用开发,项目代码已开源,感谢点赞收藏!
何 2025/10/17