Kryzz AI 為何在 README 説明「私人」Android AI 應用會把首則訊息送往意料之外的模型
My "private" Android AI app sends your first message somewhere you might not expect. Here's why I wrote that in the README
Kryzz AI 會透過用戶的 OpenRouter key,把新對話首則訊息的首 1,500 個字元傳送至 Gemini 2.5 Flash Lite 生成標題,並與正式回覆並行處理。若標題請求失敗,應用程式會改用本機標題;這項額外請求可能使用用戶未選擇的模型。README 現已説明哪些資料留在手機、哪些資料會送出,以及已關閉的功能。
When I rewrote the README for Kryzz AI this week, the hardest section to write wasn't the feature list. It was one paragraph in the privacy section about chat titles.
Kryzz AI is an MIT-licensed Android app (Kotlin + Jetpack Compose) for chat, voice and agent tasks. Chats, memory, files and API keys stay on the phone. Keys are encrypted with AES-GCM under a non-exportable Android Keystore key, and there's no analytics, no telemetry and no bundled keys. The models themselves are hosted, not on-device: you bring your own OpenRouter key and your prompts go to whichever provider you pick.
So far, so normal for a "bring your own key" app. But there's one extra request that's easy to miss.
The auto-title request
When you start a new chat, the app names it for you. To do that it sends the first part of your first message (up to 1,500 characters) to a small model, Gemini 2.5 Flash Lite, through your OpenRouter key. It runs in parallel with the real answer, and if it fails the app falls back to a local title.
It's the same key and the same route as the rest of the chat, so it's not a hidden server of mine. But it is a second request to a model you may not have picked, and if you chose a specific provider for privacy reasons you deserve to know that.
Why I put it in the README instead of burying it
I could have left it out. Nobody would have noticed for a while. But "no telemetry" only means something if the list of what does leave the phone is complete. A privacy section that's 95% honest is basically marketing.
So the README now says, in plain words:
- what stays on the phone (chats, memory, library, keys, generated files)
- what leaves it (your prompts to the provider you choose, the title request above, web search and allowed page fetches when the agent uses them)
- what's switched off (Android backup, device transfer, cleartext traffic, HTTP logging)
- the mic is only on during a voice session, and recorded audio is deleted after transcription
What would you do?
Two possible changes I can see:
- A setting to turn auto-titles off (local titles only).
- Sending the title request to the same model the user picked for the chat.
If you've built a BYOK app: did you hit this kind of "small side request" problem, and how did you handle it?
Links
- Repo: https://github.com/kriddss3/kryzz-ai
- Download (signed release APK, ~19 MB, Android 9+): https://github.com/kriddss3/kryzz-ai/releases/latest
Honest caveats: you need your own OpenRouter key, it's not on the Play Store or F-Droid yet, and the new signed release build has only been checked for a clean launch on an Android 15 emulator so far. Bug reports welcome.
來源:DEV Community · dev.to