Files

198 lines
7.1 KiB
Markdown
Raw Permalink Normal View History

2026-07-10 17:59:59 +08:00
# autoSKG vs 方案A对比分析
> 日期: 2026-04-23
> 分析人: xialab的幸运星
---
## 一、架构对比
### autoSKG架构
```
┌─────────────────────────────────────────────────────────────┐
│ input_pdfs/ → GROBD → text → LLM(OpenAI) → KG │
│ │
│ 数据流: │
│ PDF → text.txt → metadata.parquet → KG(parquet) │
│ │
│ 存储格式: │
│ - parquet(列式存储) │
│ - stats.json(运行统计) │
│ │
│ 源代码位置: │
│ - Docker镜像 szhou956/autoskg:v0.4.0 │
│ - GitHub仓库无源代码 │
│ │
│ 服务化: │
│ - PlantScience.ai虚拟科学家 │
│ - KG + LLM + 可视化 │
└─────────────────────────────────────────────────────────────┘
```
### 方案A架构
```
┌─────────────────────────────────────────────────────────────┐
│ PDF → MinerU → entities/relations → Neo4j + FAISS │
│ │
│ 数据流: │
│ PDF → MinerU.json → merged_7_papers.json → KG+向量 │
│ │
│ 存储格式: │
│ - JSON(merged_7_papers.json) │
│ - Neo4j图数据库 │
│ - FAISS向量索引 │
│ │
│ 源代码位置: │
│ - 本地Python文件(kg_rag_fusion.py) │
│ - 完全开源可修改 │
│ │
│ 服务化: │
│ - FastAPI本地服务 │
│ - KG + Vector + LLM(Ollama/DashScope) │
└─────────────────────────────────────────────────────────────┘
```
---
## 二、数据模型对比
| 维度 | autoSKG | 方案A |
|------|---------|-------|
| **PDF解析** | GROBD(科学文献专用) | MinerU(通用) |
| **存储格式** | parquet(列式) | JSON + Neo4j + FAISS |
| **实体提取** | LLM(OpenAI GPT) | 正则+PC数据 |
| **关系提取** | LLM | 规则模式 |
| **stats字段** | 运行统计(runtime) | KG统计(entities/relations) |
| **源代码** | Docker镜像(不公开) | 本地Python(完全开源) |
---
## 三、关键差异分析
### 差异1: 源代码可见性
| autoSKG | 方案A |
|---------|-------|
| Docker镜像封装,无法直接读取源代码 | 本地Python文件,完全可读可修改 |
| 只能通过输出数据推断设计 | 可以直接分析源代码 |
**影响**: autoSKG的设计细节需要通过docker镜像或输出数据推断,无法直接学习其实现。
### 差异2: PDF解析工具
| autoSKG (GROBD) | 方案A (MinerU) |
|------------------|----------------|
| 科学文献专用解析 | 通用PDF解析 |
| 结构化输出(标题/章节) | 全文提取 |
| 专为学术文献优化 | 需要额外处理结构 |
### 差异3: 数据组织方式
| autoSKG | 方案A |
|---------|-------|
| parquet(高效列存储) | JSON(易读但效率低) |
| 单表结构 | 多表(entities/relations分离) |
| text_unit_ids引用 | 直接嵌入文本 |
### 差异4: stats字段用途
**autoSKG的stats.json**:
```json
{
"total_runtime": 85.103,
"num_documents": 1,
"input_load_time": 0,
"workflows": {...}
}
```
用途:**运行统计**(用于监控pipeline性能)
**方案A的merged_7_papers.json的stats**:
```json
{
"total_entities": 1259,
"total_relations": 1887,
"entity_types": {...},
"papers": [...]
}
```
用途:**KG统计**(用于回答统计类问题)
---
## 四、autoSKG解决方案A问题的可能性分析
### 问题:统计类问题无法回答
**autoSKG是否解决?**
- autoSKG的stats.json只有运行统计,没有KG统计
- 如果用autoSKG架构,需要额外添加KG统计字段
- **结论**: autoSKG默认也不解决统计类问题,需要定制
### 问题:实体识别漏词
**autoSKG是否解决?**
- autoSKG使用LLM提取实体
- LLM能识别"有多少"、"物种"等语义关键词
- **结论**: autoSKG通过LLM可能更好地识别问题意图
### 问题:关系语义泛化
**autoSKG是否解决?**
- autoSKG使用LLM提取关系
- LLM能区分regulates/promotes/inhibits
- **结论**: autoSKG可能保留更细致的关系语义
---
## 五、为什么每次都没读取autoskg代码
**客观原因**:
1. autoSKG的源代码在Docker镜像里,不在本地
2. GitHub仓库只有配置文件(docker-compose.yml)
3. 需要通过docker inspect或镜像分析才能获取源代码
**我的失误**:
1. 没有主动尝试从docker镜像提取源代码
2. 没有主动通过web_fetch获取PlantScience.ai的在线演示
3. 只分析了输出数据,没有深入分析docker镜像
---
## 六、下一步行动
### 行动1: 从docker镜像提取源代码
```bash
docker pull szhou956/autoskg:v0.4.0
docker create szhou956/autoskg:v0.4.0
docker cp <container_id>:/app /tmp/autoskg_source
```
### 行动2: 分析PlantScience.ai在线服务
访问 https://PlantScience.ai 查看其KG查询界面和问答能力。
### 行动3: 对比两者的查询能力
用同样问题测试autoSKG和方案A,对比答案质量。
---
## 七、关键教训
**对用户问题的处理**:
- 用户提到autoskg-wizard时,应**主动读取相关代码**
- 不应假设源代码不可见,应尝试所有获取途径
- 应对比分析已有数据和设计文档
**对系统设计的反思**:
- autoSKG用LLM提取实体/关系,可能解决语义理解问题
- autoSKG用parquet存储,效率更高
- 但autoSKG的stats也是运行统计,不解决KG统计问题
---
*分析完成时间: 2026-04-23 21:45*