# 程序员鼓励师 **Repository Path**: hong-nice/programmer-encourager ## Basic Information - **Project Name**: 程序员鼓励师 - **Description**: 程序员鼓励师AI项目练习 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-29 - **Last Updated**: 2026-02-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 程序员鼓励小助手 💖 一个基于 FastAPI + 原生前端的可爱风格聊天应用。支持会话管理(新建/切换/删除)、按 Enter 发送消息、可视化“思考过程”流式展示。后端集成 DeepSeek API(兼容 OpenAI SDK),并使用 SQLite 持久化存储。 ## 特性 - 甜美可爱的鼓励风格,输出每句话不超过 30 字 - 流式展示 AI 的思考过程与最终回答(SSE,首条对话仅展示最终回答) - 支持新建、切换、删除独立会话(互不影响) - 删除前弹出美观的确认模态框,避免误删 - 点击发送或按 Enter 发送,Shift+Enter 换行 - 玻璃拟态 UI、渐变按钮与柔和动画 ## 技术栈 - 后端:FastAPI、Uvicorn - AI 接入:DeepSeek API(OpenAI SDK 兼容) - 数据库:SQLite(内置,无需额外安装) - 前端:原生 HTML/CSS/JavaScript ## 目录结构 ``` 程序员鼓励小助手/ ├─ app.py # 应用入口,引用 backend.api 的 app ├─ backend/ │ ├─ api.py # FastAPI 路由与 SSE 输出 │ ├─ services/ │ │ └─ deepseek_service.py # DeepSeek API 与系统提示词 │ └─ db/ │ └─ database.py # SQLite CRUD(会话/消息) ├─ requirements.txt # 依赖清单 ├─ .env # 环境变量(本地配置,需手动创建/填充) ├─ templates/ │ └─ index.html # 主页面 ├─ static/ │ ├─ css/ │ │ └─ style.css # 样式与动画 │ └─ js/ │ └─ chat.js # 前端逻辑(SSE、会话管理、模态框) └─ encouragement_bot.db # SQLite 数据库(运行后生成) ``` ## 快速开始 ### 1. 环境要求 - Python 3.9+(建议 3.10+) ### 2. 安装依赖 ```bash python3 -m pip install -r requirements.txt # 或(国内镜像) # python3 -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple ``` ### 3. 配置环境变量 在项目根目录创建 `.env` 文件,填入: ``` DEEPSEEK_API_KEY=你的key DEEPSEEK_BASE_URL=https://api.deepseek.com ``` 说明: - DEEPSEEK_API_KEY 必填 - DEEPSEEK_BASE_URL 可选(不填默认 https://api.deepseek.com) ### 4. 启动服务 ```bash python3 -m uvicorn app:app --reload --host 0.0.0.0 --port 8000 ``` 打开浏览器访问:http://localhost:8000/ ## 使用指南 - 新建对话:左侧“新建对话 +” - 切换对话:点击侧边栏会话列表项 - 删除对话:顶部“删除对话”按钮,弹出确认模态框 - 发送消息:点击右下角发送按钮或按 Enter - 查看思考过程:AI 回复上方可见“思考过程…”内容(实时流式,首条对话不展示) ## 后端接口 - GET `/api/sessions`:获取会话列表 - POST `/api/sessions`:创建会话 - 请求体:`{ "title": "新会话名" }` - DELETE `/api/sessions/{session_id}`:删除会话(级联删除消息) - GET `/api/sessions/{session_id}/messages`:获取会话消息 - POST `/api/chat`:发送消息并通过 SSE 流式返回 - 请求体:`{ "session_id": number, "content": string }` - 返回(SSE 每条数据): ```json { "content": "增量文本", "reasoning": "增量思考过程" } ``` - 说明:首条对话的回复中 `reasoning` 为空字符串 - 结束标志:`data: [DONE]` ## 代码位置参考 - 系统提示词与 DeepSeek 接入:[deepseek_service.py](file:///Users/hongqibaima/Documents/Web-Project/AI/程序员鼓励小助手/backend/services/deepseek_service.py) - FastAPI 路由与 SSE 输出:[api.py](file:///Users/hongqibaima/Documents/Web-Project/AI/程序员鼓励小助手/backend/api.py) - 应用入口(供 Uvicorn 调用):[app.py](file:///Users/hongqibaima/Documents/Web-Project/AI/程序员鼓励小助手/app.py) - 数据库模型与 CRUD:[database.py](file:///Users/hongqibaima/Documents/Web-Project/AI/程序员鼓励小助手/backend/db/database.py) - 前端逻辑(会话管理、SSE 解析、模态框):[chat.js](file:///Users/hongqibaima/Documents/Web-Project/AI/程序员鼓励小助手/static/js/chat.js) - 页面模板与样式:[index.html](file:///Users/hongqibaima/Documents/Web-Project/AI/程序员鼓励小助手/templates/index.html)、[style.css](file:///Users/hongqibaima/Documents/Web-Project/AI/程序员鼓励小助手/static/css/style.css) ## 设计与约定 - 输出限制:每句话≤30字,保持可爱语气与正能量 - 会话隔离:每个会话独立存储、互不影响 - 删除确认:自定义模态框,避免误删 - 流式传输:SSE(Server-Sent Events),前端带缓冲解析,避免 JSON 截断 - 展示策略: - 系统提示词仅用于指导模型,不在前端展示(过滤 `role=system`) - 首条 AI 回复仅展示最终回答,不展示思考过程 `reasoning` - 非首条回复正常展示“思考过程”与最终回答 ## 常见问题 - 无法启动 - 检查 Python 版本与依赖安装是否成功 - 尝试使用国内镜像安装依赖 - AI 无响应或报错 - `.env` 是否正确设置 `DEEPSEEK_API_KEY` - 网络是否能访问 `DEEPSEEK_BASE_URL` - 如 `deepseek-reasoner` 不可用,会自动回退到 `deepseek-chat` - 首条消息不可见 - 已修复:前端在首次创建会话后强制等待 session 切换完成,再发送 - 流式显示断续/报解析错误 - 已修复:前端加入 Buffer,按行拆分并处理不完整数据 - 删除按钮点击无反应 - 已修复:确认模态框的事件绑定与遮罩点击关闭 ## 部署建议 - 生产环境建议使用: - 反向代理(Nginx/Caddy)+ Uvicorn/Gunicorn - 开启持久化存储目录以保存 SQLite 文件 - 配置好环境变量与安全访问控制 ## 页面效果展示 ![alt text](项目效果/项目初始化.png) ![alt text](项目效果/对话.png) ## 许可证 本项目用于学习与演示,未设置开源许可证。若需开源使用,请补充合适的 License。