iOS AI 聊天应用 SwiftUI+UIKit | 多模型支持 | 流式响应 | 仿照市场上AI对话工具 | OpenRouter API 等

EasyAI - iOS AI 聊天应用

一个面向长期迭代的 iOS AI 聊天基础工程,不只跑通接口,更关注完整体验与可维护性:体验顺滑、功能闭环、结构清晰。

项目地址:https://github.com/qw9685/easyAI

🎬 Demo

[(image-c4301c-1770778301808)]
chat.gif
history.gif
set.gif

why?

很多示例要么只有文本对话,要么没有真正的流式体验,要么缺少会话历史与持久化。
EasyAI 的目标是:打开就能用、聊起来舒服、后续还能持续加功能。

特点?

1)多模型:一个入口接入主流大模型

  • 基于 OpenRouter 获取模型列表并发起对话请求
  • 支持搜索/筛选/收藏模型
  • 支持查看上下文长度、价格等关键信息,减少“盲选”

2)真流式输出:边生成边显示

  • 支持 SSE 流式响应(非本地伪流式)
  • 回复实时增长,体验更接近 ChatGPT/Claude 类产品
  • 支持可选本地打字机显示,可在设置中开关与调速

3)智能路由 + 自动降级:更稳的对话链路

  • 路由模式支持手动/智能,智能模式可按任务意图与预算偏好选择模型
  • 请求失败时支持自动 fallback 重试(可配置重试次数、预算策略、错误类型)
  • 支持原生 fallback 深度配置,多模态场景会优先选择支持图片输入的模型

4)支持图片:多模态输入链路打通

  • 相册多选图片(最多 5 张)
  • 发送前可预览/删除
  • 聊天内支持多图横向展示

5)Markdown 渲染更像聊天产品

  • 代码块/引用/列表/链接/图片/HTML/数学公式等富文本展示
  • 代码块支持一键复制
  • 代码块支持系统分享导出

6)Prompt 模板 + 语音输入:提效输入侧

  • 输入栏内置 Prompt 模板(会议纪要、翻译、代码讲解、Bug 修复等)
  • 模板可一键注入输入框,并联动推荐模型
  • 支持语音输入(STT)实时转写

7)对话历史 + 本地持久化:从演示到可用

  • 支持多会话列表、重命名、置顶、删除、搜索
  • 消息与会话本地保存,冷启动可恢复

8)产品级交互:停止生成 + 状态一致

  • 生成中支持一键停止(发送按钮切换为停止)
  • 停止后保留已显示文本、结束 loading 并显示时间
  • 若停止时尚未输出正文,显示“已停止 + 时间”(仅 UI 提示,不写入持久化历史)

9)TTS 语音朗读增强:可配置 + 不错乱

  • 助手回复自动朗读(流式/非流式)
  • 流式按句子结束切段串行播放,避免乱序
  • 播放前清洗文本(过滤 Emoji、Markdown、URL 等)
  • 聊天页支持静音/恢复(mute,不是 stop)
  • 支持配置音色/语速/音高

10)可观测性与调试能力

  • 消息级状态栏展示 Token/耗时/成本估算
  • 可显示运行状态(路由命中、fallback 重试、错误分类)
  • 模型页提供最近对话统计、智能路由效果统计、Provider 统计
  • 支持 phase 日志(turnId/itemId)用于排查流式与持久化问题

设置项(App 内可调)

  • API Key(Keychain 存储)
  • 假数据模式(无 Key 也可联调 UI)
  • 流式响应开关
  • 打字机开关与速度/刷新率
  • 自动降级开关、重试次数、原生 fallback 深度、Fallback 预算策略
  • 错误类型重试开关(限流/超时/服务不可用/网络)
  • 路由模式(手动/智能)与预算偏好(免费优先/性价比/质量优先)
  • 上下文策略(全部/仅文本/仅当前轮)
  • 最大 Token 数
  • 语音朗读设置(音色/语速/音高、静音状态)
  • 主题主色调
  • phase 日志开关

技术栈与结构

  • iOS 15+ / Swift 5.9+ / Xcode 15+
  • SwiftUI + UIKit 混合实现
  • Networking:普通请求 + SSE 流式
  • Persistence:本地数据库持久化(WCDB)
  • 依赖:WCDBSwiftRxSwiftRxDataSourcesSnapKitKingfisherMarkdown
  • 目录结构:
easyAI/
├── App/                         # 应用入口/启动
├── Modules/                     # 业务模块(Chat/Conversations/Models/Settings/HistoryConversations)
└── Shared/                      # 共享层(Config/Networking/Persistence/Repositories/Security/UI/Models)

注意事项

  1. 调用 OpenRouter 可能产生费用,建议先使用免费模型测试
  2. 请关注 OpenRouter 配额与速率限制
  3. 请勿将 API Key 提交到公开仓库
  4. 语音输入依赖系统语音识别与麦克风权限,模拟器不支持录音,需真机测试

后续开发

暂无。
当前版本已覆盖聊天产品常见关键链路,可直接作为长期迭代基础工程继续扩展(语音、文件、工具调用、导出等)。

许可证

MIT License

致谢

  • OpenRouter - 统一 AI 模型 API 接入
  • SwiftUI / UIKit - Apple 原生 UI 框架

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容