先别急着喷,没好用的iOS-Ollama客户端那就自己写个然后开源吧

一、故事起因

因所在行业特殊,很多敏感数据需要使用大模型进行数据的处理和分析,无法使用公有云上的各种模型,于是在公司内部部署了 Ollama 来跑本地模型解决问题。

这会问题来了,手机端需要访问 Ollama API,可没个趁手的 App,那就花一个晚上写一个吧。

Swift + SwiftUI,问题不大。

二、功能设计

目前需要下面这几个功能:

2.1 Ollama 服务配置

需要支持 Ollama 服务的配置,包括:

  • 服务地址
  • 使用的模型
  • 系统 prompt
  • 模型参数(这个目前还没做)

2.2 Ollama API 流式调用

为了提升体验,调用的是 Ollama API 的流式调用,每次调用只返回一部分结果,然后客户端不断读取,直到全部返回。

2.3 重开会话和会话列表

支持重开会话,支持选择会话列表的历史记录接着对话。

三、实现思路

3.1 数据模型建模

为了方便调用,我们先进行数据建模

3.1.1 Ollama聊天请求对象

Swift 复制代码
struct OllamaChatRequest: Codable {
    /*
     模型名称
     */
    var model = ""
    
    /*
     消息列表
     */
    var messages: [OllamaMessage] = []
    
    /*
     流式输出
     */
    var stream = true
}

3.1.2 Ollama聊天响应对象

Swift 复制代码
struct OllamaChatResponse: Codable {
    /*
     消息对象
     */
    var message: OllamaMessage
}

3.1.3 Ollama消息流

Swift 复制代码
struct OllamaChatStream: Codable {
    /*
     是否已完成
     */
    var done: Bool
    
    /*
     响应的消息对象
     */
    var message: OllamaMessage
}

3.1.4 Ollama消息对象

Swift 复制代码
struct OllamaMessage: Codable, Identifiable {
    /*
     系统
     */
    public static let ROLE_SYSTEM = "system"
    
    /*
     AI
     */
    public static let ROLE_ASSISTANT = "assistant"
    
    /*
     用户
     */
    public static let ROLE_USER = "user"
    
    /*
     消息ID
     */
    let id = UUID()
    
    /*
     消息角色
     */
    var role:String
    
    /*
     消息内容
     */
    var content:String
}

3.1.5 Ollama 列出模型响应对象

Swift 复制代码
struct OllamaModelResponse: Codable {
    /*
     模型列表
     */
    var models:[OllamaModel]
}

3.1.6 Ollama 模型对象

Swift 复制代码
struct OllamaModel:Identifiable,Codable{
    /*
     ID
     */
    let id  = UUID()
    
    /*
     模型名称
     */
    var name:String
}

3.1.7 Ollama 服务配置对象

Swift 复制代码
struct OllamaConfig :Codable{
    public static let CONFIG_PATH = "config.json"
    
    /*
     Ollama服务地址
     */
    var url :String
    
    /*
     提示词
     */
    var prompt:String
    
    /*
     使用的模型
     */
    var model:String
    
    /*
     模型列表
     */
    var models: [OllamaModel]
}

3.2 功能展示

目前已完成的功能部分:

3.2.1 聊天页面

3.2.2 设置页面

3.2.3 重开会话

四、代码实现

代码篇幅较长,我们干脆直接开源了。

还在 Ollama 官方新闻页面偷了个图片抠出来当了 Icon

Github: github.com/HammCn/Olla...

五、自建 Ollama 服务

我们在 Cloudflare Worker 上自建了一个 Ollama 服务,每天 10w 次的免费请求量,白嫖的快乐。

当然,我们不会用这种公有云上的模型来处理敏感数据。

下一篇我们来讲讲如何白嫖一个吧。

六、最后

That's all.

因为要备案,懒得上架 AppStore 了,怪麻烦的。自己用的话,拉下去本地构建到 iPhone 上即可。

Bye.

相关推荐
飞哥数智坊2 小时前
我的“龙虾”罢工了!正好对比下GLM、MiniMax、Kimi 3家谁更香
人工智能
风象南3 小时前
很多人说,AI 让技术平权了,小白也能乱杀老师傅 ?
人工智能·后端
董董灿是个攻城狮4 小时前
大模型连载1:了解 Token
人工智能
RoyLin7 小时前
沉睡三十年的标准:HTTP 402、生成式 UI 与智能体原生软件的时代
人工智能
needn9 小时前
TRAE为什么要发布SOLO版本?
人工智能·ai编程
毅航9 小时前
自然语言处理发展史:从规则、统计到深度学习
人工智能·后端
前端付豪10 小时前
LangChain链 写一篇完美推文?用SequencialChain链接不同的组件
人工智能·python·langchain
ursazoo10 小时前
写了一份 7000字指南,让 AI 帮我消化每天的信息流
人工智能·开源·github
神秘的猪头12 小时前
🔌 把 MCP 装进大脑!手把手带你构建能“热插拔”工具的 AI Agent
langchain·llm·mcp
_志哥_13 小时前
Superpowers 技术指南:让 AI 编程助手拥有超能力
人工智能·ai编程·测试