Python 程序设计实训项目 · 网页版文档问答机器人(Windows 11 + PyCharm)
上传 PDF / Word 文档 → 自动阅读并总结 10 条关键信息 → 围绕文档多轮提问; 问题超出文档范围时自动联网检索作答;最多同时阅读 5 份文档;自动保存历史会话。 数据用 JSON 文件保存,不使用数据库。
前提:已安装 PyCharm(社区版即可)和 Python 3.10 或更高版本。
第 1 步:打开项目
PyCharm 菜单 File → Open,选择本项目文件夹 bot,打开。
第 2 步:配置 Python 解释器(创建虚拟环境)
- 首次打开时,PyCharm 通常会在右下角提示检测到
requirements.txt, 点击提示中的 “Create virtual environment / Install requirements” 即可自动建好环境并装好依赖; - 如果没有自动提示,手动配置:
File → Settings → Project: bot → Python Interpreter → Add Interpreter → Add Local Interpreter → Virtualenv Environment → New,确定(解释器选 Python 3.10+)。
第 3 步:安装依赖(若上一步没自动安装)
打开 PyCharm 底部的 Terminal 标签页,执行:
pip install -r requirements.txt
第 4 步:配置大模型 API Key
二选一即可(推荐方式 A):
- 方式 A:用
.env文件(推荐) 在 PyCharm 项目树里把.env.example复制一份(右键 → Copy,再 Paste), 把副本重命名为.env,双击打开后填入你的 Key。本项目支持多服务商, 有哪个就填哪个(可只填一个,也可都填):ZHIPU_API_KEY=你的智谱Key # 智谱 GLM 系列(含免费 GLM-4-Flash) SILICONFLOW_API_KEY=你的硅基流动Key # 硅基流动 DeepSeek-V4-Flash 等 LLM_MODEL=glm-4-flash # 默认模型 - 方式 B:用运行配置的环境变量
Run → Edit Configurations → 选中 app → Environment variables, 添加ZHIPU_API_KEY=你的Key(和/或SILICONFLOW_API_KEY=你的Key)。
不填 Key 也能启动(“演示模式”),界面可正常浏览、方便录屏,但无法真正回答问题。
第 5 步:运行
在项目树中打开 app.py,点击右上角绿色三角,或右键 → Run 'app'。
控制台出现:
请在浏览器打开: http://127.0.0.1:5000
* Running on http://127.0.0.1:5000
按住 Ctrl 点击该链接(或手动在浏览器输入),即可使用。停止服务点控制台红色 ■ 按钮。
不需要付费。 本项目把大模型接口统一抽象为「OpenAI 兼容」格式,并支持同时接入多个服务商, 运行后在网页右上角下拉框切换模型即可。每个模型自动使用其所属服务商的接口地址与密钥。
| 服务商 | 内置模型 | 是否免费 | Key 获取 |
|---|---|---|---|
| 智谱 BigModel | GLM-4-Flash / GLM-4.5-Air / GLM-4.7 / GLM-4.6V 等 | GLM-4-Flash ✅ 完全免费 | https://bigmodel.cn/ → 「API 密钥」 |
| 硅基流动 SiliconFlow | DeepSeek-V4-Flash 等 | 注册送额度 | https://cloud.siliconflow.cn/ → 获取 Key |
配置:在 .env 中填写对应密钥即可(有几个填几个):
ZHIPU_API_KEY=你的智谱Key
SILICONFLOW_API_KEY=你的硅基流动Key
想再加别的服务商(如本地 Ollama、OpenAI)?在
config.py的PROVIDERS和AVAILABLE_MODELS里照样式增加一项即可,无需改动其它代码。
关于“直接调用官方网页免费对话”: 技术上可以逆向官方网页接口,但这违反各家服务条款、 随时可能因登录态 / 验证码 / 接口变动而失效,不适合作为正式项目。 推荐使用上面的免费 API 额度或本地 Ollama,既免费又稳定合规。
切换模型:网页右上角下拉框可随时切换模型;可选列表在
config.py的AVAILABLE_MODELS里维护,改成你账号里有额度/福利的模型名即可(智谱所有模型共用同一接口地址,仅model名不同, 所以一个 Key 就能跑全部模型)。
外部网络检索使用 DuckDuckGo(ddgs 库),免费、无需 Key、无需注册。
- 文档自动阅读 + 摘要:上传 PDF / Word / TXT,自动提炼 10 条关键信息。
- 智能问答 + 联网兜底:优先依据文档作答;文档没有的内容自动联网检索后回答。
- 多文档:单会话最多同时阅读 5 份文档。
- 历史会话:用 JSON 文件持久化(不使用数据库),重启后对话仍在,机器人记得上下文。
- 多模型 / 多服务商切换:界面右上角下拉框可随时切换大模型,跨多家服务商
(智谱 GLM 系列、硅基流动 DeepSeek-V4-Flash 等)。模型列表在
config.py中增删。 - 图片型 PDF OCR:上传的 PDF 若是扫描件 / 图片(抽不到文字),系统会自动渲染为图片
并调用视觉大模型(默认智谱免费的
glm-4v-flash)识别文字,再进行摘要与问答。
bot/
├── app.py # Flask 后端入口与路由(在 PyCharm 中 Run 此文件)
├── config.py # 全局配置(从 .env 读取)
├── requirements.txt # Python 依赖
├── .env.example # 配置模板(复制为 .env 后填入 Key)
├── services/ # 业务服务层
│ ├── llm_client.py # 大模型客户端(OpenAI 兼容)
│ ├── document_parser.py # PDF / Word / 文本解析
│ ├── web_search.py # 外部网络检索(DuckDuckGo)
│ ├── chat_engine.py # 问答引擎:摘要 + 文档问答 + 联网兜底
│ └── storage.py # JSON 文件存储(会话/消息/文档,无数据库)
├── templates/index.html # 前端页面
├── static/ # 前端样式与脚本(style.css / app.js)
├── data/ # 运行时数据(sessions/ JSON 会话 + uploads/ 上传文件)
└── report/ # 实训报告(Word)及其生成脚本
- 后端:Python 3.10+ / Flask(数据用 JSON 文件保存,不使用数据库)
- 前端:HTML + CSS + 原生 JavaScript(Fetch API)
- 大模型:OpenAI 兼容接口(默认智谱 GLM-4-Flash,可切换)
- 文档解析:pypdf、python-docx
- 联网检索:ddgs(DuckDuckGo)
- 开发工具:PyCharm
- PyCharm 提示找不到模块(如 No module named 'flask')? 说明依赖没装进当前解释器,
在 PyCharm 的 Terminal 执行
pip install -r requirements.txt,并确认右下角解释器是项目的虚拟环境。 - 上传 .doc 失败? 旧版
.doc请先用 Word / WPS 另存为.docx再上传。 - 回答提示“未配置 API Key”? 说明
.env没填LLM_API_KEY(或运行配置里没设环境变量),填好后重新运行。 .env没生效? 确认.env在项目根目录(与app.py同级),且 Run 的工作目录为项目根目录(PyCharm 默认即是)。- 联网检索没结果? DuckDuckGo 偶发限流,稍等几秒重试即可,不影响文档问答。
- 想换模型? 只改
.env里的LLM_BASE_URL / LLM_MODEL / LLM_API_KEY三行。