朱曦霖
联系Available for work
← 全部作品

个人项目 · 独立全栈项目

个人 AI 数字分身

从后端契约到部署运维,全栈独立开发

2026.07 — 至今线上访问源码

一个以「经我本人审核批准的资料」为唯一事实源的第一人称 AI 分身——并且刻意把安全与成本边界写成了会让服务启动失败的硬门禁。

后端回归测试通过数
72
前端组件行数
2054
前端运行时依赖数
0
支持语言数
3

Live冷启动中

一个以经我本人审核批准的资料为唯一事实源的第一人称 AI 分身。

回答由大模型生成,只依据我批准过的公开资料。它会说错话,请以简历和我本人为准。

问题

简历是静态的,招聘方看完只能靠猜。但让大模型代替自己说话有三个真问题:它会编造经历、会泄露不该说的信息、会在没人看着的时候烧掉预算。

这个项目的全部工程量,本质上都在回答这三件事。

做法

  • 后端:FastAPI,提供 Profile、JSON Chat 与 SSE 流式三套 API;DeepSeek 适配层处理取消、重试与限流
  • 前端:原生 Custom Element + Shadow DOM,零运行时依赖,一个 script 标签加一个元素即可嵌入任何页面
  • 双人格:专业人格与闲聊人格各自独立会话,记录彼此隔离,切换不串历史
  • 三语:中英德,sessionStorage 会话隔离,匿名 UUID,不建立跨设备长期记忆
  • 安全:XSS 防护、安全渲染、严格生产 CORS
  • 部署:Render Free,Docker 非 root 镜像,动态端口,健康检查,SIGTERM 优雅退出

三个值得讲的工程决策

一、门禁写成启动失败,而不是警告

生产 CORS 只接受两个域名,出现通配符、本地 origin、遗漏或额外域名都直接拒绝启动。批准版资料缺失同样拒绝启动。

这类边界写成 warning 等于没写——没人会去看日志里的黄字。

二、可观测,但不可窥探

聊天路径产生统一的匿名结构化指标,只记录白名单元数据、延迟、失败分类与 token 用量,不记录问题、回答、对话历史、身份或任何凭据。生产环境的原始对话日志由配置门禁强制关闭。指标代码本身的异常会被吞掉,不影响聊天主流程。

想知道系统好不好用,不需要读用户说了什么。

三、零付费运维

固定输出 token 上限、并发上限、每分钟限流、单 IP 每日轮次上限与单会话每日上限,五层一起兜住成本。免费套餐的休眠与冷启动是已接受的限制,不为监控新增任何付费资源。

进行中

本机 llama.cpp 加 Qwen3-4B 量化模型的自托管推理链路已打通。目前正在从零训练一个小型 decoder-only GPT,目标不是替换通用大模型,而是走完「从零训练 → 导出量化格式 → 接入同一套 OpenAI 兼容调用路径」的完整工程链路。

线上默认仍是托管 API,不因实验自动切换生产。