企业年报问答RAG挑战赛冠军方案:从零到SotA,一战封神
RAG挑战赛是什么?
任务是基于企业年报构建问答系统。比赛日的流程简而言之:
- 解析阶段:获得100份随机企业的年报(PDF格式,每份最多1000页),限时2.5小时完成解析并构建数据库。
- 问答阶段:系统需在最短时间内回答100道根据模板生成的随机问题。
所有问题必须有明确答案类型,例如:
- 是/非题;
- 公司名称(或多选情况);
- 管理层职位、新产品名称;
- 数值指标:营收、门店数量等。
每个答案必须附带证据页码,确保系统真实检索而非杜撰。
冠军系统架构:
伊利亚·莱斯揭秘了他构建最佳RAG系统并在企业RAG挑战赛中夺冠的独门秘籍。他包揽了所有奖项类别和SotA排行榜的双料冠军。源代码。
除了基础流程,获胜方案还包含两个路由器和LLM重排序模块
完整问答示例可查看这里。
接下来将详细拆解系统构建的每一步,包括踩过的坑和发现的最佳实践。
RAG极速入门
RAG(检索增强生成)通过将大语言模型(LLM)与任意规模的知识库结合,扩展了LLM的能力边界。
基础RAG系统开发流程:
- 解析:将原始文档转换为文本并清洗噪声。
- 入库:构建并填充知识库。
- 检索:根据查询定位相关数据,通常采用向量数据库的语义搜索。
- 生成:用检索结果增强用户提问,通过LLM生成最终答案。
1. 解析:与PDF的搏斗
将PDF转为纯文本是个充满陷阱的战场:
- 保留表格结构
- 维护标题/列表等关键格式
- 识别多栏文本
- 处理图表/图像/公式/页眉页脚等
遇到的奇葩PDF问题(未解决版):
- 90度旋转的表格:解析后变成天书
- 图文混合的图表:文字层和图片层打架
- 字体编码陷阱:肉眼可见但复制即乱码
趣味发现:部分乱码实为凯撒密码,每个单词的ASCII位移量不同。这是防抄袭还是转换事故?至今成谜。
解析器选型
测试了二十余种解析器后,IBM开发的Docling脱颖而出。但仍需魔改源码:
- 新增JSON元数据输出
- 支持MD/HTML格式表格转换
- 通过GPU加速(租用4090显卡云服务器,每小时0.7美元)
最终40分钟解析15万页,速度碾压其他选手。
2. 入库:知识库的诞生
分块策略
- 原始方案:整页作为块(约2000词)
- 优化方案:300词分块+50词重叠(语义相关性提升30%)
- 每个块记录元数据:ID+父页码
向量化
- 数据库:100个独立FAISS库(每企业对应一个)
- 索引类型:
IndexFlatIP
(暴力搜索保证精度) - 嵌入模型:
text-embedding-3-large
3. 检索:寻找圣杯的旅程
混合搜索(弃用)
向量搜索+BM25关键词搜索的合体技,但效果不如预期。
重排序三选一
- 交叉编码器:精度高但速度慢(Jina Reranker表现佳)
- LLM重排序:GPT-4o-mini打分,性价比之王
- 提示词模板:点击查看
- 父页面检索:先定位相关块,再返回整页内容
最终方案组合拳:
- 向量搜索Top30块
- LLM重排序(权重0.7)
- 返回Top10完整页面
4. 生成:提示词的艺术
路由策略
- 企业路由:用正则匹配问题中的公司名,秒级定位对应数据库
- 问题类型路由:根据答案类型(数值/布尔/列表等)动态选择提示词模板
复合问题处理
示例问题:“苹果和微软谁的营收更高?”
- 拆解为:“苹果的营收?”+“微软的营收?”
- 分别检索后比较
思维链(CoT)的精髓
通过结构化输出强制LLM分步推理:
class AnswerSchema(BaseModel):step_by_step_analysis: str # 详细推理过程reasoning_summary: str # 结论摘要relevant_pages: List[int] # 证据页码final_answer: Union[str, int, float] # 严格格式化答案
提示词打磨心法
- 为每种问题类型定制指令(例如数值必须去除货币符号)
- 包含单样本示例(示范完美回答格式)
- 通过200+次迭代优化措辞
5. 性能与意外发现
速度
- 全量100问仅需2分钟(利用OpenAI的TPM限速阈值)
- 批处理25问/请求
反直觉结论
- 表格序列化:虽酷炫但降低效果(干净表格无需额外处理)
- 小模型潜力:Llama 8B击败80%参赛者
6. 终极秘籍
冠军系统的魔法不在某个"银弹",而在于:
- 深度理解问题:手动标注验证集200+问题
- 模块化设计:每个组件可单独调参测试
- 细节偏执:从PDF解析到提示词标点皆有规范
伊利亚开放了完整源码
相关文章:
企业年报问答RAG挑战赛冠军方案:从零到SotA,一战封神
RAG挑战赛是什么? 任务是基于企业年报构建问答系统。比赛日的流程简而言之: 解析阶段:获得100份随机企业的年报(PDF格式,每份最多1000页),限时2.5小时完成解析并构建数据库。问答阶段…...
深入理解 HTML5 语义元素:提升网页结构与可访问性
引言 在构建网页的过程中,合理的结构与清晰的语义对于网页的质量、可维护性以及搜索引擎优化(SEO)都至关重要。HTML5 引入了一系列语义元素,为开发者提供了更精准描述网页内容的工具。本文将深入探讨 HTML5 语义元素的作用、使用…...
DeepSeek vs Grok vs ChatGPT:三大AI工具优缺点深度解析
一、DeepSeek:低成本与中文专精的本地化AI 优点 中文处理能力卓越 DeepSeek针对中文语法和文化背景进行了深度优化,尤其在古文翻译、诗歌创作和技术文档生成中表现突出,远超ChatGPT的中文支持能力。高效推理与低成本 采用混合专家ÿ…...
MCP(模型上下文协议)简单案例
MCP(模型上下文协议)的标准化接口 MCP(Model Context Protocol,模型上下文协议)是由Anthropic开发的一种开放协议,旨在标准化大型语言模型(LLM)与外部数据源和工具的交互方式1。它就…...
BGP基础概念与核心架构
一、BGP 协议定义与定位 BGP(Border Gateway Protocol,边界网关协议) 是互联网中唯一的域间路由协议(EGP),用于在不同自治系统(AS)之间交换路由信息。与 OSPF、IS-IS 等域内路由协议…...
【经济保护主义叙事】
第一层:表面逻辑——经济保护主义叙事 公开理由:特朗普宣称加征关税是为了“保护美国制造业”“减少贸易逆差”“维护国家安全”,并强调通过关税迫使贸易伙伴降低壁垒,促进产业链回流美国。 底层逻辑:通过民族主义叙事…...
遵循IEC 62304:构建安全可靠的医疗器械软件
目录 一、IEC 62304 标准概述 1. 标准定位与适用范围 二、核心内容与要求 1. 软件安全等级(Software Safety Classification) (1)分级标准 (2)分级依据 (3)验证要求 2. 软件…...
ARM 架构下 spin_lock 实现
阅读该文章前,需要对原子指令有所了解,推荐阅读 聊一聊原子操作和弱内存序 1、概念 内核当发生访问资源冲突的时候,可以有两种锁的解决方案选择: 一个是原地等待一个是挂起当前进程,调度其他进程执行(睡眠…...
计算机视觉算法实现——SAM实例分割:原理、实现与应用全景
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 实例分割领域概述 实例分割(Instance Segmentation)是计算机视觉领域最具挑战性的任务之一,…...
asm汇编字符串操作
提供8个子程序: 1. 字符串长度 STRLEN 2. 字符串替换 REPLACE 3. 字节查找 SEARCHB 4. 双字节查找 SEARCHW 5. 输入字符串 GETSTR 6. 输出字符串 OUTSTR 7. 复制字符串 COPYSTR 8. 查找字符串 SRCHSTR 具体功能及参数描述如下 STRLEN PROC FAR ; IN: ; DS:DXSTRING ;…...
[MSPM0开发]之三MSPM0G3507之时钟系统
一、MSPM0G3507时钟模块概述 MSPM0G3507的时钟系统隶属于其电源管理和时钟单元 (PMCU) 。 PMCU主要负责电源管理、时钟配置和复位控制功能。 时钟模块包含内部和外部 振荡器 oscillators、 时钟监测器 clock monitors以及时钟选择和控制逻辑。 提供了频率时钟计数器frequency …...
如何绕过WAF实现SQL注入攻击?
引言 在渗透测试中,SQL注入(SQLi)始终是Web安全的核心漏洞之一。然而,随着企业广泛部署Web应用防火墙(WAF),传统的注入攻击往往会被拦截。本文将分享一种绕过WAF检测的SQL注入技巧…...
基础数学:图论与信息论
微积分与概率论由此进:基础数学:微积分和概率与统计-CSDN博客 线代与优化理论由此进:基础数学:线性代数与优化理论-CSDN博客 数值分析与离散数学由此进:基础数学:数值分析与离散数学-CSDN博客 四、图论与…...
05-RabbitMQ 面试题-mk
1.RabbitMQ-如何保证消息不丢失? 消息中间件的好处 提供了系统之间的异步调用,让服务与服务之间解耦削峰、填谷场景: 异步发送(验证码、短信、邮件…)MySQL和Redis , ES之间的数据同步分布式事务削峰填谷 消息发送者(publisher )把消息发送给交换机(exchange),由交…...
当当平台商品详情接口设计与调用指南
当当平台商品详情接口设计与调用指南 接口名称 GET /api/product/detail 图书商品核心信息查询接口 请求参数说明 参数名称 类型 是否必填 说明 isbn string 是 国际标准书号(支持13位/10位) product_id string 否 平台内部商品编号(与…...
基于vue框架的住院信息管理系统k08hv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
系统程序文件列表 项目功能:患者,工作人员,预约住院,住院登记,科室信息,床位信息,床位分配,转病房,病历信息,费用信息,出院登记 开题报告内容 基于Vue框架的住院信息管理系统开题报告 一、选题背景与意义 (一)选题背景 随着医疗技术的不…...
Flink 编程基础:Scala 版 DataStream API 入门
大家好!我是心海 流处理技术在大数据时代正变得越来越重要,而 Apache Flink 作为领先的流处理引擎,凭借其高性能、低延迟和丰富的 API 受到了广泛关注。本文将以 Scala 语言为例,详细讲解 Flink DataStream API 的基本编程模型&am…...
noscript 标签是干什么的
vue public目录下的 index.html 会有 <noscript> 标签不知道是干吗的。 其实 noscript 标签在不支持或是禁用JavaScript 的浏览器中显示替代的内容。这个元素可以包含任何 HTML 元素。这个标签的用法也非常简单: <noscript><strong>Were sorry …...
基于 Streamlit 的 PDF 编辑器
你想实现一个基于 Streamlit 的 PDF 编辑器,功能包括: PDF 转 WordPDF 表格提取PDF 拆分页面PDF 转图片 下面是一个初步的 Streamlit 应用框架代码示例,集成了以上功能。使用了常见库如 pdfplumber、PyMuPDF(fitz)、…...
Oracle 排除交集数据 MINUS
MINUS 是 Oracle 数据库中的一种集合操作符,用于返回第一个查询结果中存在但第二个查询结果中 不存在 的 唯一行。其核心功能是 排除交集数据,常用于数据差异分析或过滤特定记录 一、核心功能 排除交集:返回第一个查询结果中 不在第二个查询结…...
.net Core 和 .net freamwork 调用 deepseek api 使用流输出文本(对话补全)
.net Core 调用 deepseek api 使用流输出文本 简下面直接上代码(.net core):最后再贴一个 .net Freamwork 4 可以用的代码TLS 的代码至关重要的:(下面这个) 简 在官网里面有许多的案例:我们通过…...
巧用递归算法:破解编程难题的“秘密武器”
专栏:算法的魔法世界 个人主页:手握风云 目录 一、递归 二、例题讲解 2.1. 汉诺塔问题 2.2. 合并两个有序链表 2.3. 反转链表 2.4. 两两交换链表中的节点 2.5. Pow(x, n) 三、总结 一、递归 递归的概念 一个方法在执行过程中调用自身, 就称为递…...
C++、Python的输入输出及相关的处理操作
一、C 输入输出及相关处理操作 C 是算法竞赛中常用的语言,因其高效性适合处理大数据或严格时间限制的题目。输入输出是基础,但细节处理(如速度优化、格式要求)对比赛结果影响很大。 1. 基本输入输出 C 使用 <iostream> 库…...
Unity协程从入门到精通:告别卡顿,用Coroutine优雅处理异步与时序任务 (Day 27)
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
Web攻防—SSRF服务端请求伪造Gopher伪协议无回显利用
前言 重学Top10的第二篇,希望各位大佬不要见笑。 SSRF原理 SSRF又叫服务端请求伪造,是一种由服务端发起的恶意请求,SSRF发生在应用程序允许攻击者诱使服务器向任意域或资源发送未经授权的请求时。服务器充当代理,执行攻击者构造…...
青少年编程与数学 02-016 Python数据结构与算法 16课题、贪心算法
青少年编程与数学 02-016 Python数据结构与算法 16课题、贪心算法 一、贪心算法的基本概念定义组成部分 二、贪心算法的工作原理三、贪心算法的优点四、贪心算法的缺点五、贪心算法的应用实例(一)找零问题(二)活动安排问题&#x…...
Linux系统Debian最新版12.10安装详细教程,虚拟机系统安装(附系统镜像资源)
前言 Debian是一款以稳定性著称的免费开源Linux发行版,支持多种硬件架构,遵循自由软件原则,并提供庞大的软件仓库和长期维护。 一、环境下载 Debian 12.10镜像下载 💾资源下载👉Debian 12.10镜像下载:ht…...
android display 笔记(十一)surfaceflinger 如何将图层传到lcd驱动的呢?
SurfaceFlinger->>HWC: 提交所有图层(Layer) HWC->>DRM/KMS: 硬件合成(Overlay)或 GPU 合成 DRM/KMS->>LCD Driver: 配置显示控制器(CRTC/Encoder) LCD Driver->>Display: 通过 MI…...
管理大规模监控技术栈的最佳实践
集中管理可观测性数据 集中化监控数据有助于打破信息孤岛,提供系统全景视图。彭博社发现,当团队各自为战时,系统中断往往持续很久才有人意识到多个团队正在独立处理同一问题。通过数据集中管理,他们获得了更全面的基础设施视图&a…...
深入探索C++ STL:从基础到进阶
目录 引言 一、什么是STL 二、STL的版本 三、STL的六大组件 容器(Container) 算法(Algorithm) 迭代器(Iterator) 仿函数(Functor) 空间配置器(Allocator…...
GitHub Desktop 推送报错 Authentication Failed 身份验证失败
弹窗问题: Authentication Failed 验证失败 We were unable to authenticate with https://gitee.com/.Pleaseenter your username and password to try again. 用户名 密码 Depending on your repository’s hosting service, you might need touse a Personal Acc…...
Webpack中的文件指纹:给资源戴上个“名牌”
Webpack中的文件指纹:给资源戴上个“名牌” 你是否想过,当你修改代码后,浏览器为什么仍然拿着旧版资源不放?秘密就在于——文件指纹!简单来说,文件指纹就像给每个构建出来的文件贴上独一无二的“姓名牌”&…...
ESP32开发之ubuntu环境搭建
1. 在Ubuntu官网下载Ubuntu server 20.04版本https://releases.ubuntu.com/20.04.6/ 2. 在vmware下安装Ubuntu 3. 改Ubuntu静态IP $ sudo vi /etc/netplan/00-installer-config.yaml# This is the network config written by ‘subiquity’ network: renderer: networkd eth…...
重构艺术 | 如何优雅地“提炼函数“
在工作中总数遇到非常多的长代码,俗称“屎山”,这类代码读起来特别费劲。自己想重构一遍,但是总感觉缺乏经验指导,因此,多读书,读好书可能是最优解之一。读《重构改善即有代码的设计》有感,便写…...
[项目]基于RT-Thread的CAN通信仪表盘显示屏: 一.项目概述与软硬件说明
基于RT-Thread的CAN通信仪表盘显示屏: 一.项目概述与软硬件说明 一.项目概述二.硬件与软件资源 一.项目概述 功能结构图: 通过上位机发出模拟CAN数据给协议转换板,协议转换板将CAN协议数据转换为迪文屏数据,并通过迪文数据控制相关性质。 …...
如何查看自己 Android App 的私有数据?从 `adb backup` 到数据提取全过程
🛠️ 如何查看自己 Android App 的私有数据?从 adb backup 到数据提取全过程 📌 前言:作为一名 Android 开发者,我常常想知道自己写的 App 在用户设备上的数据存储结构是怎样的,比如有没有数据写入成功、有…...
Windows中xxx.dll动态链接库文件转xxx.a静态库文件
最近在学习探索C/C程序代码中调用Python代码时,出现了一个问题:下载的程序库文件,在使用MinGW编译C/C的代码时,一直提示无法链接,才发现是库类型不对应,无法导入链接。 上图所示的Python对应库,…...
用Java NIO模拟HTTPS
HTTPS流程 名词解释: R1:随机数1 R2:随机数2 R3:随机数3 publicKey:公钥 privateKey:私钥 step1 客户端 client hello R1 服务端 server hello R2 publicKey(验证证书,证书包含公钥) step2 客户端 R3 publicKey加密 服务端 privateKey解密 s…...
基于YOLOv8的火车轨道检测识别系统:技术实现与应用前景
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 引言:火车轨道检测领域概述 铁路运输作为国民经济的大动脉,其安全运行至关重要…...
解决 Ubuntu 上 Docker 安装与网络问题:从禁用 IPv6 到配置代理
解决 Ubuntu 上 Docker 安装与网络问题的实践笔记 在 Ubuntu(Noble 版本)上安装 Docker 时,我遇到了两个常见的网络问题:apt-get update 失败和无法拉取 Docker 镜像。通过逐步排查和配置,最终成功运行 docker run he…...
DVDFab Virtual Drive电脑DVD备份和制作软件 v13.0.3.7 中文绿色便携
前言 DVDFab Virtual Drive是一个很厉害的光盘处理软件,它能帮你做几件事情:复制你的DVD或蓝光光盘作为备份,把这些光盘里的内容转换成其他格式,还能把视频文件刻录到DVD或蓝光光盘上。这个软件很灵活,能处理像DVD、蓝…...
FISCO BCOS区块链Postman接口测试:高级应用与实战技巧 [特殊字符]
引言:为什么Postman是FISCO BCOS测试的利器? 在区块链开发领域,接口测试是确保系统稳定性和安全性的关键环节。作为国产领先的联盟链平台,FISCO BCOS在金融、政务、供应链等多个领域得到广泛应用。而Postman作为一款功能强大的API测试工具,凭借其直观的图形界面和丰富的测…...
a sort.py demo
这份代码展示了如何使用 sort.py。注意,此处,我将文件名改为 my_sort.py。 你并不能直接 copy 使用,因为环境,包,还有模型。 此处使用 SSD-MobileNetv2 进行物体检测,将结果传入以 np 数组的形式传入sort…...
Linux 入门八:Linux 多进程
一、概述 1.1 什么是进程? 在 Linux 系统中,进程是程序的一次动态执行过程。程序是静态的可执行文件,而进程是程序运行时的实例,系统会为其分配内存、CPU 时间片等资源。例如,输入 ls 命令时,系统创建进程…...
学习如何设计大规模系统,为系统设计面试做准备!
前言 在当今快速发展的技术时代,系统设计能力已成为衡量一名软件工程师专业素养的重要标尺。随着云计算、大数据、人工智能等领域的兴起,构建高性能、可扩展且稳定的系统已成为企业成功的关键。然而,对于许多工程师而言,如何有效…...
前端防御性编程
关于防御性编程 你是否遇到过,接口请求失败或者返回数据错误,导致系统白屏或者前端自身写的代码存在一些缺陷,导致整个系统不够健壮,从而导致系统白屏 常见的问题与防范 最常见的问题 访问了null或者undefined的属性 null.a …...
Java工具类-assert断言
我们可能经常在项目的单元测试或者一些源码中看到别人在使用assert关键字,当然也不只是Java语言,很多编程语言也都能看到,我们大概知道断言可以用于测试中条件的校验,但却不经常使用,本文总结了Java中该工具类的使用。…...
215. 数组中的第K个最大元素
1、题目分析 顾名思义。 2.算法原理 利用排序,再找到第k个最大的数字即可。 3.代码实操 class Solution { public:int findKthLargest(vector<int>& nums, int k) {sort(nums.begin(),nums.end());return nums[nums.size()-k];//123456真的方便啊} };…...
【2025年泰迪杯数据挖掘挑战赛】B题 详细解题思路+数据预处理+代码分享
目录 2025年泰迪杯B题详细解题思路问题一问题分析数学模型Python代码Matlab代码 问题二问题分析数学模型Python代码Matlab代码 问题三问题分析数学模型Python代码Matlab代码 问题四问题分析数学模型Python代码Matlab代码 2025年泰迪杯B题详细解题思路 初步分析整理了B题的赛题分…...
对shell脚本敏感命令进行加密执行
我要加密这条命令:rm /root/scripty.sh 如何利用openssl aes-256-cbc 实现加密和解密,并执行命令 加密、解密并执行命令的完整流程 以下是使用 openssl aes-256-cbc 加密命令 rm /root/scripty.sh,解密并执行的详细步骤: 1. 加密…...