Skip to main content
API 接口定义见 API,异步 Pipeline 见 Pipelines

与 kira-be 集成

Agent 系统的改动最小化:
// kira-be/src/ai/agents/index.ts

async function runAgent(userId: string, threadId: string, message: string, groupId?: string) {
  // ① 一次调用拿到所有记忆上下文
  const memory = await fetch('http://kira-memory.internal:8080/inject', {
    method: 'POST',
    body: JSON.stringify({
      entity_id: userId,
      entity_type: 'user',
      group_id: groupId,
      query: message,
    }),
  }).then(r => r.json());

  // ② 组装 system prompt
  const systemPrompt = buildSystemPrompt({
    baseInstructions,
    userProfile: memory.profile,          // 新皮层:永远在
    groupProfile: memory.group_profile,   // 群上下文
    relevantMemories: memory.memories,    // 海马体:proactive 检索
  });

  // ③ Agent 执行(还有 memory tools 可以主动调用)
  const tools = [...existingTools, memoryAddTool, memorySearchTool];
  const result = await callLLM({ systemPrompt, tools, message });

  // ④ 异步触发记忆提取(不阻塞响应)
  await nats.publish('tasks.memory.extract', {
    entity_id: userId,
    entity_type: 'user',
    group_id: groupId,              // 群上下文单独传递
    thread_id: threadId,
    messages: result.messages,
    tool_calls: result.toolCalls,
  });

  return result;
}

技术栈

组件技术说明
服务框架Bun + Hono与 kira-be 统一
向量存储LanceDB CloudServerless,已在 kira-be 使用
关系存储Supabase XL(memory schema)已有实例,边际成本为零
缓存Dragonfly(已有)Profile 热缓存
消息队列NATS JetStream(已有)Extract 任务分发
EmbeddingVoyage multimodal-3.5已在 feed pipeline 使用
提取 LLMmistral-small-latest(Mistral)便宜,结构化输出好,已有 SDK
固化 LLMmistral-small-latest(Mistral)画像生成/更新
部署Fly.io sjc与其他服务同区

分阶段落地

Phase 1: 基础(2 周)

  • kira-memory 服务骨架(Bun + Hono)
  • Supabase memory schema + profiles 表
  • LanceDB Cloud memories table
  • Memory API: add / search / update / delete
  • kira-be 集成 memory_add 和 memory_search tools
里程碑:Agent 可以通过 function calling 手动存取记忆

Phase 2: 自动提取(2 周)

  • NATS consumer: tasks.memory.extract
  • 行为特征提取器(零 LLM)
  • LLM 语义提取器(mistral-small-latest)
  • 去重逻辑(embedding 相似度 > 0.9 合并)
  • kira-be 每轮对话后发 extract 任务
里程碑:每次用户交互后自动提取和存储记忆

Phase 3: Inject + Compact Memory(2 周)

  • /inject API(核心接口)
  • Consolidator 定时任务(情景 → 画像)
  • Dragonfly profile 缓存
  • kira-be agent 改用 inject 注入记忆上下文
  • 群实体支持
里程碑:Agent 自动拥有用户记忆,无需主动查询

Phase 4: 遗忘 + 度量(2 周)

  • Decayer 定时任务
  • access_count 追踪
  • PostHog 埋点:记忆命中率、检索延迟
  • A/B 测试:有记忆 vs 无记忆的用户满意度
  • 记忆数量/质量 dashboard
里程碑:完整的记忆生命周期 + 可观测性

Phase 5: CMS 记忆管理后台(1.5 周)

  • kira-memory Admin API(/admin/* 路由 + Admin Token 鉴权)
  • memory.admin_audit_log 审计日志表
  • kira-cms Memory Admin 自定义视图(用户搜索 + Profile 展示/编辑)
  • 记忆列表(分页、类型筛选、排序)+ 详情弹窗
  • 新增 / 编辑 / 删除 / 批量删除记忆
  • 清空记忆(高危操作二次确认 + Lark 通知)
里程碑:运营人员可在 CMS 后台查看和管理任意用户的记忆数据
详见 CMS 记忆管理 设计文档。

成本估算(50k MAU)

组件月费计算
Supabase 增量~$0已付 XL
LanceDB Cloud~$20-50100 万向量,75k queries/天
Extraction LLM~$10-20mistral-small-latest,75k 次/天,~500 tokens/次
Consolidation LLM~$550k 用户 × 每天一次,~200 tokens/次
Embedding (Voyage)~$10~200k 次/月
Fly.io (kira-memory)~$10-15shared-cpu-2x, 512MB
总计~$55-100/月

NATS 配置

// Stream
const stream = 'TASKS';          // 复用现有 stream
const subject = 'tasks.memory.extract';

// Consumer
const consumer = 'memory-worker';
const ackPolicy = AckPolicy.Explicit;
const maxDeliver = 3;
const ackWait = 60_000;          // 1 分钟(提取比视频快)

环境变量

# LanceDB
LANCEDB_URI=                     # LanceDB Cloud URI
LANCEDB_API_KEY=                 # LanceDB Cloud API Key

# Supabase (复用现有)
SUPABASE_URL=                    # Supabase project URL
SUPABASE_KEY=                    # Supabase service role key

# Dragonfly (复用现有)
REDIS_URL=                       # Dragonfly URL

# NATS (复用现有)
NATS_URL=                        # NATS server URL
NATS_AUTH_TOKEN=                 # NATS auth token

# AI
VOYAGE_API_KEY=                  # Voyage embedding API
MISTRAL_API_KEY=                 # Mistral (mistral-small-latest)

# Monitoring
POSTHOG_API_KEY=                 # PostHog analytics
SENTRY_DSN=                      # Error tracking