Skip to main content

Documentation Index

Fetch the complete documentation index at: https://tech.illasoft.com/llms.txt

Use this file to discover all available pages before exploring further.

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 inngest.send({
    name: 'memory/extract.requested',
    data: {
      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 热缓存
任务编排Inngest(self-hosted,已有)Extract / Consolidate 任务分发
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 周)

  • Inngest function: memory/extract.requested
  • 行为特征提取器(零 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/月

Inngest 配置

// kira-memory/src/inngest.ts
import { Inngest, serve } from 'inngest';

export const inngest = new Inngest({ id: 'kira-memory' });

export const extractFn = inngest.createFunction(
  {
    id: 'memory-extract',
    concurrency: { limit: 1, key: 'event.data.entity_id' },  // per-entity 串行
    retries: 2,
  },
  { event: 'memory/extract.requested' },
  async ({ event, step }) => {
    const { entity_id, entity_type, thread_id, messages, tool_calls } = event.data;

    const behavior = await step.run('behavior', () => extractBehavior(...));
    const semantic = await step.run('semantic', () => extractSemantic(...));
    const deduped  = await step.run('dedupe',   () => dedupeMemories(...));
    await step.run('write', () => writeMemories(...));
  },
);

// 其他 functions: memory/consolidate.requested(Cron 触发),memory/decay.requested
Worker 通过 serve({ client: inngest, functions }) 暴露 HTTP /api/inngest 供 Inngest server 调用。

环境变量

# 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

# Inngest (复用现有 kira-inngest 自托管)
INNGEST_EVENT_KEY=               # 发事件鉴权
INNGEST_SIGNING_KEY=             # 请求签名

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

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