JamieP-205/talk-with-jamie
GitHub: JamieP-205/talk-with-jamie
一个注重隐私透明度的实验性 AI 聊天应用,基于 Netlify serverless 架构提供注册与访客会话、持久化对话及私密管理工具。
Stars: 0 | Forks: 0
# 与 Jamie 聊天
[](https://github.com/JamieP-205/talk-with-jamie/actions/workflows/ci.yml)
## 在线站点
公开实验可在 [talkwithjamie.netlify.app](https://talkwithjamie.netlify.app/) 访问。请注意,访客聊天记录将被存储,并可能由管理员查看。
## 状态
**实验性,正在积极开发中** 这是一个个人 AI 聊天实验。功能和隐私控制将持续演进。
## 概要
版本 2 还支持对旧版账户哈希、对话和管理线程的一次性迁移,支持每个账户拥有多个持久化聊天,以及基于本地保留的源导出文件构建的跨平台关系档案。其自身的部署和隐私说明位于 [`v2/README.md`](v2/README.md)。
Talk With Jamie 是一个公开声明的 AI 聊天实验,提供可选账户、访客会话、持久化对话和私密管理工具。该应用会表明自己的 AI 身份,并警告用户不要提交敏感信息。它会为注册用户和访客保存对话记录,支持速率限制,提供管理仪表板,并可以在兼容 OpenAI 的提供商和 Cohere 提供商之间进行切换。
### 当前推荐版本
推荐的部署位于 [`v2/`](v2/)。根应用为了迁移和历史记录予以保留。新开发工作在 `v2` 文件夹中进行。在完成 [MIGRATION.md](MIGRATION.md) 之前,迁移保护机制会防止意外替换现有的生产后端。
## 架构概述
该应用使用由 Netlify 提供服务的静态前端以及 serverless 后端。经过身份验证的用户和访客通过已签名的 `HttpOnly` cookie 与 Netlify Functions 交互。持久化用户、对话和速率限制存储在 Netlify Blobs 中。单独的管理界面可检索私密 context pack,并允许查看、屏蔽和删除对话。配置好的 AI 提供商(兼容 OpenAI 或 Cohere)会根据紧凑且脱敏的 context pack 生成响应。
| Talk With Jamie 架构 |
| --- |
|  |
## 隐私优先的设计选择
- 原始个人导出文件和私密源文件**绝不**会被提交或部署
- 在本地生成紧凑且脱敏的 context pack,并导入到私有的 Netlify Blob 中
- 仅供管理员查看的 context 存储在服务端;公共用户仅接收对公众安全的 context
- 界面会表明自己的 AI 身份,并警告用户不要提交敏感信息
- 会话使用带有 `SameSite=Strict` 的已签名 `HttpOnly` cookie,密码使用 scrypt 进行哈希处理
- 请求受到大小限制,经过清理,检查同源,并根据路由进行速率限制
## 我构建的功能
- 注册和访客聊天会话
- 已签名的 `HttpOnly`、`SameSite=Strict` 会话 cookie
- Scrypt 密码哈希
- 使用 Netlify Blobs 实现的持久化用户、对话、联系人和速率限制
- 带有屏蔽和删除控制的私密对话查看器
- 用于针对特定联系人构思回复的私密草稿工作区
- 可配置的兼容 OpenAI 或 Cohere 的模型提供商
- 请求大小限制、输入清理、同源检查以及特定路由的速率限制
- 自动化的单元测试、语法测试、部署防护和站点结构测试
## 关键文件
- `index.html` – 前端外壳和元数据
- `styles.css` – 响应式公共和管理界面样式
- `app.js` – 客户端状态、渲染和 API 请求
- `netlify/functions/api.js` – Netlify Function 入口点
- `netlify/functions/_lib.js` – 身份验证、存储、验证、提供商和路由逻辑
- `test/` – 针对安全敏感辅助工具和部署控制的单元测试
- `tools/` – 站点验证和生产环境迁移防护
## 技术方案
前端是一个轻量级的静态站点,与单个 Netlify Function 通信。身份验证通过已签名的同站 cookie 处理;密码使用 scrypt。该函数使用模块化库来处理存储、验证和提供商逻辑。对话和用户记录存在于 Netlify Blobs 中。本地生成且脱敏的 context pack 可帮助模型生成反映我语气的回复,而无需暴露原始消息。该项目通过单元和集成测试进行验证,并受到生产环境迁移标志的保护,以防止意外数据丢失。
## 部署
现有的 Netlify 站点(包括其 URL、环境变量和 Blob 存储)将被保留。GitHub 是唯一事实来源:生产构建使用 `main` 分支,并将 `v2` 作为 Netlify 的根目录。Pull Request 和非生产分支使用部署预览。
保留手动 CLI 部署用于恢复和受控的存储迁移,而不用于常规更改。
## 本地开发
```
npm ci
npm test
npx netlify dev
```
测试套件检查身份验证辅助工具、密码哈希、已签名会话、用户名规则、消息清理、前端语法、站点结构以及生产环境迁移保护。
## 隐私与安全说明
聊天记录将被存储并对管理员可见。应用程序警告用户不要提交敏感信息,并且在生成回复时,聊天内容将被发送到配置的模型提供商。凭证、用户导出、对话和生产数据严禁被提交。在部署后端更改之前,请查阅 [PRIVACY.md](PRIVACY.md) 和 [SECURITY.md](SECURITY.md)。
## 我的收获
这个项目教会了我如何从零开始构建一个注重隐私的 AI 聊天应用程序。我学会了为匿名用户和注册用户设计身份验证和速率限制,使用 Netlify Blobs 实现存储,管理 serverless 函数和 context pack,并在数据收集方面对用户保持透明。它还强调了在演进在线应用程序时迁移规划的重要性。
## 未来改进
- 继续优化版本 2 的检索质量和关系摘要
- 为屏幕阅读器用户添加客户端无障碍增强功能
- 探索更多 AI 提供商,并尝试检索增强生成 (RAG)
- 构建分析仪表板以了解使用模式,同时尊重用户隐私
标签:AI聊天机器人, Serverless, 多模态安全, 数据可视化, 数据持久化, 自定义脚本