通义点金案例分享:表格修订

简介: 本文介绍了在通义点金平台搭建知识库时遇到的表格解析问题及解决方案。问题表现为表格数据被独立存储为chunk,缺少前后说明文字和表名信息,导致大模型回答错乱。解决方法是通过API将前后chunk内容合并到table类型的chunk中,补充表名和说明信息。具体步骤包括获取文档chunk列表、按顺序排序、修订table类型chunk并更新。示例展示了修订前后效果,同时说明了点金平台近期更新对部分问题的优化情况。

问题背景:

笔者在使用通义点金平台搭建知识库的过程中遇到了如下问题:

通义点金的文档库在解析带表格的文档时,会将每个表格的数据以markdown的格式存储到独立的chunk中,chunk类型为table,并且该chunk仅包含表格本身的内容,不会包含表格前后的说明文字,也就是会丢失表格的辅助信息甚至是表格名称(如果表名没有在表格内)。

上述问题会导致,针对包含大量相似结构表格的文档进行问答时,大模型的回答会出现错乱,例如把A表的数据误认为B表中的同名数据了;根本原因是在召回以及召回后的分析中,大模型无法识别某个字段到底属于那张表。

例如下面这个表格chunk就仅包含表格内容,无表名等信息。

解决方法:

总体思路:

利用点金平台的API对table类型的chunk进行修订,将物理意义上的前一个chunk和后一chunk中的内容合并到table类型的chunk中。这样可以使table类型的chunk中包含到表名以及前后的各种解释性文字。

将上述逻辑封装成一个工具程序,输入为文档库id和文档名前缀,工具会扫描指定文档库中的所有文档并找出符合文档名前缀的文档,对这些文档中所有类型为table的chunk进行修订。

具体步骤:

(1)调用“获取⽂档库内⽂档信息(/api/library/listDocument)”API获取指定文档库id下的所有文档。

(2)根据输入的文件名前缀过滤全量文档列表得到待处理的文档列表。

(3)针对待处理列表逐条进行修订:

i.调用“查看⽂档对应的⽂档块(/api/library/getDocumentChunk)”API 获取当前文档的全量chunk列表

ii.按页面顺序对chunk进行升序排序(页面 + 起始纵坐标)。

iii.扫描全量chunk列表,对于table类型的chunk生成新的chunkText:将前序和后继chunk的chunkText拼接到当前chunkText

iv.调用“更新⽂档块(/api/library/updateDocumentChunk)”API 更新第iii步修订的chunk。

部分代码参考:

#对文档中的表格chunk做上下文补充
def updateFileTable(library_id: str = None, file_list: list = None):
    docInfoList = serchFileList(library_id=library_id, file_list=file_list) #查询待处理文件列表
    for docInfo in docInfoList: 
        updateSingleFileTbale(library_id=library_id, docId=docInfo['docId']) #逐个文档进行修订
def serchFileList(library_id: str = None, file_list: list = None):
    doc_list = []
    result = LLM_Dianjin_RAG_Interface.search_file(library_id=library_id) #查询指定文档库下的所有文档列表(封装了 /api/library/listDocument API)
    for record in result:
        if file_list is not None:  # 判断是否需要根据文件名过滤
            match = False
            for file_name in file_list:
                if record['title'].startswith(file_name):
                    match = True
            if not match:
                continue
        if record['statusCode'] != 'Completed':
            continue  # 如果文件状态不是Completed,跳过该记录
        doc_info = {"docId": record['docId'], "title": record['title']}
        doc_list.append(doc_info)
    return doc_list
def updateSingleFileTbale(library_id: str = None, docId: str = None):
    #获取全量文档块(内部封装了/api/library/getDocumentChunk)
    fileChunks = getFileChunks(library_id=library_id, docId=docId)
    my_utils.log('ori table', f'fileChunks:{fileChunks}', 'debug')
    #对文档块进行重排序(按页码和起始纵坐标排序)
    fileChunks.sort(key=lambda x: (x['pos'][0]['page'], x['pos'][0]['axisArray'][1]))
    my_utils.log('sorted table', f'fileChunks:{fileChunks}', 'debug')
    #生成待更新数据
    updateChunkList = []
    preChunk = None
    nextChunk = None
    for index,chunk in enumerate(fileChunks):
        #获取当前chunk的前续和后继chunk
        if index > 0:
            preChunk = fileChunks[index - 1]
        if index < len(fileChunks) - 1:
            nextChunk = fileChunks[index + 1]
        else:
            nextChunk = None
        if chunk['chunkType'] == 'table': #仅修订table类型的chunk
            chunkText = appendTableChunk( curChunkInfo=chunk, preChunk=preChunk, nextChunk=nextChunk) #拼接chunkText
            updateChunkList.append({
                "chunkId": chunk['chunkId'],
                "chunkText": chunkText,
            })
    #更新文档块
    return updateDocumentChunk(library_id=library_id, chunkInfoList=updateChunkList) #更新对应的chunk(内部封装了/api/library/updateDocumentChunk)

实现效果

示例1

原chunk信息:不包含表名等信息。

更新后的chunk信息:可以看到在原表格内容的前面拼接了前续chunk的内容,即表名和部分说明信息;在原表格内后面可以看到拼接了后续chunk的表格内容。

示例2:

原chunk信息:不包含表后的说明信息

更新后的chunk信息:补充了表后的说明信息。

后记:

1、通义点金近期的更新已经把table的标题加进到chunk中,基本不会出现表格的chunk中无表名的情况了,但是表前的说明文字暂然未能添加到表格的chunk中,如果需要自动化添加仍可以参考本文所述的工具逻辑。

2、通义点金近期的更新后,chunk查询的默认排序已经是按页面顺序排了,chunk列表的排序步骤可以略掉了。

目录
相关文章
|
2月前
|
人工智能 自然语言处理 搜索推荐
金融智能客服的“模力时刻”:大模型驱动下的技术跃迁
如何手搓一个“有活人感”的金融智能客服?
307 2
|
2月前
|
人工智能 JavaScript 安全
Clawdbot 对接飞书详细教程 手把手搭建你的专属 AI 助手
本教程手把手教你将 Moltbot(原 Clawdbot)部署在 Linux 服务器,并对接飞书打造专属 AI 助手:涵盖环境准备、Node.js/NVM 安装、Moltbot 快速安装(支持 Qwen 模型)、Web 管理面板配置及飞书应用创建、权限设置与事件回调对接,全程图文指引,安全可靠。
4777 4
Clawdbot 对接飞书详细教程 手把手搭建你的专属 AI 助手
|
2月前
|
JSON 人工智能 API
从对话到Agent:大模型工具调用能力的量化评测
大模型向Agent进化,工具调用是关键。本文介绍EvalScope评测框架,通过双重验证机制,量化评估模型“会不会用、能不能用好”工具,助力开发者打造可靠AI应用。
379 4
|
2月前
|
机器学习/深度学习 自然语言处理 前端开发
智谱大模型GLM-4.7火爆技术圈:探秘其高效实用的成长之路!
GLM-4.7的发布标志着大模型竞争进入工程化落地新阶段。其核心突破并非单纯参数增长,而是通过交织式思考等机制,显著提升了代码生成与多步任务执行(Agent)的稳定性和可交付性。智谱采用“先验证再上桌”的严谨数据筛选策略,并配套开源强化学习框架Slime,将模型训练打造成系统工程。这预示着未来竞争焦点将从“模型更聪明”转向“体系更可靠、更能干活”
|
4月前
|
人工智能 前端开发 JavaScript
新的LLM交互模式!大模型终于能自己生成交互式 UI 了
Google Research推出的Generative UI,让大模型不仅能生成内容,还能一键创建含地图、图表、小游戏等交互功能的完整网页。告别“文字墙”,迈向“内容即应用”的新时代,82.8%用户偏爱此创新体验。
1231 8
|
9月前
|
人工智能 安全 算法
十万奖金等你来战!第二届“隐语杯”数据挑战赛报名正式启动!
近日,国家数据局举办了2025“数据要素×”首场新闻发布会。
373 9
十万奖金等你来战!第二届“隐语杯”数据挑战赛报名正式启动!
|
8月前
|
编解码 物联网 开发者
FLUX.1 Kontext 的全生态教程来啦!AIGC专区在线试玩!
Flux.1 Kontext [dev] 开源模型大家都用上了吗?小编汇总了3个使用教程,打包送上!
3225 1
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
AI专业术语解析
本文围绕AI领域常见专业术语展开解析,涵盖基础概念、模型与算法、数据处理、生成式人工智能、自然语言处理等多个方面。基础概念类包括人工智能、机器学习、深度学习等,详细阐述其定义、原理及应用场景。模型与算法类涉及支持向量机、决策树、生成对抗网络等。数据处理类介绍了数据标注、特征工程、模型评估等。生成式人工智能相关术语有生成式AI、文本生成、图像生成等。自然语言处理方面涵盖分词、词向量、注意力机制等。此外,还解释了大模型、小样本学习、端到端、对齐等其他专业术语,为读者理解AI领域提供了全面且深入的参考。
2112 4
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
AI 加速科学发现丨Al For Science 专场直播
AI 科学家时代正加速到来,但科研智能体真的做好准备了吗?真实科研场景中,多模态智能体能否在推理、规划与执行等关键能力上达到人类科研人员的水平?我们又该如何准确评估它们的科学认知能力和数据分析表现?
197 0
|
人工智能 弹性计算 算法
“通义点金”升级!
“通义点金”升级!
1313 0

热门文章

最新文章