AI 女友 App 开发:虚拟恋人 API 技术架构完整拆解

AI 陪伴产品的核心是四层:人设 Prompt、分层记忆、内容审核、模型路由,全部可以架在一个 OpenAI 兼容网关上。kkaiapi 一个 Key 调 DeepSeek、GLM、Kimi、Claude 全系模型,按量计费,本文给出可落地的架构、代码和按 MAU 的成本表。

先说结论:四层架构,一个网关,一天搭出原型

底座接入只需一步:所有模型统一走 OpenAI 兼容端点,base_url 填 https://api.kkaiapi.com/v1,SillyTavern、JanitorAI 这类要求完整端点的工具填 https://api.kkaiapi.com/v1/chat/completions。换模型只改 model 字段。下面按层展开。

  • 人设层:结构化角色卡拼成 system prompt,决定角色一致性,是留存的生命线
  • 记忆层:对话窗口、会话摘要、长期事实库三级,决定用户觉得"她记不记得我"
  • 审核层:输入输出双向过滤,前置敏感词加模型侧约束加人工抽查,从第一天就要有
  • 路由层:按场景分发模型,闲聊走便宜模型,关键剧情走强模型,成本直接砍半

人设 Prompt:角色一致性决定留存

陪伴产品卸载理由第一名是"她变了"。人设不要写成一段自由发挥的简介,要做成结构化角色卡:身份、说话风格、口头禅、边界、与用户的关系阶段,每个字段单独存库,升级人设时只改字段不重写。 每轮请求动态拼装 system prompt:角色卡加长期事实加最近上下文。Python 示例:

from openai import OpenAI

client = OpenAI(
    api_key="sk-...",
    base_url="https://api.kkaiapi.com/v1",
)

def build_system_prompt(persona: dict, facts: list[str]) -> str:
    return f"""你将扮演{persona['name']},{persona['identity']}。
说话风格:{persona['style']}。称呼用户为{persona['nickname']}。
当前关系阶段:{persona['stage']}。始终保持角色设定和说话风格。
关于用户的已知事实:{'; '.join(facts)}"""

resp = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[
        {"role": "system", "content": build_system_prompt(persona, facts)},
        *recent_messages,
        {"role": "user", "content": user_input},
    ],
    temperature=0.9,
)

记忆系统:三层设计,"记得你"才有付费理由

摘要任务本身也走 deepseek-v4-flash,成本可以忽略;事实抽取放夜间批量跑。kimi-k2.6、glm-5 这类长上下文模型可以放宽对话窗口,但不要用长上下文替代记忆系统,把全部历史塞进 prompt 会让 token 成本失控。

审核层与模型路由:一个中间件同时解决合规和成本

审核是双向的:用户输入先过敏感词表和分类器,模型输出再过一遍才落库返回,全部留痕备查。路由按场景分流:日常闲聊量大,走 deepseek-v4-flash;长剧情和多角色场景要一致性,走 glm-5 或 kimi-k2.6;写信、日记这类文笔向普通创作可以走 claude-sonnet-4-6。Node 示例:

import OpenAI from 'openai'

const client = new OpenAI({
  apiKey: process.env.KKAIAPI_KEY,
  baseURL: 'https://api.kkaiapi.com/v1',
})

const ROUTES = {
  chat: 'deepseek-v4-flash', // 日常闲聊,量最大
  story: 'glm-5', // 长剧情,角色一致性
  letter: 'claude-sonnet-4-6', // 文笔向普通创作
}

async function reply(scene, messages) {
  const inputOk = await moderate(messages.at(-1).content)
  if (!inputOk) return { blocked: true }

  const resp = await client.chat.completions.create({
    model: ROUTES[scene] ?? ROUTES.chat,
    messages,
    max_tokens: 500,
  })
  const text = resp.choices[0].message.content
  const outputOk = await moderate(text)
  return { blocked: !outputOk, text }
}

常见问题

AI 女友 App 用什么模型效果最好?

角色扮演场景社区首选 DeepSeek V4 系,人设贴合度和性价比都最好;长剧情用 GLM-5,超长对话用 Kimi。Claude 中文文笔最好但内容政策严格,只适合写信、日记等普通创作向场景。不建议用 Qwen 做角色扮演。

虚拟恋人 API 怎么接入自己的 App?

用任意 OpenAI SDK,base_url 填 https://api.kkaiapi.com/v1,model 填目标模型 ID 即可。JanitorAI、SillyTavern 这类要求完整端点的工具填 https://api.kkaiapi.com/v1/chat/completions。一个 Key 可以调全部模型,方便做路由。

AI 陪伴产品的内容审核怎么做?

三道防线:输入侧敏感词表加分类器前置拦截;模型侧在 system prompt 里写明边界约束;输出侧再过一遍审核才返回,全程留痕。另外按深度合成规定对生成内容做显著标识,并保留人工抽查通道。

做 AI 女友 App 需要什么资质?

至少四项:用户实名认证、未成年人保护机制、内容审核与生成内容标识、生成式 AI 算法备案。上架国内应用商店会核验备案号。具体资质因产品形态而异,立项阶段就应咨询法务。

一个用户一个月大概消耗多少 token?

按月均 300 轮、每轮输入 2000 输出 300 token 估算,单用户月消耗约 60 万输入加 9 万输出 token。重度用户可以翻几倍,所以路由层很重要,闲聊流量必须落在便宜模型上。

可以用 Claude 给虚拟恋人写台词吗?

可以,文笔是所有模型里最好的,适合信件、日记、剧情旁白等普通创作内容。但 Anthropic 政策禁止露骨内容,路由层应把边界模糊的流量分给其它模型或直接拦截。