文件输入:如何将PDF文件作为OpenAI API的输入

159 阅读3分钟

文件输入:如何将PDF文件作为OpenAI API的输入

具有视觉能力的OpenAI模型也可以接受PDF文件作为输入。你可以通过Base64编码的数据形式提供PDF文件,或者使用通过API控制台上传到/v1/files端点后获得的文件ID。

工作原理

为了帮助模型理解PDF内容,我们会将提取的文本和每一页的图像都放入模型的上下文中。这样模型就可以同时使用文本和图像来生成响应。例如,当图表中包含文本中没有的关键信息时,这种方式就非常有用。

文件URL

你可以通过链接外部URL来上传PDF文件输入。

链接外部URL到文件以在响应中使用

curl "https://api.aaaaapi.com/v1/responses" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $OPENAI_API_KEY" \
    -d '{
        "model": "gpt-4.1",
        "input": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "input_file",
                        "file_url": "https://www.berkshirehathaway.com/letters/2024ltr.pdf"
                    },
                    {
                        "type": "input_text",
                        "text": "分析这封信并提供要点摘要。"
                    }
                ]
            }
        ]
    }'
import OpenAI from "openai";
const client = new OpenAI({
  baseURL: "https://api.aaaaapi.com"
});

const response = await client.responses.create({
    model: "gpt-4.1",
    input: [
        {
            role: "user",
            content: [
                {
                    type: "input_file", 
                    file_url: "https://www.berkshirehathaway.com/letters/2024ltr.pdf",
                },
                {
                    type: "input_text",
                    text: "分析这封信并提供要点摘要。",
                },
            ],
        },
    ],
});

console.log(response.output_text);
from openai import OpenAI
client = OpenAI(
    base_url="https://api.aaaaapi.com"
)

response = client.responses.create(
    model="gpt-4.1",
    input=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_file",
                    "file_url": "https://www.berkshirehathaway.com/letters/2024ltr.pdf",
                },
                {
                    "type": "input_text",
                    "text": "分析这封信并提供要点摘要。",
                },
            ],
        },
    ]
)

print(response.output_text)

上传文件

在下面的示例中,我们首先使用Files API上传PDF,然后在对模型的API请求中引用其文件ID。

上传文件以在响应中使用

curl https://api.aaaaapi.com/v1/files \
    -H "Authorization: Bearer $OPENAI_API_KEY" \
    -F purpose="user_data" \
    -F file="@draconomicon.pdf"

curl "https://api.aaaaapi.com/v1/responses" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $OPENAI_API_KEY" \
    -d '{
        "model": "gpt-4.1",
        "input": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "input_file",
                        "file_id": "file-6F2ksmvXxt4VdoqmHRw6kL"
                    },
                    {
                        "type": "input_text",
                        "text": "书中的第一条龙是什么?"
                    }
                ]
            }
        ]
    }'
import fs from "fs";
import OpenAI from "openai";
const client = new OpenAI({
  baseURL: "https://api.aaaaapi.com"
});

const file = await client.files.create({
    file: fs.createReadStream("draconomicon.pdf"),
    purpose: "user_data",
});

const response = await client.responses.create({
    model: "gpt-4.1",
    input: [
        {
            role: "user",
            content: [
                {
                    type: "input_file",
                    file_id: file.id,
                },
                {
                    type: "input_text",
                    text: "书中的第一条龙是什么?",
                },
            ],
        },
    ],
});

console.log(response.output_text);
from openai import OpenAI
client = OpenAI(
    base_url="https://api.aaaaapi.com"
)

file = client.files.create(
    file=open("draconomicon.pdf", "rb"),
    purpose="user_data"
)

response = client.responses.create(
    model="gpt-4.1",
    input=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_file",
                    "file_id": file.id,
                },
                {
                    "type": "input_text",
                    "text": "书中的第一条龙是什么?",
                },
            ]
        }
    ]
)

print(response.output_text)

Base64编码文件

你也可以将PDF文件输入作为Base64编码的输入发送。

Base64编码文件以在响应中使用

curl "https://api.aaaaapi.com/v1/responses" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $OPENAI_API_KEY" \
    -d '{
        "model": "gpt-4.1",
        "input": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "input_file",
                        "filename": "draconomicon.pdf",
                        "file_data": "...base64编码的PDF字节..."
                    },
                    {
                        "type": "input_text",
                        "text": "书中的第一条龙是什么?"
                    }
                ]
            }
        ]
    }'
import fs from "fs";
import OpenAI from "openai";
const client = new OpenAI({
  baseURL: "https://api.aaaaapi.com"
});

const data = fs.readFileSync("draconomicon.pdf");
const base64String = data.toString("base64");

const response = await client.responses.create({
    model: "gpt-4.1",
    input: [
        {
            role: "user",
            content: [
                {
                    type: "input_file",
                    filename: "draconomicon.pdf",
                    file_data: `data:application/pdf;base64,${base64String}`,
                },
                {
                    type: "input_text",
                    text: "书中的第一条龙是什么?",
                },
            ],
        },
    ],
});

console.log(response.output_text);
import base64
from openai import OpenAI
client = OpenAI(
    base_url="https://api.aaaaapi.com"
)

with open("draconomicon.pdf", "rb") as f:
    data = f.read()

base64_string = base64.b64encode(data).decode("utf-8")

response = client.responses.create(
    model="gpt-4.1",
    input=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_file",
                    "filename": "draconomicon.pdf",
                    "file_data": f"data:application/pdf;base64,{base64_string}",
                },
                {
                    "type": "input_text",
                    "text": "书中的第一条龙是什么?",
                },
            ],
        },
    ]
)

print(response.output_text)

使用注意事项

以下是使用PDF输入时需要注意的几点。

令牌使用

为了帮助模型理解PDF内容,我们会将提取的文本和每一页的图像都放入模型的上下文中——无论该页面是否包含图像。在大规模部署解决方案之前,请确保你了解使用PDF作为输入的定价和令牌使用影响。更多关于定价

文件大小限制

在对API的单个请求中,你可以上传最多100页和32MB的总内容,包括多个文件输入。

支持的模型

只有同时支持文本和图像输入的模型,如gpt-4o、gpt-4o-mini或o1,才能接受PDF文件作为输入。在此查看模型功能

文件上传用途

你可以将这些文件以上传至Files API,用途可以是任何用途,但我们建议对计划用作模型输入的文件使用user_data用途。

后续步骤

现在你已经了解了文本输入和输出的基础知识,你可能想查看以下资源之一。

在Playground中尝试PDF输入

使用Playground开发和迭代带有PDF输入的提示。

完整API参考

查看API参考以获取更多选项。

如果你在集成过程中遇到任何连接问题或需要更稳定的API服务,不妨试试我们提供的API中转服务,通过优化的网络链路提升访问体验,更多详情可访问官网了解。