通用信息提取工具Anything-Extract:从多格式文档到结构化数据的自动化处理

news2026/5/1 2:41:26
1. 项目概述一个能“读懂”一切的智能提取器最近在折腾一些文档处理和数据分析的活儿发现一个挺普遍又头疼的问题面对五花八门的文件格式想快速、精准地提取出里面的结构化信息比如表格、联系人、关键字段往往得写一堆胶水代码调用不同的库处理各种边界情况。直到我深度体验了 GitHub 上的Anything-Extract这个项目才感觉找到了一个“万能钥匙”。这个项目简单来说就是一个基于 Python 的、开箱即用的通用信息提取工具链。它不挑食PDF、Word、Excel、图片、邮件、网页甚至压缩包都能往里扔然后给你吐出干净、结构化的文本和数据。它的核心价值在于“统一”和“智能”。过去我们可能需要用PyPDF2处理 PDF用python-docx处理 Word用PIL和pytesseract处理图片 OCR流程繁琐且错误处理复杂。Anything-Extract把这些能力封装在一个统一的接口后面你只需要关心“我要从什么文件里提取什么”而不需要关心底层用的是哪个解析引擎。更关键的是它集成了像 PaddleOCR、Unstructured 这样的先进工具对复杂排版、扫描件、混合文档的支持相当不错大大提升了信息提取的准确率和自动化程度。无论你是做数据分析需要批量处理报表做知识管理需要构建文档库还是做自动化办公需要抓取邮件和合同里的关键信息这个项目都能显著降低你的开发门槛。它不是一个简单的轮子合集而是一个经过设计的、面向生产环境的解决方案。接下来我就结合自己的使用和改造经验把这个项目的里里外外拆解清楚并分享如何把它集成到你的工作流中。2. 核心架构与设计哲学解析2.1 模块化与可插拔的设计思想Anything-Extract最让我欣赏的一点是其清晰的模块化架构。它没有试图用一个庞大的、臃肿的类去解决所有问题而是采用了“识别-路由-处理”的管道模式。整个流程可以概括为三步文件类型识别根据文件扩展名、Magic Number文件头字节或内容嗅探确定输入文件的真实格式。这一步是基础确保后续路由到正确的处理器。处理器路由项目内部维护了一个“处理器注册表”。根据识别出的文件类型从注册表中找到对应的处理模块。比如.pdf文件会路由到PDFExtractor.jpg文件会路由到ImageExtractor。执行提取并后处理调用对应的处理器执行具体的解析逻辑如解析PDF流、运行OCR识别。提取出的原始内容通常会经过一些后处理比如清理多余的空格和换行、合并被错误分割的文本块、尝试提取元数据作者、创建日期等。这种设计的优势非常明显高内聚、低耦合。每个处理器只关心自己负责的文件格式内部实现可以独立升级或替换。如果你想支持一种新的文件格式比如.epub电子书你只需要实现一个新的处理器类并注册到系统中即可完全不会影响其他格式的处理流程。这种可插拔性让项目的扩展变得异常简单。2.2 核心依赖与工具链选型项目的强大能力建立在几个优秀的开源库之上。了解这些依赖有助于我们理解其能力边界和可能遇到的问题。文档解析基石unstructured这是当前 Python 生态中功能最全面的文档解析库之一。Anything-Extract重度依赖它来处理PDF、Word、PPT、HTML等格式。unstructured的厉害之处在于它能保留文档的语义结构比如区分标题、段落、列表和表格而不仅仅是提取纯文本。这对于后续的信息结构化至关重要。光学字符识别引擎PaddleOCR对于图片或扫描版PDFOCR是必不可少的。项目选择了百度的PaddleOCR而不是更古老的 Tesseract。原因在于PaddleOCR在中文场景下的识别准确率尤其是对复杂排版和模糊图像的处理表现更为出色。它支持多语言且提供了丰富的预训练模型。压缩文件处理patool/py7zr等为了处理.zip、.rar、.7z等压缩包项目通过patool这个通用封装库来调用系统或本地安装的解压工具确保了对多种压缩格式的兼容性。邮件解析email标准库与mail-parser对于.eml文件项目结合 Python 标准库email和第三方库mail-parser来解析邮件头、正文纯文本/HTML和附件提取出发件人、收件人、主题、日期等关键元数据。注意依赖的版本兼容性是需要关注的重点。特别是PaddleOCR和unstructured它们自身又依赖一系列深度学习框架如 PaddlePaddle和系统库。在部署时建议使用 Docker 或 Conda 来管理环境避免版本冲突。2.3 配置驱动的灵活性项目没有把所有的逻辑都硬编码在代码里而是提供了丰富的配置选项。通常通过一个config.yaml或环境变量来控制行为例如OCR启用开关对于纯数字PDF可以关闭OCR以提升速度。输出格式选择输出为纯文本、Markdown 还是带有标签的 JSON。语言模型路径指定PaddleOCR使用的语言模型包以适应不同语言场景。处理器白名单/黑名单可以指定只处理某些类型的文件或排除某些类型。这种配置驱动的设计使得同一个工具可以轻松适配不同场景的需求从轻量级的快速提取到深度、精确的结构化解析。3. 从安装到实战手把手搭建提取流水线3.1 环境准备与依赖安装最稳妥的起步方式是使用conda创建一个独立的环境因为深度学习相关的依赖对系统环境比较敏感。# 创建并激活环境 conda create -n anything-extract python3.9 conda activate anything-extract # 克隆项目 git clone https://github.com/ProgrammerAnthony/Anything-Extract.git cd Anything-Extract # 安装核心依赖 pip install -r requirements.txt这里有个关键点requirements.txt里列出的paddleocr和unstructured可能不会自动安装其所有的子依赖。特别是unstructured它对不同类型的文档需要额外的依赖包。官方推荐使用pip install “unstructured[all-docs]”来一次性安装所有文档类型的支持但这会安装非常多的包。更经济的做法是根据你的主要文件类型选择性安装例如# 如果你主要处理PDF和Word pip install “unstructured[pdf,docx]” # 如果你需要处理图片 pip install “unstructured[png,jpeg]”安装PaddleOCR时如果网络环境不佳可能会遇到下载模型失败的问题。可以预先从 PaddleOCR 的 GitHub Release 页面下载对应的中英文识别模型ch_PP-OCRv4_det、ch_PP-OCRv4_rec、en_PP-OCRv4_rec等然后通过配置项指定本地模型路径。3.2 基础使用与API调用安装完成后最基本的用法是通过其提供的命令行接口或 Python API。命令行方式最简单直接适合单文件或批量脚本处理。# 提取单个文件输出到控制台 python -m anything_extract.cli extract /path/to/your/document.pdf # 提取整个目录结果保存为JSON文件 python -m anything_extract.cli extract /path/to/folder --output-dir ./results --format jsonPython API 方式更灵活可以集成到你的自动化脚本或Web服务中。from anything_extract import AnythingExtract # 初始化提取器可以传入配置字典 extractor AnythingExtract(ocr_enabledTrue, language‘ch’) # 提取单个文件 result extractor.extract_file(‘/path/to/your/document.pdf’) print(result[‘text’]) # 获取提取的文本 if result[‘tables’]: # 获取提取的表格列表形式 for table in result[‘tables’]: print(table) # 提取压缩包会自动解压并处理内部文件 result extractor.extract_archive(‘/path/to/your/archive.zip’) # result 是一个列表包含包内每个文件的提取结果第一次运行时PaddleOCR和unstructured可能会下载一些模型或组件需要一点时间。之后的提取速度就取决于文件大小和复杂度了。3.3 处理复杂场景与定制化输出实际项目中文件往往没那么“标准”。下面分享几个处理复杂场景的心得1. 混合内容PDF的处理很多PDF是“原生文本扫描图片”的混合体。Anything-Extract默认会先尝试提取原生文本如果页面内容为空或极少则会自动对该页面启用OCR。但有时候这个阈值判断可能不准确。你可以通过调整unstructured的解析策略来优化from anything_extract import AnythingExtract from unstructured.partition.pdf import partition_pdf # 更精细地控制PDF解析 extractor AnythingExtract() # 你可以通过 monkey patch 或继承的方式自定义 partition_pdf 的参数 # 例如强制对所有页面进行OCR慢但全 result partition_pdf(‘document.pdf’, strategy‘hi_res’, infer_table_structureTrue) # 然后将 result 传递给 extractor 进行后续处理2. 表格提取的增强虽然unstructured的表格提取已经很强但对于跨页表格或边框不清晰的表格效果可能打折扣。一个补充方案是结合camelot或tabula-py这两个专门的PDF表格提取库。你可以在自定义处理器中先尝试用unstructured如果提取的表格不理想再调用camelot作为后备方案。3. 自定义后处理管道提取出的文本可能包含你不想要的页眉、页脚、页码。项目允许你注册自定义的“清洗函数”。例如写一个函数来移除所有纯数字的行可能是页码或者合并被错误断开的句子。def my_text_cleaner(text: str, metadata: dict) - str: “”“自定义文本清洗逻辑”“” import re # 移除形如 ‘- 1 -‘ 的页码 text re.sub(r‘^s*[-–]s*ds*[-–]s*$’, ‘’, text, flagsre.MULTILINE) # 合并因换行中断的英文单词 text re.sub(r‘(w-)s*n’, r‘1’, text) return text.strip() extractor AnythingExtract(post_processors[my_text_cleaner])4. 深入核心自定义处理器与扩展开发当内置的处理器不能满足你的需求时扩展是必然的。下面以添加一个处理.mdMarkdown 文件的处理器为例演示扩展流程。4.1 实现一个自定义处理器在项目中处理器通常继承自一个基础类并实现extract方法。# 假设在项目结构中创建anything_extract/processors/markdown_extractor.py import logging from typing import Dict, Any, Optional from .base_extractor import BaseExtractor logger logging.getLogger(__name__) class MarkdownExtractor(BaseExtractor): “”“处理 Markdown (.md) 文件的提取器”“” # 定义该处理器支持的文件类型扩展名列表 supported_extensions [‘.md’, ‘.markdown’] def extract(self, file_path: str, **kwargs) - Dict[str, Any]: “”“ 核心提取方法。 Args: file_path: 待处理文件的路径。 **kwargs: 其他可能传入的参数。 Returns: 包含提取内容的字典。标准字段包括 ‘text’, ‘metadata’ 等。 “”“ result { ‘text’: ‘’, ‘metadata’: {}, ‘source’: file_path } try: with open(file_path, ‘r’, encoding‘utf-8’) as f: content f.read() # 1. 提取原始文本去除Markdown标记 # 这里简单处理直接返回原始内容。更复杂的可以调用 markdown 库转换为纯文本。 result[‘text’] content # 2. 提取元数据许多Markdown文件头部有YAML Front Matter import yaml import re front_matter_match re.match(r‘^---s*n(.*?)n---s*n’, content, re.DOTALL) if front_matter_match: try: metadata yaml.safe_load(front_matter_match.group(1)) result[‘metadata’].update(metadata) # 可选从正文中移除Front Matter result[‘text’] content[front_matter_match.end():].strip() except yaml.YAMLError as e: logger.warning(f“Failed to parse YAML front matter in {file_path}: {e}”) # 3. 可以尝试提取标题、链接等作为扩展字段 titles re.findall(r‘^#s(.)$’, content, re.MULTILINE) if titles: result[‘metadata’][‘headings’] titles result[‘status’] ‘success’ except Exception as e: logger.error(f“Error extracting markdown file {file_path}: {e}”, exc_infoTrue) result[‘status’] ‘error’ result[‘error’] str(e) return result4.2 注册处理器到系统为了让框架能自动发现和使用你的处理器需要在适当的位置进行注册。通常项目会有一个注册机制例如在一个__init__.py文件或专门的注册中心里。# 在 anything_extract/processors/__init__.py 中 from .markdown_extractor import MarkdownExtractor # 已有的处理器列表 PROCESSORS [ …, MarkdownExtractor, # 添加这行 ]或者如果项目使用配置文件你可能需要在配置中声明extractors: - class: anything_extract.processors.markdown_extractor.MarkdownExtractor extensions: [.md, .markdown]4.3 配置与使用自定义处理器完成代码和注册后你需要确保在初始化AnythingExtract时你的新处理器能被加载。如果项目是动态加载的重启你的Python进程即可。之后当你处理一个.md文件时框架就会自动路由到你的MarkdownExtractor。from anything_extract import AnythingExtract extractor AnythingExtract() # 处理器应该已自动注册 result extractor.extract_file(‘README.md’) print(result[‘metadata’].get(‘headings’, []))通过这个例子你可以举一反三为.epub、.csv虽然简单但可能需要特殊解析逻辑、甚至是自定义的二进制格式文件编写处理器。关键在于遵循项目定义的接口规范并正确注册。5. 性能优化与生产环境部署考量当文件量变大或者需要集成到线上服务时性能和生产稳定性就成为关键。5.1 处理速度瓶颈分析与优化提取流程的耗时主要分布在三个环节文件读取/解压、格式解析/OCR识别、后处理。针对大量小文件瓶颈常在频繁的I/O和处理器初始化上。可以采用批量处理模式一次性初始化所有需要的处理器然后使用线程池或进程池并发处理多个文件。Anything-Extract本身可能不直接提供并发接口但你可以很容易地用concurrent.futures包装它。from concurrent.futures import ThreadPoolExecutor, as_completed from anything_extract import AnythingExtract extractor AnythingExtract() # 一个提取器实例处理器已加载 file_paths [‘file1.pdf’, ‘file2.docx’, …] # 大量文件 def process_file(path): return extractor.extract_file(path) with ThreadPoolExecutor(max_workers4) as executor: # 根据CPU和I/O调整worker数量 future_to_file {executor.submit(process_file, fp): fp for fp in file_paths} results {} for future in as_completed(future_to_file): file_path future_to_file[future] try: results[file_path] future.result() except Exception as e: results[file_path] {‘status’: ‘error’, ‘error’: str(e)}针对大文件或复杂OCROCR是最大的性能瓶颈尤其是高分辨率图片。优化策略包括图片预处理在调用OCR前先对图片进行缩放保持宽高比将长边缩放到例如1920像素、灰度化、二值化、去噪。这可以显著减少OCR引擎的处理时间。调整OCR参数PaddleOCR的use_angle_cls使用方向分类器和det_db_thresh文本框检测阈值等参数会影响速度和精度。在非极端场景下可以适当调低精度要求以换取速度。硬件加速确保PaddlePaddle安装了GPU版本并确认OCR确实在使用GPU。对于没有GPU的环境可以尝试使用onnxruntime来加速PaddleOCR的推理。缓存机制对于内容不变的文件提取结果应该被缓存。可以设计一个基于文件哈希值如MD5的缓存层将结果存储到 Redis 或本地 SQLite 数据库中下次请求相同文件时直接返回缓存结果。5.2 内存管理与稳定性处理特大PDF或包含大量高分辨率图片的文件时容易内存溢出。流式处理对于支持分页的格式如PDF尽量采用流式或分页处理模式而不是一次性将整个文件加载到内存。unstructured的partition_pdf函数可以通过include_page_breaksTrue和逐页处理来缓解内存压力。资源限制在生产环境的容器中为Python进程设置明确的内存限制。可以考虑使用像Celery这样的任务队列将提取任务放到独立的工作进程中执行即使某个任务崩溃也不会影响主服务。超时与重试为提取操作设置超时时间。对于偶发性的失败如网络问题导致模型下载失败实现简单的重试机制。5.3 容器化部署与水平扩展最优雅的部署方式是将Anything-Extract封装成一个 RESTful API 服务然后容器化。编写API服务使用 FastAPI 或 Flask 快速搭建一个服务提供POST /extract和POST /extract-batch等端点。创建DockerfileFROM python:3.9-slim WORKDIR /app # 安装系统依赖特别是OCR需要的库 RUN apt-get update apt-get install -y libgl1-mesa-glx libglib2.0-0 tesseract-ocr poppler-utils rm -rf /var/lib/apt/lists/* COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . # 预先下载模型可选可加快第一次启动速度 # RUN python -c “from paddleocr import PaddleOCR; PaddleOCR()” CMD [“uvicorn”, “app.main:app”, “--host”, “0.0.0.0”, “--port”, “8000”]水平扩展由于每个提取请求是计算密集型的且相互独立非常适合无状态水平扩展。在 Kubernetes 或 Docker Swarm 中你可以根据 CPU 负载自动伸缩服务的副本数。将模型文件放在共享存储或每个副本的镜像中以避免节点间同步问题。6. 常见问题排查与实战经验录在实际使用中你肯定会遇到各种“坑”。这里记录了一些典型问题及其解决方案。6.1 依赖安装与环境问题问题安装unstructured[all-docs]或paddlepaddle时失败提示找不到某些系统库。解决这是最常见的问题。在 Ubuntu/Debian 系统上通常需要先安装这些系统库sudo apt-get update sudo apt-get install -y libmagic-dev poppler-utils tesseract-ocr libgl1-mesa-glx libsm6 libxext6 libxrender-dev对于 macOS可以使用brew安装poppler和tesseract。建议将系统依赖的安装步骤明确写在项目的部署文档或 Dockerfile 中。问题PaddleOCR运行时警告或报错提示找不到模型文件。解决PaddleOCR默认会从网络下载模型。如果网络受限可以手动从其 GitHub 仓库或 Gitee 镜像下载模型文件.inference_model目录然后通过初始化参数指定本地路径from anything_extract import AnythingExtract extractor AnythingExtract(ocr_enabledTrue, ocr_kwargs{ ‘lang’: ‘ch’, ‘use_angle_cls’: True, ‘det_model_dir’: ‘/your_path/ch_PP-OCRv4_det_infer’, ‘rec_model_dir’: ‘/your_path/ch_PP-OCRv4_rec_infer’, ‘cls_model_dir’: ‘/your_path/ch_ppocr_mobile_v2.0_cls_infer’ })6.2 内容提取不准确或缺失问题PDF中的表格被识别为普通文本格式全乱。排查首先确认你使用的unstructured版本是否支持表格检测infer_table_structureTrue。其次检查PDF本身有些“表格”实际上是图片或矢量图形这就需要依赖OCR的版面分析能力。可以尝试使用strategy‘hi_res’模式来解析PDF该模式对表格和复杂版面的识别更好但速度更慢。问题从扫描件中提取的文字错别字多。排查OCR精度受图像质量影响极大。在提取前可以尝试对图像进行预处理。虽然Anything-Extract可能未内置但你可以在自定义处理器中添加预处理步骤from PIL import Image, ImageEnhance, ImageFilter import cv2 import numpy as np def preprocess_image_for_ocr(image_path): img Image.open(image_path) # 转换为灰度图 img img.convert(‘L’) # 增强对比度 enhancer ImageEnhance.Contrast(img) img enhancer.enhance(2.0) # 轻微锐化 img img.filter(ImageFilter.SHARPEN) # 二值化 (使用OpenCV效果更好) img_np np.array(img) _, img_bin cv2.threshold(img_np, 0, 255, cv2.THRESH_BINARY cv2.THRESH_OTSU) return Image.fromarray(img_bin)将处理后的图片临时保存再交给OCR引擎往往能提升识别率。6.3 处理流程与集成问题问题处理一个包含多张图片的压缩包时内存占用飙升后进程被杀死。解决这是典型的流式处理缺失问题。不要一次性解压所有图片到内存或临时目录。应该使用zipfile或rarfile库流式读取压缩包内的每个文件提取一个处理一个释放一个。你需要修改或继承内置的压缩包处理器来实现这一点。问题集成到Web服务后并发请求下服务不稳定。解决PaddleOCR等模型并非线程安全。在多线程环境下最佳实践是为每个线程或工作进程创建独立的OCR实例虽然这会增加内存。或者使用一个全局的OCR实例但对其所有调用加锁threading.Lock这会影响并发性能。对于高并发API更推荐使用上述的“任务队列独立工作进程”模式每个工作进程是单线程的拥有独立的模型实例。6.4 输出结果的后续处理提取出的文本和元数据只是原材料要产生价值通常还需要向量化与嵌入使用sentence-transformers或OpenAI的API将文本转换为向量存入向量数据库如Chroma,Qdrant以构建RAG应用。结构化信息抽取利用大语言模型LLM的Function Calling或提示词工程从提取的文本中进一步抽取出更规整的字段如合同中的“甲方”、“乙方”、“金额”、“日期”。内容分类与打标训练一个简单的文本分类模型或者使用零样本分类器对提取的文档内容进行自动分类和打标签。Anything-Extract提供了一个坚实、可靠的前端信息提取基础。把它作为你智能文档处理流水线的第一个环节后续接上LLM、向量数据库和业务逻辑就能构建出非常强大的自动化应用。它的开源和可扩展性让你能牢牢控制整个流程的每一个细节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2570689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…