JamieP-205/talk-with-jamie

GitHub: JamieP-205/talk-with-jamie

一个注重隐私透明度的实验性 AI 聊天应用,基于 Netlify serverless 架构提供注册与访客会话、持久化对话及私密管理工具。

Stars: 0 | Forks: 0

# 与 Jamie 聊天 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/0ee1e77a16224800.svg)](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 架构 | | --- | | ![Talk With Jamie 架构](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/149f55c946224805.svg) | ## 隐私优先的设计选择 - 原始个人导出文件和私密源文件**绝不**会被提交或部署 - 在本地生成紧凑且脱敏的 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, 多模态安全, 数据可视化, 数据持久化, 自定义脚本