iOS AI 聊天應(yīng)用 SwiftUI+UIKit | 多模型支持 | 流式響應(yīng) | 仿照市場(chǎng)上AI對(duì)話工具 | OpenRouter API 等

EasyAI - iOS AI 聊天應(yīng)用

一個(gè)面向長(zhǎng)期迭代的 iOS AI 聊天基礎(chǔ)工程,不只跑通接口,更關(guān)注完整體驗(yàn)與可維護(hù)性:體驗(yàn)順滑、功能閉環(huán)、結(jié)構(gòu)清晰。

項(xiàng)目地址:https://github.com/qw9685/easyAI

?? Demo

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

why?

很多示例要么只有文本對(duì)話,要么沒(méi)有真正的流式體驗(yàn),要么缺少會(huì)話歷史與持久化。
EasyAI 的目標(biāo)是:打開(kāi)就能用、聊起來(lái)舒服、后續(xù)還能持續(xù)加功能。

特點(diǎn)?

1)多模型:一個(gè)入口接入主流大模型

  • 基于 OpenRouter 獲取模型列表并發(fā)起對(duì)話請(qǐng)求
  • 支持搜索/篩選/收藏模型
  • 支持查看上下文長(zhǎng)度、價(jià)格等關(guān)鍵信息,減少“盲選”

2)真流式輸出:邊生成邊顯示

  • 支持 SSE 流式響應(yīng)(非本地偽流式)
  • 回復(fù)實(shí)時(shí)增長(zhǎng),體驗(yàn)更接近 ChatGPT/Claude 類(lèi)產(chǎn)品
  • 支持可選本地打字機(jī)顯示,可在設(shè)置中開(kāi)關(guān)與調(diào)速

3)智能路由 + 自動(dòng)降級(jí):更穩(wěn)的對(duì)話鏈路

  • 路由模式支持手動(dòng)/智能,智能模式可按任務(wù)意圖與預(yù)算偏好選擇模型
  • 請(qǐng)求失敗時(shí)支持自動(dòng) fallback 重試(可配置重試次數(shù)、預(yù)算策略、錯(cuò)誤類(lèi)型)
  • 支持原生 fallback 深度配置,多模態(tài)場(chǎng)景會(huì)優(yōu)先選擇支持圖片輸入的模型

4)支持圖片:多模態(tài)輸入鏈路打通

  • 相冊(cè)多選圖片(最多 5 張)
  • 發(fā)送前可預(yù)覽/刪除
  • 聊天內(nèi)支持多圖橫向展示

5)Markdown 渲染更像聊天產(chǎn)品

  • 代碼塊/引用/列表/鏈接/圖片/HTML/數(shù)學(xué)公式等富文本展示
  • 代碼塊支持一鍵復(fù)制
  • 代碼塊支持系統(tǒng)分享導(dǎo)出

6)Prompt 模板 + 語(yǔ)音輸入:提效輸入側(cè)

  • 輸入欄內(nèi)置 Prompt 模板(會(huì)議紀(jì)要、翻譯、代碼講解、Bug 修復(fù)等)
  • 模板可一鍵注入輸入框,并聯(lián)動(dòng)推薦模型
  • 支持語(yǔ)音輸入(STT)實(shí)時(shí)轉(zhuǎn)寫(xiě)

7)對(duì)話歷史 + 本地持久化:從演示到可用

  • 支持多會(huì)話列表、重命名、置頂、刪除、搜索
  • 消息與會(huì)話本地保存,冷啟動(dòng)可恢復(fù)

8)產(chǎn)品級(jí)交互:停止生成 + 狀態(tài)一致

  • 生成中支持一鍵停止(發(fā)送按鈕切換為停止)
  • 停止后保留已顯示文本、結(jié)束 loading 并顯示時(shí)間
  • 若停止時(shí)尚未輸出正文,顯示“已停止 + 時(shí)間”(僅 UI 提示,不寫(xiě)入持久化歷史)

9)TTS 語(yǔ)音朗讀增強(qiáng):可配置 + 不錯(cuò)亂

  • 助手回復(fù)自動(dòng)朗讀(流式/非流式)
  • 流式按句子結(jié)束切段串行播放,避免亂序
  • 播放前清洗文本(過(guò)濾 Emoji、Markdown、URL 等)
  • 聊天頁(yè)支持靜音/恢復(fù)(mute,不是 stop)
  • 支持配置音色/語(yǔ)速/音高

10)可觀測(cè)性與調(diào)試能力

  • 消息級(jí)狀態(tài)欄展示 Token/耗時(shí)/成本估算
  • 可顯示運(yùn)行狀態(tài)(路由命中、fallback 重試、錯(cuò)誤分類(lèi))
  • 模型頁(yè)提供最近對(duì)話統(tǒng)計(jì)、智能路由效果統(tǒng)計(jì)、Provider 統(tǒng)計(jì)
  • 支持 phase 日志(turnId/itemId)用于排查流式與持久化問(wèn)題

設(shè)置項(xiàng)(App 內(nèi)可調(diào))

  • API Key(Keychain 存儲(chǔ))
  • 假數(shù)據(jù)模式(無(wú) Key 也可聯(lián)調(diào) UI)
  • 流式響應(yīng)開(kāi)關(guān)
  • 打字機(jī)開(kāi)關(guān)與速度/刷新率
  • 自動(dòng)降級(jí)開(kāi)關(guān)、重試次數(shù)、原生 fallback 深度、Fallback 預(yù)算策略
  • 錯(cuò)誤類(lèi)型重試開(kāi)關(guān)(限流/超時(shí)/服務(wù)不可用/網(wǎng)絡(luò))
  • 路由模式(手動(dòng)/智能)與預(yù)算偏好(免費(fèi)優(yōu)先/性價(jià)比/質(zhì)量?jī)?yōu)先)
  • 上下文策略(全部/僅文本/僅當(dāng)前輪)
  • 最大 Token 數(shù)
  • 語(yǔ)音朗讀設(shè)置(音色/語(yǔ)速/音高、靜音狀態(tài))
  • 主題主色調(diào)
  • phase 日志開(kāi)關(guān)

技術(shù)棧與結(jié)構(gòu)

  • iOS 15+ / Swift 5.9+ / Xcode 15+
  • SwiftUI + UIKit 混合實(shí)現(xiàn)
  • Networking:普通請(qǐng)求 + SSE 流式
  • Persistence:本地?cái)?shù)據(jù)庫(kù)持久化(WCDB)
  • 依賴:WCDBSwift、RxSwift、RxDataSources、SnapKitKingfisher、Markdown
  • 目錄結(jié)構(gòu):
easyAI/
├── App/                         # 應(yīng)用入口/啟動(dòng)
├── Modules/                     # 業(yè)務(wù)模塊(Chat/Conversations/Models/Settings/HistoryConversations)
└── Shared/                      # 共享層(Config/Networking/Persistence/Repositories/Security/UI/Models)

注意事項(xiàng)

  1. 調(diào)用 OpenRouter 可能產(chǎn)生費(fèi)用,建議先使用免費(fèi)模型測(cè)試
  2. 請(qǐng)關(guān)注 OpenRouter 配額與速率限制
  3. 請(qǐng)勿將 API Key 提交到公開(kāi)倉(cāng)庫(kù)
  4. 語(yǔ)音輸入依賴系統(tǒng)語(yǔ)音識(shí)別與麥克風(fēng)權(quán)限,模擬器不支持錄音,需真機(jī)測(cè)試

后續(xù)開(kāi)發(fā)

暫無(wú)。
當(dāng)前版本已覆蓋聊天產(chǎn)品常見(jiàn)關(guān)鍵鏈路,可直接作為長(zhǎng)期迭代基礎(chǔ)工程繼續(xù)擴(kuò)展(語(yǔ)音、文件、工具調(diào)用、導(dǎo)出等)。

許可證

MIT License

致謝

  • OpenRouter - 統(tǒng)一 AI 模型 API 接入
  • SwiftUI / UIKit - Apple 原生 UI 框架

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容