Skip to main content

技术栈

类别技术说明
运行时Bun高性能 JavaScript 运行时
Web 框架Hono轻量级、高性能 Web 框架
AI SDKVercel AI SDKAI 对话和工具调用
数据库SupabasePostgreSQL + 实时功能
缓存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
libs
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:
const userId = c.get("jwtPayload")?.sub;

数据模型

表名说明
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 对话流程

1

Client 发起请求

POST /agent/streaming
2

验证身份

验证 JWT → 获取用户订阅等级
3

调用 AI

使用 Vercel AI SDK streamText (根据等级选择模型)
4

执行工具

流式执行 → 调用 Tools → 返回结果
5

返回响应

SSE 流式返回 tool calls 和结果
6

保存消息

消息在 Agent onFinish 回调中自动持久化(服务端保存)

Stripe Webhook 流程

1

接收事件

Stripe 事件 → POST /billing/webhook
2

验证签名

使用 Stripe Webhook Secret 验证请求合法性
3

处理事件

根据事件类型处理:
  • customer.subscription.created → 设置订阅和 Credits
  • customer.subscription.updated → 处理续费/升级
  • customer.subscription.deleted → 降级到免费
  • checkout.session.completed → 处理加油包购买
4

更新数据

更新 user_profiles
5

追踪事件

PostHog 事件追踪

国际化

使用 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)

概述

使用 OpenAI omni-moderation-latest 多模态审核模型,对用户生成的图片和文本内容进行安全检查。模块位于 src/ai/libs/moderation.ts

审核函数

函数输入返回值用途
moderateImageUrl(imageId)图片 IDtrue=通过, false=拦截Feed 发布时审核图片
moderateText(text)文本内容true=通过, false=拦截Feed 发布时审核文本
detectNsfw({text?, imageId?})文本和/或图片true=NSFW, false=安全视频 Provider 路由决策

阈值配置

审核覆盖 13 个 OpenAI moderation category,使用自定义分数阈值(而非二进制 flag):
Category阈值说明
sexual0.2色情内容(较敏感)
sexual/minors0.01未成年色情(极敏感)
self-harm0.7自残
self-harm/instructions0.7自残指导
self-harm/intent0.7自残意图
violence0.7暴力
violence/graphic0.7血腥暴力
harassment0.7骚扰
harassment/threatening0.7威胁性骚扰
hate0.7仇恨言论
hate/threatening0.7威胁性仇恨
illicit0.7非法内容
illicit/violent0.7暴力非法内容
sexual (0.2) 和 sexual/minors (0.01) 阈值远低于其他类别 (0.7),对色情内容采取更严格的审核标准。

使用场景

Thread Flag 系统

当审核检测到 NSFW 内容时,会在 threads 表的 flag 数组字段中添加 "nsfw" 标记:
// flag 字段为 text[] 类型
// 更新时去重合并
const updatedFlag = [...new Set([...(thread.flag ?? []), "nsfw"])];
await supabase.from("threads").update({ flag: updatedFlag }).eq("id", threadId);
被标记的 thread 中的 Feed 在非作者查看时会被隐藏。

部署

  • 运行在 Fly.io
  • 端口: 8080
  • 优雅关闭: 处理 SIGINT/SIGTERM