You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

请求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的错误信息很直观,比如密钥不对会直接提示,文件格式不对也会说清楚。

火山引擎 最新活动