请求Mistral REST API本地PDF文件上传及后续OCR的可用代码示例
请求Mistral REST API本地PDF文件上传及后续OCR的可用代码示例
Hey,我正好折腾过Mistral的Files接口和OCR相关的调用,给你整理了亲测可用的代码,分两步来,都是用Python的requests库实现的,你直接复制替换参数就能跑:
第一步:上传本地PDF到Mistral Files Endpoint
这一步核心是用multipart/form-data格式发送请求,Mistral的Files接口要求这种格式来处理文件上传。
import requests # 替换成你的Mistral API密钥 MISTRAL_API_KEY = "your-mistral-api-key-here" # 替换成你本地PDF的路径 LOCAL_PDF_PATH = "/path/to/your/local/file.pdf" def upload_pdf_to_mistral(file_path): url = "https://api.mistral.ai/v1/files" headers = { "Authorization": f"Bearer {MISTRAL_API_KEY}" } # 注意files的格式:键是"file",值是打开的文件对象 with open(file_path, "rb") as f: files = {"file": (file_path, f, "application/pdf")} response = requests.post(url, headers=headers, files=files) if response.status_code == 200: file_data = response.json() print(f"文件上传成功!File ID: {file_data['id']}") return file_data["id"] else: print(f"上传失败,错误信息:{response.text}") return None # 执行上传,获取file_id file_id = upload_pdf_to_mistral(LOCAL_PDF_PATH)
上传注意事项:
- 一定要替换
MISTRAL_API_KEY为你自己的密钥,这个可以在Mistral的控制台里找到 - 本地PDF路径要写绝对路径或者相对路径(确保脚本能找到文件)
- Mistral当前支持的最大文件大小是512MB,单文件上传,别传超了
- 接口返回的
file_id一定要存好,第二步OCR要用到它
第二步:利用Mistral API对上传的PDF做OCR(提取文本)
Mistral的Chat Completion API支持直接关联已上传的文件,不管是原生文本PDF还是扫描件(模型会自动做OCR),我们只需要在请求里指定file_id,并让模型提取所有内容即可。
def run_ocr_on_mistral_file(file_id): url = "https://api.mistral.ai/v1/chat/completions" headers = { "Authorization": f"Bearer {MISTRAL_API_KEY}", "Content-Type": "application/json" } payload = { "model": "mistral-large-latest", # 推荐用大模型,OCR精度更高 "messages": [ { "role": "user", "content": f"请提取上传文件(file_id: {file_id})中的所有文本内容,包括扫描件里的手写或打印文字,确保不要遗漏任何信息。" } ], "temperature": 0.0 # 温度设为0,保证输出稳定,不添加额外内容 } response = requests.post(url, headers=headers, json=payload) if response.status_code == 200: result = response.json() extracted_text = result["choices"][0]["message"]["content"] print("OCR提取结果:") print(extracted_text) # 可以把结果保存到本地文件 with open("ocr_extracted_text.txt", "w", encoding="utf-8") as f: f.write(extracted_text) return extracted_text else: print(f"OCR处理失败,错误信息:{response.text}") return None # 如果第一步上传成功,就执行OCR if file_id: run_ocr_on_mistral_file(file_id)
OCR注意事项:
- 推荐用
mistral-large-latest模型,小模型对扫描件的OCR支持不如大模型 - 如果你的PDF页数很多(比如超过100页),可以把prompt改成“分批次提取并返回所有文本”,或者调用异步接口(不过同步接口对常规页数完全够用)
- 扫描件的清晰度会影响OCR结果,模糊、倾斜的文件可能会有少量识别误差
如果运行过程中遇到权限或者格式错误,直接看返回的response.text,Mistral的错误信息很直观,比如密钥不对会直接提示,文件格式不对也会说清楚。




