Skip to content

Lewis121025/PawPact

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PawPact 🤍

当三只小猫成为你们关系的翻译官 🐱✨

有时候,我们明明很爱对方,却因为表达不当而让彼此受伤。 PawPact 就像三只温柔的小猫,它们会耐心倾听、温柔翻译、细心协调, 帮助你们把那些带着刺的话语,慢慢打磨成彼此都能接受的温柔约定。

GitHub License


🌟 让我来给你讲个故事吧~

那是一个普通的周末下午,小雨和小风因为一件很小的事情吵起来了。

小风临时加班,发消息说"今天去不了了"。小雨回了一句"你总是这样",小风只回了一个"哦"。然后...就没有然后了。两个人都不说话了,但心里都憋着一股气。


就在这个时候,小雨偶然看到了一个链接:"PawPact - 让 AI 帮你翻译那些说不出口的话"。

"三只小猫?"小雨有点好奇,也有点想试试。反正现在也不知道怎么和小风说话,不如...试试看?

她点开链接,遇到了一个叫 Coco 的小猫。Coco 就像她最好的闺蜜,陪着她一起吐槽,还帮她理清楚自己到底想要什么:"所以,你其实不是生气他加班,而是生气他没有提前告诉你,让你觉得不被重视,对不对?"

小雨愣了一下,然后点了点头。对,她其实想要的是...被提前告知,被重视的感觉。

另一边,小风也收到了链接。他遇到了一个叫 Mochi 的小猫。Mochi 特别温柔,安静地听他说,然后轻轻地问:"那你有没有想过,她为什么会说'你总是这样'?也许她真正想说的是...'我希望你能提前告诉我,让我觉得被重视'?"

小风愣住了。他从来没有从这个角度想过。


就在两个人都把自己的想法理清楚之后,一个叫 Chloe 的小猫出现了。

"OK,两位宝贝,Chloe 军师上线了!"她俏皮地说,"我发现,你们俩其实都超在乎对方,只是小雨需要'安心感',小风需要'理解'。来,我有个小点子..."

就这样,在 PawPact 的帮助下,小雨和小风把那些带着情绪的话,慢慢翻译成了温柔的需求,然后找到了一份双方都能接受的共识。

他们发现,原来沟通可以这么简单——只要有人帮你把那些说不出口的话,翻译成对方能听懂的语言。

这就是 PawPact 的故事。它不是什么高深的技术,它只是...三只温柔的小猫,帮你翻译那些说不出口的话。

🐱 认识一下这三只小猫吧

Coco(可可) - 你的元气小太阳 ✨ 她就像你最好的闺蜜,永远站在你这边,陪你一起吐槽,帮你理清楚自己到底想要什么。

Mochi(麻薯) - 你的灵魂知己 🍵 她特别温柔,能听懂你没说出口的话,帮你把那些藏在心里的情绪都挖出来。

Chloe(克洛伊) - 你的 Slay 军师 💡 她最聪明,会帮你们把双方的需求都分析一遍,然后给出超级具体的建议,找到那个让双方都满意的平衡点。


📸 看看她们长什么样

第一次见面

启动页面 "欢迎来到 PawPact,让我们开始这段温柔的旅程吧~"

加入你们的对话

加入会话 "收到邀请啦!点击这里,就能和你的另一半开始对话了"

用户 A 的视角(和 Coco 聊天)

用户 A "这是你的专属空间,想说什么都可以,Coco 会陪你一起吐槽的!"

用户 B 的视角(和 Mochi 聊天)

用户 B "另一边也在认真思考呢,让我们一起找到那个平衡点吧"


🛠️ 技术架构

后端技术栈

技术 用途 版本要求
FastAPI Web 框架,提供 RESTful API 和 WebSocket 支持 >=0.112.0
SQLAlchemy ORM 框架,管理数据库模型和关系 >=2.0.30
PostgreSQL/SQLite 关系型数据库,存储用户数据、会话、记忆等 -
Redis 内存数据库,用于缓存和实时状态管理 >=5.0.7
WebSocket 双向实时通信协议,支持多客户端连接 -
LangChain AI 应用开发框架,集成大语言模型 >=0.2.6
OpenAI/Gemini API 大语言模型服务,提供 AI 对话能力 >=1.35.10
Alembic 数据库迁移工具,管理 schema 变更 >=1.13.1

前端技术栈

技术 用途 版本要求
Next.js 14 React 框架,提供 SSR、路由、API 路由等功能 14.2.33
TypeScript 类型安全的 JavaScript 超集 5.4.5
Framer Motion 动画库,提供流畅的交互动画 ^11.18.2
SWR 数据获取库,提供缓存、重新验证等功能 ^2.2.5
Zustand 轻量级状态管理库 ^4.5.5
PWA 渐进式 Web 应用,支持离线使用和安装 -

系统架构

┌─────────────┐         ┌─────────────┐
│   Frontend  │ ◄─────► │   Backend   │
│  (Next.js)  │  HTTP   │  (FastAPI)  │
└─────────────┘  WS     └─────────────┘
                             │
                ┌────────────┼────────────┐
                │            │            │
          ┌─────▼──┐   ┌────▼──┐   ┌────▼──┐
          │Postgres│   │ Redis │   │  AI   │
          │   DB   │   │ Cache │   │  API  │
          └────────┘   └───────┘   └───────┘

🎯 核心功能说明

1. 多智能体协作机制

系统采用三代理架构,每个代理负责不同的角色:

  • Coco Agent:负责与 User A 进行 1v1 私密对话,扮演"元气小太阳"和"第一 BFF"的角色
  • Mochi Agent:负责与 User B 进行 1v1 私密对话,扮演"灵魂知己"和"心灵港湾"的角色
  • Chloe Agent:作为协调者,接收 Coco 和 Mochi 的反馈,生成面向双方的共识草案

2. 共识草案状态机

系统实现了一个五阶段状态机来管理共识达成流程:

LISTENING → TRANSLATING → DRAFTING → REVIEWING → APPLYING
  • LISTENING:收集双方原始输入
  • TRANSLATING:将情绪化表达转化为结构化需求
  • DRAFTING:生成初始共识草案
  • REVIEWING:双方审查并提出修改意见
  • APPLYING:达成最终共识并保存到共享记忆

3. 记忆系统

系统维护两种类型的记忆:

  • 私有记忆(PrivateMemory):每个用户与对应代理的私密对话记录,仅对应用户可见
  • 共享记忆(SharedMemory):双方共同认可的共识和重要时刻,保存在共享花园中

记忆支持向量嵌入和语义检索,可以基于相似度查找历史记忆。

4. 实时通信

  • 使用 WebSocket 实现双向实时通信
  • 支持多客户端同时连接(每个用户独立连接)
  • 实现状态同步机制,确保双方看到一致的会话状态

🚀 快速开始

方式一:Docker Compose 部署(推荐)

前置要求

  • Docker >= 20.10
  • Docker Compose >= 2.0
  • 8GB+ 可用内存
  • 10GB+ 可用磁盘空间

部署步骤

  1. 克隆仓库
git clone https://github.com/Lewis121025/PawPact.git
cd PawPact
  1. 配置环境变量

在项目根目录创建 .env 文件:

OPENAI_API_KEY=your-api-key-here
OPENAI_MODEL=gemini-2.5-flash
  1. 启动服务
docker-compose up -d
  1. 运行数据库迁移
docker-compose exec backend alembic upgrade head
  1. 访问应用

Docker 管理命令

# 启动所有服务
docker-compose up -d

# 查看服务日志
docker-compose logs -f [service_name]

# 停止所有服务
docker-compose down

# 停止并删除数据卷(会清除所有数据)
docker-compose down -v

# 重建镜像
docker-compose build --no-cache [service_name]

# 进入容器
docker-compose exec backend bash
docker-compose exec frontend sh

方式二:本地开发环境

前置要求

  • Python 3.11+
  • Node.js 20+
  • PostgreSQL 15+(可选,默认使用 SQLite)
  • Redis 7+(可选,用于缓存优化)

后端设置

  1. 创建虚拟环境
cd backend
python -m venv .venv

# Windows
.venv\Scripts\activate

# Linux/macOS
source .venv/bin/activate
  1. 安装依赖
pip install -e .
pip install -r requirements.txt
  1. 配置环境变量

backend 目录创建 .env 文件:

DATABASE_URL=sqlite:///./pawpact.db
REDIS_URL=redis://localhost:6379/0
OPENAI_API_KEY=your-api-key-here
OPENAI_MODEL=gemini-2.5-flash
ALLOWED_ORIGINS=["http://localhost:3000"]
  1. 初始化数据库
alembic upgrade head
  1. 启动后端服务
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

前端设置

  1. 安装依赖
cd frontend
npm install
  1. 配置环境变量

frontend 目录创建 .env.local 文件:

NEXT_PUBLIC_BACKEND_URL=http://localhost:8000/api/v1
NEXT_PUBLIC_BACKEND_WS=ws://localhost:8000
NEXT_PUBLIC_APP_URL=http://localhost:3000
  1. 启动前端服务
npm run dev

使用启动脚本

Windows:

start.bat

Linux/macOS:

chmod +x start.sh
./start.sh

详细说明请参考 QUICK_START.md


📁 项目结构

PawPact/
├── backend/                    # FastAPI 后端服务
│   ├── app/
│   │   ├── models/            # SQLAlchemy 数据模型
│   │   │   ├── user.py        # 用户模型
│   │   │   └── memory.py      # 记忆模型(私有/共享)
│   │   ├── schemas/           # Pydantic 数据验证
│   │   │   ├── user.py
│   │   │   ├── memory.py
│   │   │   └── draft.py
│   │   ├── routers/           # API 路由
│   │   │   ├── health.py      # 健康检查
│   │   │   ├── sessions.py    # 会话管理
│   │   │   ├── memory.py      # 记忆管理
│   │   │   ├── drafts.py      # 共识草案
│   │   │   ├── garden.py       # 共享花园
│   │   │   └── ws.py           # WebSocket 路由
│   │   ├── services/          # 业务逻辑层
│   │   │   ├── agents.py      # 代理编排器
│   │   │   ├── agent_roles.py # 代理角色定义(Coco/Mochi/Chloe)
│   │   │   ├── embeddings.py  # 向量嵌入服务
│   │   │   └── drafts.py      # 草案状态机
│   │   ├── config.py          # 配置管理
│   │   ├── database.py        # 数据库连接
│   │   ├── dependencies.py    # 依赖注入
│   │   └── main.py            # 应用入口
│   ├── alembic/              # 数据库迁移
│   │   ├── versions/         # 迁移版本
│   │   └── env.py            # Alembic 环境配置
│   ├── tests/                # 测试文件
│   ├── Dockerfile            # 后端 Docker 镜像
│   ├── requirements.txt      # Python 依赖
│   └── pyproject.toml        # 项目配置
│
├── frontend/                  # Next.js 前端应用
│   ├── src/
│   │   ├── app/              # Next.js App Router
│   │   │   ├── page.tsx      # 首页
│   │   │   ├── join/         # 加入会话页面
│   │   │   ├── session/      # 会话页面
│   │   │   └── garden/       # 共享花园页面
│   │   ├── components/       # React 组件
│   │   │   ├── AgentChatPanel.tsx    # 代理聊天面板
│   │   │   ├── ConsensusDraftPanel.tsx # 共识草案面板
│   │   │   ├── SharedGardenCard.tsx   # 共享花园卡片
│   │   │   └── ...
│   │   ├── hooks/            # 自定义 Hooks
│   │   │   └── useAgentChannel.ts    # WebSocket 连接
│   │   ├── lib/              # 工具函数
│   │   │   ├── api.ts        # API 客户端
│   │   │   └── ws.ts         # WebSocket 客户端
│   │   └── types/            # TypeScript 类型定义
│   ├── public/               # 静态资源
│   ├── Dockerfile            # 前端 Docker 镜像
│   └── package.json          # Node.js 依赖
│
├── Example/                  # 示例图片和 GIF
├── docker-compose.yml        # Docker Compose 配置
└── README.md                 # 项目文档

🔧 环境变量配置

后端环境变量

变量名 类型 必需 默认值 说明
DATABASE_URL string sqlite:///./pawpact.db 数据库连接字符串。支持 SQLite 和 PostgreSQL
REDIS_URL string redis://localhost:6379/0 Redis 连接字符串,用于缓存和实时状态
OPENAI_API_KEY string - OpenAI 或 Gemini API 密钥
OPENAI_API_BASE string - API 基础 URL(用于 OpenRouter 等代理服务)
OPENAI_MODEL string gemini-2.5-flash 使用的 AI 模型名称
ALLOWED_ORIGINS JSON array ["http://localhost:3000"] CORS 允许的来源列表
PROJECT_NAME string PawPact Backend 项目名称
ENVIRONMENT string development 运行环境(development/production)

前端环境变量

变量名 类型 必需 默认值 说明
NEXT_PUBLIC_BACKEND_URL string - 后端 API 基础 URL
NEXT_PUBLIC_BACKEND_WS string - WebSocket 服务器地址
NEXT_PUBLIC_APP_URL string - 前端应用 URL(用于生成分享链接)

🧪 测试

后端测试

cd backend
pytest

运行特定测试文件:

pytest tests/test_sessions_flow.py
pytest tests/test_websocket_agents.py

前端测试

cd frontend
npm run lint

📚 API 文档

启动后端服务后,可以通过以下地址访问 API 文档:

主要 API 端点

  • GET /api/v1/health - 健康检查
  • POST /api/v1/sessions - 创建新会话
  • GET /api/v1/sessions/{session_id} - 获取会话信息
  • GET /api/v1/memories/private - 获取私有记忆
  • GET /api/v1/memories/shared - 获取共享记忆
  • POST /api/v1/drafts - 创建共识草案
  • GET /api/v1/garden - 获取共享花园数据
  • WS /ws/agent/{role}/{session_id} - WebSocket 连接

🤝 贡献指南

我们欢迎所有形式的贡献!无论是报告 bug、提出功能建议,还是提交代码,都是对我们的帮助。

贡献流程

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

代码规范

  • 后端:遵循 PEP 8,使用 ruff 进行代码检查
  • 前端:遵循 ESLint 规则,使用 prettier 格式化代码
  • 提交信息:使用清晰的提交信息,遵循 Conventional Commits

🙏 致谢

  • 感谢所有使用和贡献这个项目的开发者
  • 特别感谢 AI 模型提供商(OpenAI、Google Gemini)提供的强大能力
  • 感谢每一个相信技术可以带来温暖的人

📞 联系方式


用 AI 的温柔,化解关系的坚冰 ❤️

有时候,我们需要的不是对错,而是理解 有时候,我们需要的不是改变,而是翻译 有时候,我们需要的不是完美,而是共识

Made with ❤️ by Lewis

愿每一段关系,都能在温柔中找到平衡 🌸

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors