# 标题生成模块 (title_generator) 标题生成模块(`title_generator`)是 ChartPipeline 框架的第三个处理环节,负责基于数据内容和洞察生成有吸引力的标题和副标题。 ## 功能简介 本模块通过分析数据洞察和图表类型,生成能够准确概括数据主题并突出关键发现的标题。生成的标题简洁明了,引人入胜,使读者能够迅速理解可视化内容的核心信息。 ## 输入与输出 ### 输入 模块接收包含以下字段的数据对象: - `metadata`: 原始元数据(包含标题、描述等) - `chart_type`: 图表类型推荐 - `datafacts`: 数据洞察 ### 输出 模块向输入数据添加 `titles` 字段,结构如下: ```json { "titles": { "main_title": "美国国家紧急状态持续增长", "sub_title": "1976年以来宣布的紧急状态中大多数仍然有效" } } ``` 输出字段说明: | 字段 | 类型 | 描述 | |------|------|------| | `main_title` | 字符串 | 图表主标题,简洁地概括核心信息 | | `sub_title` | 字符串 | 图表副标题,提供补充信息和上下文 | ## 实现方法:RAG-based 标题生成 本模块采用基于检索增强生成(Retrieval-Augmented Generation, RAG)的方法实现标题生成,主要包括以下技术点: 1. **向量化和相似度检索**: 使用SentenceBERT将输入数据转换为语义向量,并通过FAISS向量数据库高效检索相似样例 2. **数据预处理**: 将输入的图表数据、元数据和数据洞察组织成结构化文本 3. **相似案例检索**: 基于输入数据的语义特征,检索训练集中最相似的图表及其标题 4. **大模型增强生成**: 结合检索到的案例和当前数据特征,通过大语言模型生成适合的标题和副标题 ## 使用示例 ### 命令行调用 ```bash python -m modules.title_generator.title_generator --input input_data.json --output output_data.json --index_path faiss_infographics.index --data_path infographics_data.npy --topk 3 --api_key your_api_key --base_url your_base_url ``` ### 程序调用 ```python from modules.title_generator.title_generator import process success = process( input='input_data.json', output='output_data', index_path='faiss_infographics.index', data_path='infographics_data.npy', topk=3, api_key='your_api_key', base_url='your_base_url' ) if success: print("数据洞察生成完成") else: print("数据洞察生成失败") ``` ## 构建标题生成所需的向量索引 标题生成模块使用一个基于 FAISS 的向量索引来支持检索增强生成(RAG)。该索引需要通过历史图表数据构建,一般仅需在首次使用或数据更新时运行一次。 ### 数据格式 构建索引的训练数据应为JSON格式,结构如下: ```json { "chart_id_1": { "metadata": { "title": "图表标题", "description": "图表描述", "main_insight": "图标洞察" }, "chart_type": ["图表类型"], "datafacts": [{"annotation": "数据洞察"}], "data": { "columns": [{"name": "列名", "type": "列类型"}], "data": [{"列名": "值"}] } }, "chart_id_2": { // 其他图表数据... } } ``` ### 使用方式 #### 命令行调用 ```bash python -m modules.title_generator.build_title_index --data training_data.json --index_path faiss_infographics.index --data_path infographics_data.npy ``` #### 程序调用 ```python from modules.title_generator.build_title_index import process success = process( data='training_data.json', index_path='faiss_infographics.index', data_path='infographics_data.npy' ) if success: print("索引构建完成") else: print("索引构建失败") ```