PyDeepChat 是一个基于 Python、PySide6 和 DeepSeek API 构建的桌面端 AI 聊天客户端。它提供了一个简洁的本地聊天界面,支持流式回复、多轮对话和基础的上下文管理。
PyDeepChat 面向希望学习 Python 桌面开发与大模型 API 接入的开发者,适合作为理解 GUI 构建、API 调用、流式响应和多轮对话管理的参考项目,也可以作为轻量级桌面 AI 聊天客户端的基础模板。
- 基于 PySide6 的桌面端聊天界面
- 接入 DeepSeek API
- AI 回复流式输出
- 多轮对话上下文管理
- 长对话上下文窗口控制
- 支持 Markdown 渲染
- 支持 LaTeX 数学公式渲染
- 支持代码块、表格、引用和链接展示
- 自动识别并转换可点击 URL
- 支持折叠展示模型返回的思考过程
- 生成过程中可停止当前请求
- 支持输入长度限制
- 错误信息分类展示
- API Key 错误信息脱敏
- 提供基础单元测试
- Python 3.10 或更高版本
- DeepSeek API Key
依赖包:
PySide6
httpx
markdown
Pygments
克隆项目:
git clone <repository-url>
cd PyDeepChat创建虚拟环境并安装依赖:
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt设置 DeepSeek API Key:
$env:DEEPSEEK_API_KEY="<DEEPSEEK_API_KEY>"启动应用:
.\.venv\Scripts\python.exe main.pyDeepSeek API 文档:https://api-docs.deepseek.com/
PyDeepChat 默认从系统环境变量读取配置。
| 环境变量 | 默认值 | 说明 |
|---|---|---|
DEEPSEEK_API_KEY |
空 | DeepSeek API Key,必填 |
DEEPSEEK_BASE_URL |
https://api.deepseek.com |
DeepSeek API 地址 |
DEEPSEEK_MODEL |
deepseek-v4-flash |
使用的模型名称 |
DEEPSEEK_TIMEOUT |
60 |
请求超时时间,单位为秒 |
DEEPSEEK_RETRIES |
2 |
非流式请求重试次数 |
AI_CHAT_MAX_CONTEXT_MESSAGES |
40 |
最多保留的上下文消息数量 |
AI_CHAT_MAX_CONTEXT_CHARS |
24000 |
上下文最大字符数 |
AI_CHAT_MAX_USER_MESSAGE_CHARS |
8000 |
单条用户消息最大字符数 |
AI_CHAT_SYSTEM_PROMPT |
内置提示词 | 自定义系统提示词 |
可以参考 .env.example 查看完整变量名。当前版本不会自动读取 .env 文件,需要手动设置系统环境变量。
Enter:发送消息Shift + Enter:换行停止:取消当前正在生成的回复清空对话:清空当前聊天记录和上下文- 数学公式可使用
\( ... \)或\[ ... \]格式
PyDeepChat 专注于桌面端文本聊天和 DeepSeek API 接入,不包含以下功能:
- 文件上传
- 图片识别
- PDF、Word、Excel 解析
- 实时联网搜索
- 天气、股票等外部工具查询
- 语音输入
- 本地离线模型
.
├── main.py # 程序入口
├── config.py # 配置项
├── deepseek_client.py # DeepSeek API 客户端
├── chat_memory.py # 多轮对话记忆与上下文裁剪
├── qt_gui.py # PySide6 图形界面
├── rich_text.py # Markdown、HTML、链接和 LaTeX 渲染
├── test_core.py # 单元测试
├── requirements.txt # Python 依赖
├── .env.example # 环境变量示例
├── CONTRIBUTING.md # 贡献说明
├── CODE_OF_CONDUCT.md # 行为准则
├── SECURITY.md # 安全说明
├── .github/ # Issue 和 PR 模板
└── LICENSE
运行测试:
.\.venv\Scripts\python.exe -m unittest语法检查:
.\.venv\Scripts\python.exe -B -c "import pathlib; files=['main.py','config.py','chat_memory.py','deepseek_client.py','rich_text.py','qt_gui.py','test_core.py']; [compile(pathlib.Path(f).read_text(encoding='utf-8'), f, 'exec') for f in files]; print('syntax ok')"请不要把真实 API Key 写入源码、README、截图或 issue。建议始终通过环境变量配置密钥。
如果 API Key 曾经泄露,请立即到 DeepSeek 控制台作废旧 Key,并重新生成。
本项目基于 MIT License 开源。