技术栈
| 类别 | 技术 | 说明 |
|---|---|---|
| 运行时 | Bun | 高性能 JavaScript 运行时 |
| Web 框架 | Hono | 轻量级、高性能 Web 框架 |
| AI SDK | Vercel AI SDK | AI 对话和工具调用 |
| 数据库 | Supabase | PostgreSQL + 实时功能 |
| 缓存 | Dragonfly DB | 分布式缓存 |
| AI 模型 | OpenAI, Google, xAI, Mistral | 多模型支持 |
| 图片生成 | BytePlus, FAL, OpenAI, Google 等 | 多 Provider 图片生成 |
| 视频生成 | BytePlus/Seedance, xAI/Grok, Google/Veo | 视频生成服务 |
| 音乐生成 | Suno (unofficial / instrumental / add_vocals) | 音乐生成服务 |
| 消息队列 | NATS JetStream | 异步视频/音乐任务 |
| 分析 | PostHog | 用户行为分析 |
| 支付 | Stripe | 订阅和支付处理 |
| 监控 | BetterStack (日志/指标/Sentry兼容) | 可观测性和错误追踪 |
项目结构
src
bootstrap.ts
index.ts
lib.ts
hono
middleware
agent
thread
user
feed
billing
image
images
video
music
download
messages
filter
like
publish
rewind
mail
sitemap
op
support
version
ai
agents
tools
workflow
libs
db
lib
types
analytics
telemetry
| 目录 | 说明 |
|---|---|
index.ts | 主入口,Hono 服务器设置 |
lib.ts | 核心单例 (PostHog, Supabase, i18n) |
hono/ | HTTP 路由处理 |
ai/ | AI 系统 (Agent, Tools) |
types/ | 类型定义和 Zod Schema |
hono/messages/ | 消息相关 API 路由 |
analytics/ | PostHog 事件追踪 |
telemetry/ | OpenTelemetry 配置 |
核心架构
AI Agent 系统
Kira 使用 Vercel AI SDK 构建 AI Agent: Agent 配置 (src/ai/agents/index.ts)
- lite/nova/crazy/ultra 模式统一使用
pa/grok-4-1-fast-reasoning(Novita) - 支持 lite、nova、crazy、ultra 四种模式
- 通过 SSE 流式返回响应
src/ai/tools/)
- 图片生成:
generateImageWithAI - 图片读取:
readImage - 图片编辑:
imageEdit,eraser,inpaintWithPrompt,inpaintWithImage,expand,upscale,redux - 图片初始化:
initializeWithImage - 背景处理:
removeBackground,replaceBackgroundWithPrompt,replaceBackgroundWithImage - 裁剪/扩展:
getAutoCropResultFromUser,getExpandMaskImageFromUser - 视频生成:
generateVideo(t2v / i2v,支持 Seedance / Grok / Veo) - 音乐生成:
generateMusic,generateInstrumental,addVocals(Suno) - 搜索:
googleSearch - 用户交互:
getMaskImageFromUser,getFilterChoiceFromUser
图片处理管道
图片存储结构:
{userId}/{threadId}/{imageId}视频处理管道
视频生成为异步流程,通过 NATS JetStream 队列和 WebSocket 实时推送。详见 Video Pipeline。音乐处理管道
音乐生成同样为异步流程,支持歌曲生成、器乐生成和添加人声。详见 Music Pipeline。认证系统
所有受保护的路由使用 JWT 中间件验证 Supabase JWT Token:数据模型
| 表名 | 说明 |
|---|---|
threads | 对话容器 |
messages | 用户和 AI 消息 |
thread_version | 版本快照(图片/视频/音频) |
user_profiles | 用户数据和订阅等级 |
feed | 社交 Feed |
user_liked_feeds | 用户点赞 Feed |
filters | 预设滤镜 |
user_liked_filters | 用户收藏滤镜 |
styles | 风格预设 (已废弃) |
styles_embedding | 风格向量嵌入 (已废弃) |
user_starred_styles | 用户收藏风格 (已废弃) |
announcements | 系统公告 |
auth_backgrounds | 登录页背景图 |
通信流程
AI 对话流程
Stripe Webhook 流程
处理事件
根据事件类型处理:
customer.subscription.created→ 设置订阅和 Creditscustomer.subscription.updated→ 处理续费/升级customer.subscription.deleted→ 降级到免费checkout.session.completed→ 处理加油包购买
国际化
使用getI18nValue(key, locale, format) 支持 12 种语言:
- en-US, zh-CN, zh-TW, ja-JP, ko-KR
- de-DE, fr-FR, es-ES, pt-PT, it-IT
- ru-RU, ms-MY
内容审核 (Content Moderation)
概述
使用 OpenAIomni-moderation-latest 多模态审核模型,对用户生成的图片和文本内容进行安全检查。模块位于 src/ai/libs/moderation.ts。
审核函数
| 函数 | 输入 | 返回值 | 用途 |
|---|---|---|---|
moderateImageUrl(imageId) | 图片 ID | true=通过, false=拦截 | Feed 发布时审核图片 |
moderateText(text) | 文本内容 | true=通过, false=拦截 | Feed 发布时审核文本 |
detectNsfw({text?, imageId?}) | 文本和/或图片 | true=NSFW, false=安全 | 视频 Provider 路由决策 |
阈值配置
审核覆盖 13 个 OpenAI moderation category,使用自定义分数阈值(而非二进制 flag):| Category | 阈值 | 说明 |
|---|---|---|
sexual | 0.2 | 色情内容(较敏感) |
sexual/minors | 0.01 | 未成年色情(极敏感) |
self-harm | 0.7 | 自残 |
self-harm/instructions | 0.7 | 自残指导 |
self-harm/intent | 0.7 | 自残意图 |
violence | 0.7 | 暴力 |
violence/graphic | 0.7 | 血腥暴力 |
harassment | 0.7 | 骚扰 |
harassment/threatening | 0.7 | 威胁性骚扰 |
hate | 0.7 | 仇恨言论 |
hate/threatening | 0.7 | 威胁性仇恨 |
illicit | 0.7 | 非法内容 |
illicit/violent | 0.7 | 暴力非法内容 |
sexual (0.2) 和 sexual/minors (0.01) 阈值远低于其他类别 (0.7),对色情内容采取更严格的审核标准。使用场景
Thread Flag 系统
当审核检测到 NSFW 内容时,会在threads 表的 flag 数组字段中添加 "nsfw" 标记:
部署
- 运行在 Fly.io
- 端口: 8080
- 优雅关闭: 处理 SIGINT/SIGTERM