https://github.com/YuhangWuAI/tablerag
核心目标: 当用户问一个问题时,从一大堆表格中找出最相关的表格信息,然后让大模型(LLM)基于这些信息生成答案。
核心思路(像处理原材料一样处理表格):
各种各样的表格就像仓库里的原材料。用户的问题(Query)就是客户下的订单。这个项目要做的是:
-
第一步:快速粗筛(Table Filter - 表格过滤)
- 任务: 从海量表格里快速挑出可能相关的那几个(比如几十或几百个),扔掉明显无关的。这步要快。
- 怎么筛?两种方法:
- 方法1:关键词/语义匹配(Semantic-based): 把用户问题和表格里的每一行或每一列的关键词/意思(变成数学向量)做相似度比较。比如用户问“苹果的销量”,表格里某行有“Apple”、“Sales”这些词,或者意思接近,这行就可能被选中。最终选相似度最高的几行或几列。
- 方法2:让AI助理看一眼(LLM-based): 把用户问题和所有表格的列名打包一起扔给大模型,问它:“根据用户的问题,哪些列最相关?” 大模型指哪列,就保留哪列。
- 结果: 得到一小批“入围”的表格片段(行或列)。
-
第二步:精加工原材料(Table Clarification - 表格澄清补充)
- 任务: 对第一步筛出来的那些“入围”表格片段进行深度加工,让它们变得更清晰、更丰富、更容易被理解(尤其是对大模型来说)。这步可能比较慢、费资源(Token)。
- 怎么加工?主要三件事:
- a. 解释术语(Term Explanations): 表格里可能有缩写、专业术语(比如“EBITDA”、“CPU”)。让大模型识别这些术语,并给它们加上定义解释和相关同义词。这样大模型就不会误解了。
- b. 写摘要(Table Summary): 给整个表格或表格片段写个简短的内容提要,说明这个表格主要是讲什么的(比如“本表展示了2023年全球各大科技公司的营收和利润数据”)。这给大模型一个宏观背景。
- c. 猜问题(Query Suggestions): 根据表格内容,让大模型预测用户可能会问哪些相关问题(比如“哪家公司利润最高?”、“苹果的营收是多少?”)。这有助于后续更好地匹配用户问题。
- 结果: 得到一批“精装修”过的表格信息,自带解释、摘要和问题预测。
-
第三步:包装送货(Table Format - 表格格式化)
- 任务: 把加工好的表格信息,转换成大模型最容易吃进去的格式。
- 怎么包装?
- HTML格式: 保留表格的复杂结构(比如合并单元格、嵌套表),适合结构复杂的表格。
- Markdown格式: 变成简单易读的文本表格(用
|
和-
表示),是RAG里常用的格式。
- 结果: 加工好的信息被打包成格式整洁的“包裹”。
-
第四步:生成答案(Serialized Request - 丢给LLM)
- 任务: 把用户原始问题和第三步打包好的、精加工的表格信息,一起拼接(Serialize) 成一个长长的提示(Prompt),然后喂给大模型(LLM)。
- 结果: 大模型阅读了清晰的问题和加工过的表格信息后,生成最终答案。
总结起来像什么?
- 像在图书馆查资料:
- 过滤 = 用关键词在目录/索引里快速找书(可能找到好几本)。
- 澄清 = 把找到的书翻开来,查里面的专业词汇(看术语表)、读前言/摘要了解书的大意、想想这本书能回答哪些问题。
- 格式化 = 把需要的那几页复印好,标注好。
- 生成 = 把问题和复印的资料一起交给专家(LLM)写报告。
项目特点(优缺点):
- 优点:
- 思路清晰: 分阶段处理,逻辑分明。
- 考虑周到: 特别关注了表格中的术语歧义问题(澄清阶段),这对理解专业表格很重要。
- 信息丰富: 生成的摘要和问题建议为LLM提供了额外的上下文。
- 缺点:
- 速度慢、费钱(Token): 尤其是“澄清”那步,对每个入围表格片段都要调用大模型做解释、摘要、猜问题,这非常消耗计算资源和时间(Token),效率不高。
- 设计可能不合理: 通常RAG希望检索(过滤)这一步就尽量精准,只召回少量最相关的信息。而这个项目在过滤后还做了大量的信息补充(澄清),导致最终扔给LLM的内容可能还是很多、很杂,影响最终生成的速度和质量。
- 效果未知: 项目比较早,实际效果没明确说。
这个项目想从表格里找答案,它先快速筛一批可能相关的表格片段,然后花大力气给这些片段加注释、写摘要、预测问题,最后把加工好的信息和问题一起交给大模型去生成答案。核心亮点是那个“澄清补充”的加工步骤,但代价是效率可能不高。