zyh
This commit is contained in:
169
比赛备赛规划.md
169
比赛备赛规划.md
@@ -50,7 +50,7 @@
|
||||
| `prompt_service.py` | ✅ 已完成 | Prompt 模板管理 |
|
||||
| `text_analysis_service.py` | ✅ 已完成 | 文本分析 |
|
||||
| `chart_generator_service.py` | ✅ 已完成 | 图表生成服务 |
|
||||
| `template_fill_service.py` | ❌ 未完成 | 模板填写服务 |
|
||||
| `template_fill_service.py` | ✅ 已完成 | 模板填写服务,支持直接读取源文档进行填表 |
|
||||
|
||||
### 2.2 API 接口 (`backend/app/api/endpoints/`)
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
| `ai_analyze.py` | `/api/v1/analyze/*` | ✅ AI 分析(Excel、Markdown、流式) |
|
||||
| `rag.py` | `/api/v1/rag/*` | ⚠️ RAG 检索(当前返回空) |
|
||||
| `tasks.py` | `/api/v1/tasks/*` | ✅ 异步任务状态查询 |
|
||||
| `templates.py` | `/api/v1/templates/*` | ✅ 模板管理 |
|
||||
| `templates.py` | `/api/v1/templates/*` | ✅ 模板管理 (含 Word 导出) |
|
||||
| `visualization.py` | `/api/v1/visualization/*` | ✅ 可视化图表 |
|
||||
| `health.py` | `/api/v1/health` | ✅ 健康检查 |
|
||||
|
||||
@@ -78,8 +78,8 @@
|
||||
|------|----------|------|
|
||||
| Excel (.xlsx/.xls) | ✅ 已完成 | pandas + XML 回退解析 |
|
||||
| Markdown (.md) | ✅ 已完成 | 正则 + AI 分章节 |
|
||||
| Word (.docx) | ❌ 未完成 | 尚未实现 |
|
||||
| Text (.txt) | ❌ 未完成 | 尚未实现 |
|
||||
| Word (.docx) | ✅ 已完成 | python-docx 解析,支持表格提取和字段识别 |
|
||||
| Text (.txt) | ✅ 已完成 | chardet 编码检测,支持文本清洗和结构化提取 |
|
||||
|
||||
---
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
### 3.1 模板填写模块(最优先)
|
||||
|
||||
**这是比赛的核心评测功能,必须完成。**
|
||||
**当前状态**:✅ 已完成
|
||||
|
||||
```
|
||||
用户上传模板表格(Word/Excel)
|
||||
@@ -103,30 +103,34 @@ AI 根据字段提示词从源数据中提取信息
|
||||
返回填写完成的表格
|
||||
```
|
||||
|
||||
**需要实现**:
|
||||
- [ ] `template_fill_service.py` - 模板填写核心服务
|
||||
- [ ] Word 模板解析 (`docx_parser.py` 需新建)
|
||||
- [ ] Text 模板解析 (`txt_parser.py` 需新建)
|
||||
- [ ] 模板字段识别与提示词提取
|
||||
- [ ] 多文档数据聚合与冲突处理
|
||||
- [ ] 结果导出为 Word/Excel
|
||||
**已完成实现**:
|
||||
- [x] `template_fill_service.py` - 模板填写核心服务
|
||||
- [x] Word 模板解析 (`docx_parser.py` - parse_tables_for_template, extract_template_fields_from_docx)
|
||||
- [x] Text 模板解析 (`txt_parser.py` - 已完成)
|
||||
- [x] 模板字段识别与提示词提取
|
||||
- [x] 多文档数据聚合与冲突处理
|
||||
- [x] 结果导出为 Word/Excel
|
||||
|
||||
### 3.2 Word 文档解析
|
||||
|
||||
**当前状态**:仅有框架,尚未实现具体解析逻辑
|
||||
**当前状态**:✅ 已完成
|
||||
|
||||
**需要实现**:
|
||||
- [ ] `docx_parser.py` - Word 文档解析器
|
||||
- [ ] 提取段落文本
|
||||
- [ ] 提取表格内容
|
||||
- [ ] 提取关键信息(标题、列表等)
|
||||
**已实现功能**:
|
||||
- [x] `docx_parser.py` - Word 文档解析器
|
||||
- [x] 提取段落文本
|
||||
- [x] 提取表格内容
|
||||
- [x] 提取关键信息(标题、列表等)
|
||||
- [x] 表格模板字段提取 (`parse_tables_for_template`, `extract_template_fields_from_docx`)
|
||||
- [x] 字段类型推断 (`_infer_field_type_from_hint`)
|
||||
|
||||
### 3.3 Text 文档解析
|
||||
|
||||
**需要实现**:
|
||||
- [ ] `txt_parser.py` - 文本文件解析器
|
||||
- [ ] 编码自动检测
|
||||
- [ ] 文本清洗
|
||||
**当前状态**:✅ 已完成
|
||||
|
||||
**已实现功能**:
|
||||
- [x] `txt_parser.py` - 文本文件解析器
|
||||
- [x] 编码自动检测 (chardet)
|
||||
- [x] 文本清洗
|
||||
|
||||
### 3.4 文档模板匹配(已有框架)
|
||||
|
||||
@@ -215,5 +219,122 @@ docs/test/
|
||||
|
||||
---
|
||||
|
||||
*文档版本: v1.0*
|
||||
*最后更新: 2026-04-08*
|
||||
*文档版本: v1.1*
|
||||
*最后更新: 2026-04-08*
|
||||
|
||||
---
|
||||
|
||||
## 八、技术实现细节
|
||||
|
||||
### 8.1 模板填表流程(已实现)
|
||||
|
||||
#### 流程图
|
||||
```
|
||||
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
||||
│ 上传模板 │ ──► │ 选择数据源 │ ──► │ AI 智能填表 │
|
||||
└─────────────┘ └─────────────┘ └─────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────┐
|
||||
│ 导出结果 │
|
||||
└─────────────┘
|
||||
```
|
||||
|
||||
#### 核心组件
|
||||
|
||||
| 组件 | 文件 | 说明 |
|
||||
|------|------|------|
|
||||
| 模板上传 | `templates.py` `/templates/upload` | 接收模板文件,提取字段 |
|
||||
| 字段提取 | `template_fill_service.py` | 从 Word/Excel 表格提取字段定义 |
|
||||
| 文档解析 | `docx_parser.py`, `xlsx_parser.py`, `txt_parser.py` | 解析源文档内容 |
|
||||
| 智能填表 | `template_fill_service.py` `fill_template()` | 使用 LLM 从源文档提取信息 |
|
||||
| 结果导出 | `templates.py` `/templates/export` | 导出为 Excel 或 Word |
|
||||
|
||||
### 8.2 源文档加载方式
|
||||
|
||||
模板填表服务支持两种方式加载源文档:
|
||||
|
||||
1. **通过 MongoDB 文档 ID**:`source_doc_ids`
|
||||
- 文档已上传并存入 MongoDB
|
||||
- 服务直接查询 MongoDB 获取文档内容
|
||||
|
||||
2. **通过文件路径**:`source_file_paths`
|
||||
- 直接读取本地文件
|
||||
- 使用对应的解析器解析内容
|
||||
|
||||
### 8.3 Word 表格模板解析
|
||||
|
||||
比赛评分表格通常是 Word 格式,`docx_parser.py` 提供了专门的解析方法:
|
||||
|
||||
```python
|
||||
# 提取表格模板字段
|
||||
fields = docx_parser.extract_template_fields_from_docx(file_path)
|
||||
|
||||
# 返回格式
|
||||
# [
|
||||
# {
|
||||
# "cell": "T0R1", # 表格0,行1
|
||||
# "name": "字段名",
|
||||
# "hint": "提示词",
|
||||
# "field_type": "text/number/date",
|
||||
# "required": True
|
||||
# },
|
||||
# ...
|
||||
# ]
|
||||
```
|
||||
|
||||
### 8.4 字段类型推断
|
||||
|
||||
系统支持从提示词自动推断字段类型:
|
||||
|
||||
| 关键词 | 推断类型 | 示例 |
|
||||
|--------|----------|------|
|
||||
| 年、月、日、日期、时间、出生 | date | 出生日期 |
|
||||
| 数量、金额、比率、%、率、合计 | number | 增长比率 |
|
||||
| 其他 | text | 姓名、地址 |
|
||||
|
||||
### 8.5 API 接口
|
||||
|
||||
#### POST `/api/v1/templates/fill`
|
||||
|
||||
填写请求:
|
||||
```json
|
||||
{
|
||||
"template_id": "模板ID",
|
||||
"template_fields": [
|
||||
{"cell": "A1", "name": "姓名", "field_type": "text", "required": true, "hint": "提取人员姓名"}
|
||||
],
|
||||
"source_doc_ids": ["mongodb_doc_id_1", "mongodb_doc_id_2"],
|
||||
"source_file_paths": [],
|
||||
"user_hint": "请从合同文档中提取"
|
||||
}
|
||||
```
|
||||
|
||||
响应:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"filled_data": {"姓名": "张三"},
|
||||
"fill_details": [
|
||||
{
|
||||
"field": "姓名",
|
||||
"cell": "A1",
|
||||
"value": "张三",
|
||||
"source": "来自:合同文档.docx",
|
||||
"confidence": 0.95
|
||||
}
|
||||
],
|
||||
"source_doc_count": 2
|
||||
}
|
||||
```
|
||||
|
||||
#### POST `/api/v1/templates/export`
|
||||
|
||||
导出请求:
|
||||
```json
|
||||
{
|
||||
"template_id": "模板ID",
|
||||
"filled_data": {"姓名": "张三", "金额": "10000"},
|
||||
"format": "xlsx" // 或 "docx"
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user