From 0c7b36217310c99b64a7f9150ffd5648fbd44003 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AD=90=E9=BB=98?= <925456043@qq.com> Date: Tue, 14 Apr 2026 19:58:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A1=A5=E9=BD=90L09=E7=9A=84MinerU?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=A3=85=E9=85=8D=E9=85=8D=E7=BD=AE=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 MinerU Spring Boot 配置属性类 - 新增 PDF 文档解析自动装配并暴露统一 DocumentParseService --- .../pdf/mineru/MineruDocumentProperties.java | 119 ++++++++++++++++++ .../mineru/MineruPdfAutoConfiguration.java | 65 ++++++++++ 2 files changed, 184 insertions(+) create mode 100644 easy-agents-spring-boot-starter/src/main/java/com/easyagents/spring/boot/document/pdf/mineru/MineruDocumentProperties.java create mode 100644 easy-agents-spring-boot-starter/src/main/java/com/easyagents/spring/boot/document/pdf/mineru/MineruPdfAutoConfiguration.java diff --git a/easy-agents-spring-boot-starter/src/main/java/com/easyagents/spring/boot/document/pdf/mineru/MineruDocumentProperties.java b/easy-agents-spring-boot-starter/src/main/java/com/easyagents/spring/boot/document/pdf/mineru/MineruDocumentProperties.java new file mode 100644 index 0000000..ba30f29 --- /dev/null +++ b/easy-agents-spring-boot-starter/src/main/java/com/easyagents/spring/boot/document/pdf/mineru/MineruDocumentProperties.java @@ -0,0 +1,119 @@ +package com.easyagents.spring.boot.document.pdf.mineru; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * MinerU Spring Boot 配置。 + * + * @author Codex + * @since 2026-04-14 + */ +@ConfigurationProperties(prefix = "easy-agents.document.pdf.mineru") +public class MineruDocumentProperties { + + private String baseUrl; + private Integer connectTimeoutMs = 3000; + private Integer readTimeoutMs = 600000; + private Integer writeTimeoutMs = 600000; + private Integer pollIntervalMs = 1000; + private Integer resultTimeoutMs = 1800000; + private String defaultBackend = "vlm-http-client"; + private String defaultParseMethod = "auto"; + private List defaultLangList = new ArrayList(Arrays.asList("ch")); + private Boolean defaultFormulaEnable = true; + private Boolean defaultTableEnable = true; + + public String getBaseUrl() { + return baseUrl; + } + + public void setBaseUrl(String baseUrl) { + this.baseUrl = baseUrl; + } + + public Integer getConnectTimeoutMs() { + return connectTimeoutMs; + } + + public void setConnectTimeoutMs(Integer connectTimeoutMs) { + this.connectTimeoutMs = connectTimeoutMs; + } + + public Integer getReadTimeoutMs() { + return readTimeoutMs; + } + + public void setReadTimeoutMs(Integer readTimeoutMs) { + this.readTimeoutMs = readTimeoutMs; + } + + public Integer getWriteTimeoutMs() { + return writeTimeoutMs; + } + + public void setWriteTimeoutMs(Integer writeTimeoutMs) { + this.writeTimeoutMs = writeTimeoutMs; + } + + public Integer getPollIntervalMs() { + return pollIntervalMs; + } + + public void setPollIntervalMs(Integer pollIntervalMs) { + this.pollIntervalMs = pollIntervalMs; + } + + public Integer getResultTimeoutMs() { + return resultTimeoutMs; + } + + public void setResultTimeoutMs(Integer resultTimeoutMs) { + this.resultTimeoutMs = resultTimeoutMs; + } + + public String getDefaultBackend() { + return defaultBackend; + } + + public void setDefaultBackend(String defaultBackend) { + this.defaultBackend = defaultBackend; + } + + public String getDefaultParseMethod() { + return defaultParseMethod; + } + + public void setDefaultParseMethod(String defaultParseMethod) { + this.defaultParseMethod = defaultParseMethod; + } + + public List getDefaultLangList() { + return defaultLangList; + } + + public void setDefaultLangList(List defaultLangList) { + this.defaultLangList = defaultLangList == null + ? new ArrayList(Arrays.asList("ch")) + : defaultLangList; + } + + public Boolean getDefaultFormulaEnable() { + return defaultFormulaEnable; + } + + public void setDefaultFormulaEnable(Boolean defaultFormulaEnable) { + this.defaultFormulaEnable = defaultFormulaEnable; + } + + public Boolean getDefaultTableEnable() { + return defaultTableEnable; + } + + public void setDefaultTableEnable(Boolean defaultTableEnable) { + this.defaultTableEnable = defaultTableEnable; + } +} diff --git a/easy-agents-spring-boot-starter/src/main/java/com/easyagents/spring/boot/document/pdf/mineru/MineruPdfAutoConfiguration.java b/easy-agents-spring-boot-starter/src/main/java/com/easyagents/spring/boot/document/pdf/mineru/MineruPdfAutoConfiguration.java new file mode 100644 index 0000000..85e9051 --- /dev/null +++ b/easy-agents-spring-boot-starter/src/main/java/com/easyagents/spring/boot/document/pdf/mineru/MineruPdfAutoConfiguration.java @@ -0,0 +1,65 @@ +package com.easyagents.spring.boot.document.pdf.mineru; + +import com.easyagents.document.core.DocumentParseService; +import com.easyagents.document.pdf.PdfDocumentParseService; +import com.easyagents.document.pdf.mineru.MineruPdfDocumentParseService; +import com.easyagents.document.pdf.mineru.MineruProperties; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * MinerU PDF 文档解析自动装配。 + * + * @author Codex + * @since 2026-04-14 + */ +@Configuration(proxyBeanMethods = false) +@ConditionalOnClass(MineruPdfDocumentParseService.class) +@ConditionalOnProperty(prefix = "easy-agents.document.pdf", name = "provider", havingValue = "mineru") +@EnableConfigurationProperties(MineruDocumentProperties.class) +public class MineruPdfAutoConfiguration { + + /** + * 注册统一 PDF 解析服务。 + * + * @param properties Spring Boot 配置 + * @return PDF 解析服务 + */ + @Bean + @ConditionalOnMissingBean(PdfDocumentParseService.class) + public PdfDocumentParseService pdfDocumentParseService(MineruDocumentProperties properties) { + return new MineruPdfDocumentParseService(toMineruProperties(properties)); + } + + /** + * 将 PDF 服务以统一文档解析服务类型暴露,便于调用方直接按抽象注入。 + * + * @param pdfDocumentParseService PDF 解析服务 + * @return 统一文档解析服务 + */ + @Bean + @ConditionalOnMissingBean(DocumentParseService.class) + public DocumentParseService documentParseService(PdfDocumentParseService pdfDocumentParseService) { + return pdfDocumentParseService; + } + + private MineruProperties toMineruProperties(MineruDocumentProperties properties) { + MineruProperties mineruProperties = new MineruProperties(); + mineruProperties.setBaseUrl(properties.getBaseUrl()); + mineruProperties.setConnectTimeoutMs(properties.getConnectTimeoutMs()); + mineruProperties.setReadTimeoutMs(properties.getReadTimeoutMs()); + mineruProperties.setWriteTimeoutMs(properties.getWriteTimeoutMs()); + mineruProperties.setPollIntervalMs(properties.getPollIntervalMs()); + mineruProperties.setResultTimeoutMs(properties.getResultTimeoutMs()); + mineruProperties.setDefaultBackend(properties.getDefaultBackend()); + mineruProperties.setDefaultParseMethod(properties.getDefaultParseMethod()); + mineruProperties.setDefaultLangList(properties.getDefaultLangList()); + mineruProperties.setDefaultFormulaEnable(properties.getDefaultFormulaEnable()); + mineruProperties.setDefaultTableEnable(properties.getDefaultTableEnable()); + return mineruProperties; + } +}