Skip to content

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于 Web 的智能文档问答机器人

Python 程序设计实训项目 · 网页版文档问答机器人(Windows 11 + PyCharm

上传 PDF / Word 文档 → 自动阅读并总结 10 条关键信息 → 围绕文档多轮提问; 问题超出文档范围时自动联网检索作答;最多同时阅读 5 份文档;自动保存历史会话。 数据用 JSON 文件保存,不使用数据库


一、在 PyCharm 中运行(推荐)

前提:已安装 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 点击该链接(或手动在浏览器输入),即可使用。停止服务点控制台红色 ■ 按钮。


二、大模型 API 配置(多服务商,可切换模型)

不需要付费。 本项目把大模型接口统一抽象为「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.pyPROVIDERSAVAILABLE_MODELS 里照样式增加一项即可,无需改动其它代码。

关于“直接调用官方网页免费对话”: 技术上可以逆向官方网页接口,但这违反各家服务条款、 随时可能因登录态 / 验证码 / 接口变动而失效,不适合作为正式项目。 推荐使用上面的免费 API 额度或本地 Ollama,既免费又稳定合规。

切换模型:网页右上角下拉框可随时切换模型;可选列表在 config.pyAVAILABLE_MODELS 里维护,改成你账号里有额度/福利的模型名即可(智谱所有模型共用同一接口地址,仅 model 名不同, 所以一个 Key 就能跑全部模型)。

外部网络检索使用 DuckDuckGo(ddgs 库),免费、无需 Key、无需注册。


三、功能特性

  1. 文档自动阅读 + 摘要:上传 PDF / Word / TXT,自动提炼 10 条关键信息。
  2. 智能问答 + 联网兜底:优先依据文档作答;文档没有的内容自动联网检索后回答。
  3. 多文档:单会话最多同时阅读 5 份文档。
  4. 历史会话:用 JSON 文件持久化(不使用数据库),重启后对话仍在,机器人记得上下文。
  5. 多模型 / 多服务商切换:界面右上角下拉框可随时切换大模型,跨多家服务商 (智谱 GLM 系列、硅基流动 DeepSeek-V4-Flash 等)。模型列表在 config.py 中增删。
  6. 图片型 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 三行。

About

bot

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages