上海合合信息科技股份有限公司(以下簡稱為合合信息)是一家深耕人工智能、OCR(光學字符識別)及商業大數據技術領域的科技企業。該公司擁有領先的智能文字識別技術,其名片全能王(CamCard)、掃描全能王(CamScanner)和啟信寶等核心產品的用戶覆蓋全球200多個國家和地區,服務用戶超過10億。
在OCR領域,合合信息實力雄厚,可以提供高精度的文檔識別與處理解決方案,滿足合同比對、財報管理、證照識別等多種場景需求。其OCR技術具備跨格式(Word、PDF和圖片)比對、智能糾錯、篡改檢測等能力,能夠精準識別復雜表格、跨頁內容以及多語言文本。針對企業級文字識別場景,合合信息旗下的TextIn智能文檔處理云平臺及其他OCR私有化部署產品,可以靈活適配不同用戶的復雜需求。
當前,眾多企業正在積極構建文檔審核智能體。MaxKB開源企業級智能體平臺的文檔提取組件主要針對純文本內容提取,并將結果傳遞給大模型節點,對于PDF掃描件文檔難以實現有效提取。本文將為您介紹MaxKB與TextIn智能文檔處理云平臺相結合,實現PDF掃描件文檔提取與審核功能的具體方案。
一、實現方案
“MaxKB+TextIn”的PDF文檔提取基于MaxKB V2版本實現。這主要是考慮到V2版本會存儲原文,實現起來更簡單。整體流程遵循“用戶/文檔信息錄入→工具提取文檔關鍵信息→大模型融合信息執行審核并輸出結果”的實現路徑。
1.開啟文件MaxKB的文件上傳功能,獲取文件元數據信息;
2.通過編寫函數工具,把文件ID拼接到原文的鏈接上(通過此鏈接可以點擊直接下載原文);
3.通過函數庫實現創建臨時文件保存PDF文件,然后調用TextIn智能文檔處理云平臺的API接口實現上傳PDF文件并轉換為Markdown格式,然后返回轉換結果;
4.調用大模型,結合前面提取的文檔信息和用戶需求,讓AI執行“文檔審核”邏輯,生成審核結果或回答。
▲圖1 通過API實現PDF掃描件文檔審核流程
二、關鍵步驟解析
1.生成PDF下載鏈接
在MaxKB高級編排中啟用文件上傳功能后,MaxKB系統將在{{開始.document}}參數中存儲用戶上傳文檔的URL信息。通過編寫函數工具解析該參數獲取URL,并按http://:<端口號>/admin/application/的格式輸出,即可生成對應的PDF文件下載鏈接。
輸入參數配置為:
函數代碼如下:
import jsondef build_file_url_from_json(data):"""從數據中解析出 file_id 并拼接 URL支持輸入:JSON字符串 或 已解析的Python列表對象參數:data (str or list): 包含文件信息的JSON字符串或Python列表返回:str: 拼接后的完整URL"""try:# 如果輸入是字符串,嘗試解析為JSONif isinstance(data, str):# 替換單引號為雙引號(處理不標準的JSON)data_str= data.replace("'", '"')data = json.loads(data_str)# 驗證數據格式:必須是列表且第一個元素有file_idif not isinstance(data, list) or len(data) == 0:raise ValueError("數據必須是非空列表")if 'file_id' not in data[0]:raise ValueError("列表中的元素缺少'file_id'字段")return "http://10.1.12.36:8080/admin/oss/file/" + data[0]['file_id']except json.JSONDecodeError:raise ValueError("無效的JSON字符串")except Exception as e:raise ValueError(f"解析失敗: {str(e)}")def process_data(input_data): try:file_url = build_file_url_from_json(input_data)print("轉換成功")return file_urlexcept ValueError as e:print(f"轉換失敗: {str(e)}") return None
流程編排效果如下:
2.創建TextIn接口調用函數
函數通過調用TextIn的OCR服務,將指定PDF掃描件下載鏈接的文檔轉換為Markdown格式文本。使用前,請注冊TextIn智能文檔處理云平臺(www.textin.com)獲取認證憑證(x-ti-app-id和x-ti-secret-code),替換代碼中的相應參數值。
輸入參數配置為:
函數代碼如下:
import os
import requests
import tempfiledef download_and_convert_pdf(pdf_url):"""下載PDF并轉換為Markdown,返回轉換結果"""try:# 創建臨時文件保存PDFwith tempfile.NamedTemporaryFile(delete=False, suffix='.pdf') as temp_file:temp_pdf_path = temp_file.name# 下載PDFresponse = requests.get(pdf_url)response.raise_for_status()temp_file.write(response.content)# API端點url = "https://api.textin.com/ai/service/v1/pdf_to_markdown"headers = {"x-ti-app-id": "eb4b7ff649d97b0c9***********","x-ti-secret-code": "9c635bae8961f55eed************","Content-Type": "application/octet-stream"}# 讀取PDF文件內容并發送請求with open(temp_pdf_path, 'rb') as f:response = requests.post(url, headers=headers, data=f.read())response.raise_for_status()result = response.json()# 清理臨時文件os.unlink(temp_pdf_path)# 處理API響應if result.get("code") == 200:return result.get("result", {}).get("markdown", "")else:print(f"API請求失敗: {result.get('message', '未知錯誤')}")return Noneexcept requests.exceptions.RequestException as e:print(f"網絡請求錯誤: {e}")return Noneexcept Exception as e:print(f"處理PDF時出錯: {e}")return None# 從外部傳入URL參數
def process_pdf(url): markdown_content = download_and_convert_pdf(url) if markdown_content:print("轉換成功")return markdown_contentelse:print("轉換失敗")return None
3.調用函數實現OCR識別并轉為Markdown格式輸出
函數執行成功后,其返回值將包含經OCR識別并轉換為Markdown格式的文本內容。
4.調用大模型基于輸出的Markdown內容進行審核
在MaxKB的AI對話節點中,大模型能夠深度解析OCR轉換后的Markdown文本。用戶可以針對業務重點靈活配置提示詞,通過定制化的審核直接生成帶修正建議的審核結果,從而降低排查的時間成本。
三、效果展示
首先,準備好一份PDF文檔掃描件。
在MaxKB中構建好工作流,具體如下。
文檔審核的對話結果如下,系統對錯別字進行了標注,給出了語句修改建議、格式調整意見等審核反饋。
四、延伸思考
本文所介紹的PDF掃描件文檔審核方案適用于所有可以通過函數庫接入的OCR工具,無論是合合信息TextIn這樣的專業云服務,還是企業自建的私有化OCR平臺,均可實現靈活接入。MaxKB與OCR技術與服務的結合,能夠幫助用戶有效突破掃描件文檔處理的瓶頸,構建全格式智能審核的閉環。
通過MaxKB與OCR服務的結合,企業不需要投入高成本進行OCR模塊的自研,就能直接復用高精度的文本識別能力,在實際業務場景中實現掃描件的秒級解析與審核,大幅提升文檔處理效率。