---
title: qyk
canonical_url: "https://www.modelscope.cn/studios/zyb67429/qyk"
md_url: "https://www.modelscope.cn/studios/zyb67429/qyk.md"
repository: zyb67429/qyk
chinese_name: "企业知识库"
last_updated: 2026-09-28
sdk_type: gradio
sdk_version: 6.17.3
downloads: 0
stars: 2
---

# qyk

> qyk - zyb67429 在 ModelScope 创建的在线 Demo。ModelScope 魔搭 API（Qwen 流式调用）+ RAG 知识库 + 多用户账号登录 + 游客免登录体验 + 弹窗登录 + 响应式适配（PC / 手机 / 平板） Gradio 6.x 合规 · 零报错 · 可直接部署

zyb67429/qyk 是 ModelScope 魔搭社区上的在线可交互 Demo（创空间），基于 gradio 6.17.3 构建，中文名为「企业知识库」。

- **Repository**: zyb67429/qyk
- **SDK**: gradio
- **SDK version**: 6.17.3
- **Downloads**: 0
- **Stars**: 2
- **Last updated**: 2026-09-28

Source: https://www.modelscope.cn/studios/zyb67429/qyk

---

# 🌬️ 空分行业智能助手 · 第一版

ModelScope 魔搭 API（Qwen 流式调用）+ RAG 知识库 + **多用户账号登录** + **游客免登录体验** + **弹窗登录** + **响应式适配（PC / 手机 / 平板）**
**Gradio 6.x 合规 · 零报错 · 可直接部署**

## 🌐 游客模式（本次新增）

打开页面**无需登录即可直接对话**，降低首次体验门槛；登录改为「**弹窗（Modal）**」，不打断聊天。

| 行为 | 游客（未登录） | 登录用户 |
|---|---|---|
| 💬 对话 | ✅ 直接可用，支持 RAG 检索 + 流式输出 | ✅ |
| 🔢 对话轮次 | 上限 `GUEST_LIMIT=20` 轮，超出提示登录 | 无限制 |
| 📄 上传文档 | ❌ 点击后**弹出登录窗**并提示「请先登录」 | ✅ 自动切片、分类、入库、重建索引 |
| 📊 管理员视图 | ❌ 点击后**弹出登录窗** | 仅管理员可见 |
| 💾 会话保存 | ❌ 不入库，**刷新即清空**（按需求「不保留历史」） | ✅ 持久化到 `sessions.db`，按用户隔离 |
| 👤 顶栏 | 显示 `游客模式` 徽标 + `登录/注册` 按钮 | 显示欢迎语 + `退出` 按钮 |

### 登录弹窗时机（按你的选择：点受限功能时弹）
- 顶栏 `登录/注册` 按钮：**随时主动打开**
- 点击 `上传文档` / `统计概览`（游客）：**自动弹出登录窗** + 黄色提示条，登录后功能立即可用
- 登录 / 注册在同一个弹窗里用 Tabs 切换，「去注册 →」「已有账号？去登录 →」互跳
- 注册成功 → **自动登录**，无需再点一次

## 🔐 账号体系

| 功能 | 说明 |
|---|---|
| 注册 / 登录 | PBKDF2-HMAC-SHA256 + 随机盐哈希（标准库，无第三方依赖） |
| 会话隔离 | 每账号独立会话与消息；删除时校验归属（防越权） |
| 管理员权限 | `users.is_admin=1` 可见统计；普通用户点击显示锁定提示 |
| 默认管理员 | 首次启动自动建 `admin / admin123`（**首次登录后务必修改**） |

## 📱 响应式适配

| 终端 | 布局 |
|---|---|
| 🖥️ 电脑（>768px） | 侧栏常驻，主聊天自适应 |
| 📱 手机（≤768px） | 侧栏抽屉式（`☰` 开关）、单列堆叠、触摸目标 ≥44px |
| 📟 平板 | 平滑过渡 |

细节：移动端 `viewport`、顶栏吸顶、输入区贴底、`Textbox(submit_btn=True)` 回车发送、iOS 输入框字号 16px（防自动缩放）。

## 📁 文件结构

```
空分助手/
├── app.py              # 主程序（游客模式 + 弹窗登录 + 对话 + 响应式）
├── auth.py             # 用户注册 / 登录 / 密码哈希
├── admin.py            # 管理员统计（基于 users 表判定权限）
├── db.py               # SQLite：users + sessions + messages
├── retrieval.py        # TF-IDF 本地知识库检索（内置 5 条空分知识）
├── document_loader.py  # PDF/Word/TXT 解析切片入库
├── requirements.txt
└── README.md
```

## 🚀 快速启动

```bash
pip install -r requirements.txt
python app.py
```

```
🔑 已创建默认管理员：admin / admin123 ...
Running on local URL: http://0.0.0.0:7860
```

浏览器打开 `http://localhost:7860` → **游客可直接发消息** → 点上传或顶栏 `登录/注册` 弹出登录窗。

## ⚙️ 配置

```python
os.environ["MODELSCOPE_API_KEY"] = "ms-xxxx..."
MODEL_ID = "Qwen/Qwen3.5-27B"
```

> 模型不可用只影响对话（会降级提示），**不影响游客体验、登录与页面渲染**。

## ✨ 功能一览

| 功能 | 说明 |
|---|---|
| 🌐 游客免登录对话 | RAG + 流式输出，20 轮内免注册 |
| 🔐 弹窗登录 / 注册 | Modal 不打断聊天，注册自动登录 |
| 🔒 受限操作拦截 | 上传 / 管理员视图对游客弹窗并提示 |
| 💾 会话持久化 | 登录用户按账号隔离保存，游客不保存 |
| 📄 文档上传 | PDF / Word / TXT → 切片 / 分类 / 入库 |
| 📊 管理员统计 | 用户数 / 会话数 / 消息数 / 每用户统计 |
| 📱 三端响应式 | PC 侧栏常驻，手机抽屉式 |

## 🔧 Gradio 6.x 已处理的坑

- `gr.Chatbot()` 无 `type=` / `show_copy_button`
- `css` 放 `demo.launch(css=...)`；`head=` 注入 `viewport` + `favicon`
- history 为 `[{"role", "content"}]` 字典列表
- `Column` 无 `.change` 事件 → 侧栏显隐用 `State` 追踪
- `Tabs` 不用 `value=` 参数 → Tab 切换改用 `gr.update(selected=...)` + `select` 事件（避免 `unexpected keyword argument 'value'`）
- 所有 handler 的**返回值数量 == outputs 声明数量**（实测不匹配会静默失败）

## 📝 数据存放

运行后自动生成 `data/`（或 `ASP_DATA_DIR` 指定）：
```
data/
├── sessions.db         # users + sessions + messages
├── docstore.jsonl      # 知识库文档
├── index.pkl           # TF-IDF 索引
└── uploads/            # 原始上传文件
```

> ⚠️ 从旧版升级：建议删除旧 `data/` 重建（会清空会话）；或手动 `ALTER TABLE` 补建 `users` 表并创建 admin。
