Metadata-Version: 2.4
Name: rag-fanuc
Version: 1.0.0
Summary: FANUC RAG Knowledge Base — pluggable retrieval + SAG hybrid search + OKF concepts
Home-page: https://github.com/Ikalus1988/self-grow-wiki
Author: Ikalus1988
Author-email: ikalus1988@users.noreply.github.com
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: chromadb>=0.4
Requires-Dist: numpy>=1.21
Requires-Dist: torch>=1.13
Requires-Dist: transformers>=4.20
Requires-Dist: pyyaml>=6.0
Provides-Extra: test
Requires-Dist: pytest>=7.0; extra == "test"
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# FANUC RAG 知识库

> 190 份 FANUC 工业机器人技术文档 → 20 万+ 向量 → 自然语言问答

## 快速开始

```bash
# 1. 克隆仓库
git clone https://github.com/Ikalus1988/self-grow-wiki.git
cd self-grow-wiki

# 2. 安装依赖
python3 -m venv ~/mkdocs-env
source ~/mkdocs-env/bin/activate
pip install -r requirements.txt

# 3. 准备向量库（二选一）
# 方式A: 从PDF重建（需要PDF源文件，耗时30-60分钟）
python3 scripts/import/rag_builder.py --input /path/to/pdf/

# 方式B: 迁移已有向量库（3.0G，秒级）
# 将 rag_chromadb/ 目录放到 ~/rag_chromadb/

# 4. 修改配置
# 编辑 rag_core.py 中的向量库路径
# CHROMA_PATH = "/你的路径/rag_chromadb"

# 5. 启动服务
chmod +x start_rag.sh
./start_rag.sh
```

## 服务端口

| 服务 | 端口 | 说明 |
|------|------|------|
| RAG Web UI | 7860 | Gradio 问答界面 |
| 管理面板 | 7861 | Gradio 管理后台 |
| RAG API | 8002 | FastAPI HTTP 接口 |
| Ollama | 11434 | 本地 LLM 兜底 |

## 目录结构

```
self-grow-wiki/
├── rag_core.py              # 核心检索+生成
├── rag_web.py               # Gradio Web UI
├── rag_api.py               # FastAPI HTTP API
├── rag_admin.py             # 管理面板
├── rag_feedback_card.py     # 反馈卡片
├── start_rag.sh             # 一键启动脚本
├── auto_flywheel.py         # 自动飞轮
├── daily_audit.py           # 每日巡检
├── badcase_review.py        # Badcase 审核
├── kb_learning.py           # 自学习模块
├── synonyms.json            # 同义词表
├── requirements.txt         # Python 依赖
├── wxauto_bot.py            # 微信机器人（旧版）
├── wxauto_bot/
│   └── bot.py               # 微信机器人（v7，推荐）
├── scripts/
│   ├── import/              # PDF 导入工具
│   │   ├── rag_builder.py       # 批量导入
│   │   ├── rag_builder_ocr.py   # OCR 增强导入
│   │   ├── rag_import_fanuc.py  # FANUC 专用导入
│   │   └── import_batch.py      # 批量导入
│   ├── audit/               # 审计工具
│   │   ├── audit_chunks_p1.py
│   │   ├── audit_exam_p2.py
│   │   ├── audit_pdf_chunk_p3.py
│   │   └── audit_pdf_chunk_v2.py
│   ├── exam/                # 试卷生成
│   │   ├── gen_exam.py
│   │   ├── gen_exam_c.py
│   │   ├── gen_exam_c_v2.py
│   │   └── gen_exam_v2.py
│   ├── docs/                # 文档工具
│   │   ├── doc_classifier.py
│   │   ├── doc_verify.py
│   │   ├── doc_verify_v2.py
│   │   ├── generate_mkdocs.py
│   │   └── graph_to_obsidian.py
│   ├── kb_selfcheck.py      # 知识库自检
│   ├── rag_phase2_semantic_tag.py
│   └── rag_phase2b_refine.py
├── lessons/                 # Lessons（供 MisakaNet 使用）
└── tests/                   # 测试
```

## 核心功能

### 检索增强

| 能力 | 说明 |
|------|------|
| 语义搜索 + BM25 混合检索 | RRF 融合，兼顾语义和关键词 |
| 报警代码规范化 | SRVO-023 / SRVO023 / SRVO-023 全匹配 |
| 型号系列强制召回 | M-900 / R-2000iC 系列文档不遗漏 |
| 品牌过滤 | 查询含 FANUC 时自动排除 KUKA/ABB 文档 |
| 同义词扩展 | 49 组同义词自动扩展查询 |
| 多问题拆分 | "A 和 B 的区别" 自动拆分分别检索 |

### LLM 四通道容灾

| 优先级 | 模型 | 来源 | 响应时间 |
|--------|------|------|----------|
| 1 | MiMo-V2-Flash | Mify 内网 | ~1.5s |
| 2 | MiMo-V2-Pro | Mify 内网 | ~0.5s |
| 3 | DeepSeek-Chat | DeepSeek API | ~2s |
| 4 | Qwen2.5:3b | Ollama 本地 | ~50s |

### 质量保证

- **每日自动巡检** — cron 6:00，抽样 7-8 题，通过率 >=90% 为合格
- **入库质检门禁** — 新 PDF 入库前自动检查污染/重复/二进制残留
- **自学习飞轮** — 巡检失败 -> badcase -> 审核 -> 同义词 -> 检索增强

## 迁移指南

### 最小迁移（推荐）

```bash
# 只需迁移代码仓库（git clone 即可）
git clone https://github.com/Ikalus1988/self-grow-wiki.git

# 向量库从 PDF 重建
pip install -r requirements.txt
python3 scripts/import/rag_builder.py --input /path/to/pdf/
```

### 完整迁移（保留已有向量库）

```bash
# 1. 代码仓库
git clone https://github.com/Ikalus1988/self-grow-wiki.git

# 2. 向量库（3.0G）
# 从原服务器打包
tar czf rag_chromadb.tar.gz ~/rag_chromadb/
# 传输到新服务器解压
tar xzf rag_chromadb.tar.gz -C ~/

# 3. 修改配置
# 编辑 rag_core.py 中 CHROMA_PATH 为新路径

# 4. 启动
./start_rag.sh
```

### 飞书机器人配置

飞书接入通过 Hermes Gateway 处理，配置在 `~/.hermes/.env`：

```bash
FEISHU_APP_ID=你的AppID
FEISHU_APP_SECRET=你的AppSecret
FEISHU_CONNECTION_MODE=websocket
FEISHU_HOME_CHANNEL=群组ID
FEISHU_GROUP_ALLOWED_CHATS=群组ID1,群组ID2
FEISHU_ALLOWED_USERS=用户ID1,用户ID2
```

修改飞书入口：
1. **复用现有 App** — 只需复制 `.env` 到新服务器，重启 Hermes Gateway
2. **创建新 App** — 在 https://open.feishu.cn/app/ 创建，获取 App ID/Secret，更新 `.env`
3. **修改群组** — 更新 `FEISHU_HOME_CHANNEL` 和 `FEISHU_GROUP_ALLOWED_CHATS`

## 环境变量

| 变量 | 说明 | 默认值 |
|------|------|--------|
| `CHROMA_PATH` | ChromaDB 向量库路径 | `~/rag_chromadb` |
| `OLLAMA_MODELS` | Ollama 模型路径 | `~/ollama/models` |
| `OLLAMA_HOST` | Ollama 监听地址 | `0.0.0.0:11434` |
| `FEISHU_WEBHOOK` | 飞书 Webhook（可选） | 无 |

## 技术栈

- **嵌入模型**: bge-base-zh-v1.5 (768维)
- **向量数据库**: ChromaDB (cosine 距离)
- **Web UI**: Gradio
- **HTTP API**: FastAPI
- **本地 LLM**: Ollama + Qwen2.5:3b
- **微信机器人**: wxauto v7

## 许可证

MIT License
