説明なし

copilot-swe-agent[bot] a1c9124606 Initial plan 1 ヶ月 前
backend b637b73cac 🎉 初始提交: AI角色对话App完整项目 1 ヶ月 前
docs ad86027ff3 chore: 从版本控制中删除.claude配置目录 1 ヶ月 前
mobile b637b73cac 🎉 初始提交: AI角色对话App完整项目 1 ヶ月 前
.gitattributes b637b73cac 🎉 初始提交: AI角色对话App完整项目 1 ヶ月 前
.gitignore ad86027ff3 chore: 从版本控制中删除.claude配置目录 1 ヶ月 前
LICENSE b637b73cac 🎉 初始提交: AI角色对话App完整项目 1 ヶ月 前
README.md b637b73cac 🎉 初始提交: AI角色对话App完整项目 1 ヶ月 前
docker-compose.yml b637b73cac 🎉 初始提交: AI角色对话App完整项目 1 ヶ月 前

README.md

AI角色对话App - 完整项目

一个支持多AI平台、好感度系统和动态主动消息的移动端AI对话应用。

🌟 核心功能

  • 多AI平台支持:OpenAI GPT、Claude、通义千问、文心一言
  • 自定义AI角色:创建个性化AI角色(性格、背景、语言)
  • 好感度系统:-100~100分范围,7个等级(厌恶→恋人)
  • 动态主动消息:根据好感度自动调整发送频率(1-360分钟)
  • 多轮对话:独立对话历史,支持上下文记忆
  • 用户自管API Key:安全加密存储用户的AI平台密钥
  • 国际化支持:多语言、多时区

📁 项目结构

phoneapp/
├── backend/                  # FastAPI后端
│   ├── app/
│   │   ├── api/             # API路由
│   │   │   ├── auth.py      # 认证API
│   │   │   ├── characters.py # 角色管理API
│   │   │   ├── conversations.py # 对话API
│   │   │   └── affection.py # 好感度API
│   │   ├── models/          # SQLAlchemy模型
│   │   │   ├── user.py
│   │   │   ├── character.py
│   │   │   ├── conversation.py
│   │   │   ├── affection.py
│   │   │   └── proactive_message.py
│   │   ├── schemas/         # Pydantic Schema
│   │   ├── services/        # 业务逻辑
│   │   │   ├── llm_provider.py        # AI适配层
│   │   │   ├── affection_service.py   # 好感度服务
│   │   │   └── proactive_message_service.py
│   │   ├── core/            # 核心功能
│   │   │   ├── config.py    # 配置管理
│   │   │   ├── database.py  # 数据库连接
│   │   │   ├── redis.py     # Redis连接
│   │   │   └── security.py  # 安全(JWT、加密)
│   │   ├── tasks/           # Celery任务
│   │   │   ├── celery_app.py
│   │   │   └── proactive_tasks.py
│   │   └── main.py          # FastAPI应用入口
│   ├── alembic/             # 数据库迁移
│   ├── requirements.txt
│   ├── Dockerfile
│   └── .env.example
├── mobile/                   # React Native前端(待实现)
├── docker-compose.yml       # Docker编排
└── README.md                # 项目文档

🚀 快速开始

方式一:使用Docker(推荐)

  1. 复制环境变量文件

    cd backend
    cp .env.example .env
    
  2. 生成加密密钥

    # 在Python中生成32字节密钥
    python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
    

    将生成的密钥复制到.env文件的ENCRYPTION_KEY字段。

  3. 启动所有服务

    docker-compose up -d
    
  4. 运行数据库迁移

    docker-compose exec backend alembic upgrade head
    
  5. 访问应用

  6. API文档:http://localhost:8000/docs

  7. API:http://localhost:8000

方式二:本地开发

前置要求

  • Python 3.11+
  • PostgreSQL 15+
  • Redis 7+

步骤

  1. 安装Python依赖

    cd backend
    python -m venv venv
    source venv/bin/activate  # Windows: venv\Scripts\activate
    pip install -r requirements.txt
    
  2. 配置环境变量

    cp .env.example .env
    # 编辑.env文件,填写数据库连接等信息
    
  3. 运行数据库迁移

    alembic upgrade head
    
  4. 启动FastAPI服务

    uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
    
  5. 启动Celery Worker(新终端)

    celery -A app.tasks.celery_app worker --loglevel=info
    
  6. 启动Celery Beat(新终端)

    celery -A app.tasks.celery_app beat --loglevel=info
    

📖 API使用指南

1. 用户注册

POST /api/auth/register
Content-Type: application/json

{
  "username": "testuser",
  "email": "test@example.com",
  "password": "password123"
}

2. 用户登录

POST /api/auth/login
Content-Type: application/x-www-form-urlencoded

username=testuser&password=password123

响应:

{
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
  "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
  "token_type": "bearer"
}

3. 配置API Key

POST /api/auth/api-keys
Authorization: Bearer {access_token}
Content-Type: application/json

{
  "provider": "openai",
  "api_key": "sk-proj-...",
  "model": "gpt-3.5-turbo"
}

4. 创建AI角色

POST /api/characters
Authorization: Bearer {access_token}
Content-Type: application/json

{
  "name": "小雪",
  "personality": "温柔体贴,善解人意",
  "background_story": "大学文学系学生,喜欢阅读和写作",
  "avatar_url": "https://example.com/avatar.jpg",
  "language": "zh",
  "llm_provider": "openai",
  "llm_model": "gpt-3.5-turbo",
  "config": {
    "temperature": 0.9
  }
}

5. 发送消息

POST /api/conversations/{conversation_id}/messages
Authorization: Bearer {access_token}
Content-Type: application/json

{
  "content": "今天天气真好!",
  "stream": false
}

响应:

{
  "id": 123,
  "conversation_id": 1,
  "role": "assistant",
  "content": "是呀!这样的好天气适合出去走走,你有什么计划吗?",
  "tokens_used": 28,
  "is_proactive": false,
  "created_at": "2025-12-07T10:30:00Z",
  "affection_change": 2
}

6. 查看好感度

GET /api/affection/{character_id}
Authorization: Bearer {access_token}

响应:

{
  "character_id": 1,
  "current_score": 65,
  "level": "朋友",
  "next_level_score": 80,
  "total_interactions": 127,
  "last_interaction": "2025-12-07T10:30:00Z",
  "recent_changes": [
    {
      "id": 1,
      "score_change": 3,
      "reason": "用户分享积极情绪",
      "created_at": "2025-12-07T10:30:00Z"
    }
  ]
}

🎯 核心功能详解

好感度系统

等级划分(-100 ~ 100分):

  • 厌恶 (-100 ~ -60):AI冷淡、距离感
  • 陌生 (-60 ~ -20):礼貌但疏远
  • 普通 (-20 ~ 20):中性态度
  • 熟人 (20 ~ 50):友好
  • 朋友 (50 ~ 80):亲近
  • 挚友 (80 ~ 95):深度信任
  • 恋人 (95 ~ 100):极度亲密

好感度变化因素

  • 积极对话:+2 ~ +5
  • 中性对话:+1
  • 消极对话:-1 ~ -3
  • 长时间沉默:-2(每天)
  • 深夜聊天:+2
  • 分享秘密:+5

动态主动消息机制

触发规则(根据好感度):

好感度 检测间隔 随机发送间隔
90-100分 用户3分钟无对话 1-10分钟
80-89分 用户10分钟无对话 10-30分钟
60-79分 用户30分钟无对话 30-120分钟
40-59分 用户2小时无对话 2-6小时
<40分 不发送主动消息 -

实现方式

  • Celery Beat每分钟扫描一次
  • 检查用户活跃状态表(user_activity
  • 根据好感度计算是否发送
  • 调用AI生成自然的主动消息
  • 发送推送通知(移动端待实现)

AI平台适配

支持的平台

  1. OpenAI:GPT-3.5-turbo、GPT-4
  2. Claude:Claude 3 Sonnet/Opus
  3. 通义千问:qwen-turbo、qwen-plus
  4. 文心一言:ernie-bot-turbo

统一接口

provider = get_llm_provider("openai")  # 或 "claude", "qwen", "ernie"
response = await provider.chat_completion(messages, api_key, model)

🔐 安全说明

  1. API Key加密:使用Fernet对称加密存储用户的AI平台密钥
  2. 密码加密:使用bcrypt哈希存储密码
  3. JWT认证:所有API需要Bearer Token
  4. HTTPS:生产环境必须使用HTTPS
  5. 环境变量:敏感信息通过.env文件管理,不提交到Git

📱 移动端开发(待实现)

移动端将使用React Native开发,支持iOS和Android。

技术栈

  • React Native 0.72+
  • TypeScript
  • React Navigation
  • Zustand(状态管理)
  • React Query(数据请求)
  • react-native-gifted-chat(聊天UI)

计划功能

  • 用户注册/登录界面
  • AI角色列表和创建
  • 对话界面(支持流式回复)
  • 好感度可视化
  • 主动消息推送通知
  • 多语言切换

🛠️ 技术栈

后端

  • 框架:FastAPI 0.104+
  • ORM:SQLAlchemy 2.0(异步)
  • 数据库:PostgreSQL 15
  • 缓存:Redis 7
  • 任务队列:Celery + Celery Beat
  • 认证:JWT
  • AI SDK:openai、anthropic、dashscope、erniebot

前端(计划)

  • React Native 0.72+
  • TypeScript
  • React Navigation
  • Zustand

基础设施

  • Docker & Docker Compose
  • Nginx(反向代理)
  • PostgreSQL(主数据库)
  • Redis(缓存+队列)

📝 开发路线图

✅ 已完成

  • 后端项目搭建
  • 数据库模型设计
  • 用户认证系统
  • AI平台适配层
  • 好感度系统(支持负数)
  • 动态主动消息机制
  • Celery定时任务
  • 核心API接口
  • Docker配置

🚧 进行中

  • WebSocket实时通信
  • 流式对话回复
  • 移动端UI开发

📅 计划中

  • 推送通知集成
  • 对话历史搜索
  • 角色分享社区
  • 多媒体消息支持
  • 语音对话
  • 数据分析仪表板

🐛 常见问题

1. 数据库连接失败

确保PostgreSQL已启动,检查.env文件中的DATABASE_URL配置。

2. Celery任务不执行

确保Redis已启动,检查CELERY_BROKER_URL配置。

3. AI调用失败

检查用户是否配置了API Key,确认API Key有效且有余额。

4. 加密密钥错误

确保.env文件中的ENCRYPTION_KEY是32字节的Fernet密钥。


📄 许可证

MIT License


👥 贡献

欢迎提交Issue和Pull Request!


📧 联系方式

如有问题,请提交Issue或联系开发者。


祝你使用愉快!🎉