用 Streamlit + DeepSeek 做一个 AI 智能伴侣:从能跑到工程化的复盘
声明 / 致谢:此项目的最初版本是我在学习黑马程序员的网课时,跟着课程一步步敲出来的练习项目。课程链接:https://www.bilibili.com/video/BV1sHU9BmEne/?vd_source=b7fe282ae22dcad10ba845b5eea36a47。 本文更多是在此基础上做的个人复盘与工程化整理(如 .env、LICENSE、Topics、GitHub Actions、Ruff、README 徽章等),并记录我在同步、配置与 CI 上踩过的坑和解决方式。 这篇文章复盘我做 streamlit-ai-companion 的过程:前半部分是项目实现(Streamlit + DeepSeek API),后半部分是把仓库“工程化”的学习经历(.env、License、Topics、GitHub Actions、Ruff、README 徽章)。整体不是教程流水账,而是按“我遇到的问题 → 为什么 → 怎么解决”的方式写。 1. 项目简介:我做了什么 我做了一个基于 Streamlit 的 AI 智能伴侣聊天应用: 聊天 UI:st.chat_input + st.chat_message 可配置“伴侣信息”:昵称 + 性格(sidebar 动态修改) 流式输出:模型一边生成一边显示,聊天更自然 会话历史:保存为本地 JSON 文件,支持加载/删除 2. 为什么要做工程化(而不是只停留在能跑) 一开始我的项目确实能运行,但“能跑”和“可维护/可分享”是两回事: 需要别人一眼看懂怎么运行(README) 不能把 API Key 提交上去(.env 处理) 需要许可证声明(LICENSE) 最好能有自动检查(CI),避免以后改坏了都不知道 所以我给仓库补齐了这些“标配”。 3. 项目核心实现复盘(结合 AI_companion.py) 3.1 关键配置:模型、Base URL、环境变量 我把关键参数集中在文件顶部: DEEPSEEK_API_KEY:用环境变量读取 Key BASE_URL = "https://api.deepseek.com" MODEL_NAME = "deepseek-chat" SESSIONS_DIR = "sessions" 这样做的好处是:以后换模型/换环境变量名时不会到处改。 ...