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

简介: 本文介绍了在通义点金平台搭建知识库时遇到的表格解析问题及解决方案。问题表现为表格数据被独立存储为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列表的排序步骤可以略掉了。

目录
相关文章
|
11月前
|
人工智能 前端开发 JavaScript
新的LLM交互模式!大模型终于能自己生成交互式 UI 了
Google Research推出的Generative UI,让大模型不仅能生成内容,还能一键创建含地图、图表、小游戏等交互功能的完整网页。告别“文字墙”,迈向“内容即应用”的新时代,82.8%用户偏爱此创新体验。
1872 8
|
9月前
|
机器学习/深度学习 自然语言处理 前端开发
智谱大模型GLM-4.7火爆技术圈:探秘其高效实用的成长之路!
GLM-4.7的发布标志着大模型竞争进入工程化落地新阶段。其核心突破并非单纯参数增长,而是通过交织式思考等机制,显著提升了代码生成与多步任务执行(Agent)的稳定性和可交付性。智谱采用“先验证再上桌”的严谨数据筛选策略,并配套开源强化学习框架Slime,将模型训练打造成系统工程。这预示着未来竞争焦点将从“模型更聪明”转向“体系更可靠、更能干活”
|
9月前
|
人工智能 自然语言处理 搜索推荐
金融智能客服的“模力时刻”:大模型驱动下的技术跃迁
如何手搓一个“有活人感”的金融智能客服?
770 2
|
7月前
|
人工智能 JavaScript 机器人
|
7月前
|
API iOS开发 Docker
【最新】OpenClaw是什么?OpenClaw能做什么?OpenClaw详细介绍及怎么部署保姆级教程(本地+云端)
在AI技术从“生成内容”向“落地执行”深度转型的2026年,OpenClaw(前身为Clawdbot、曾用名Moltbot)凭借开源、本地优先、强执行能力的核心优势,成为个人与企业构建“自托管式数字员工”的首选工具。截至2026年3月,其GitHub星标已突破28万,社区贡献者超378人,技能生态覆盖办公、开发、生活等全场景,彻底打破了传统AI“只说不做”的局限,真正实现了从“对话式建议”到“自动化执行”的跨越。
4965 5
|
10月前
|
人工智能 供应链 自动驾驶
向AI构建能力,用模型产出价值,让金融优质发展
近年来,新一代人工智能技术迅速发展,给各行业的变革带来新的机遇。大模型、智能体、AI基础设施快速升级,面向未来,AI具有新的方向和时代定义,无疑成为新的生产力。
811 0
|
测试技术 Go 开发工具
Go语言项目工程化 — 常见开发工具与 CI/CD 支持
Go语言项目工程化实践中的开发工具与CI/CD支持,涵盖格式化、静态检查、依赖管理、构建打包、自动化测试及部署策略。内容包括常用工具如gofmt、go vet、golangci-lint、Docker、GitHub Actions等,并提供实战建议与总结,提升团队协作效率与项目质量。
|
SQL 分布式计算 资源调度
干货 | Apache Flink 入门技术分享 PPT(多图预警)1
干货 | Apache Flink 入门技术分享 PPT(多图预警)1
2190 0
干货 | Apache Flink 入门技术分享 PPT(多图预警)1
|
XML JSON API
如何在 Postman 中上传文件和 JSON 数据
如果你想在 Postman 中同时上传文件和 JSON 数据,本文将带你一步一步地了解整个过程,包括最佳实践和技巧,让你的工作更轻松。
|
前端开发 Java Spring
【Spring】“请求“ 之后端传参重命名,传递数组、集合,@PathVariable,@RequestPart
【Spring】“请求“ 之后端传参重命名,传递数组、集合,@PathVariable,@RequestPart
663 2