文件输入:如何将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输入的提示。
查看API参考以获取更多选项。
如果你在集成过程中遇到任何连接问题或需要更稳定的API服务,不妨试试我们提供的API中转服务,通过优化的网络链路提升访问体验,更多详情可访问官网了解。