模型能力
使用文件聊天
可以使用公开 URL 或已上传的文件 ID 将文件附加到聊天对话中。附加文件后,系统会自动启用文档搜索能力,将请求转换为智能体工作流。
附加文件
可以通过两种方式将文件附加到消息:
公开 URL(file_url),直接引用任意公开可访问的文件,无需上传:
{"type": "input_file", "file_url": "https://example.com/document.pdf"}已上传文件(file_id),先通过 Files API 上传文件,再通过 ID 引用。适用于无法公开访问的文件,例如私有或敏感文档:
{"type": "input_file", "file_id": "file-abc123"}为简单起见,以下示例使用 file_url。也可以替换为 file_id,改用已上传文件。
使用单个文件进行基础对话
将文件附加到对话中,让模型在其中搜索相关信息。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("XAI_API_KEY"),
base_url="https://api.x.ai/v1",
)
# Attach a file by public URL (or use file_id for uploaded files)
response = client.responses.create(
model="grok-4.7",
input=[
{
"role": "user",
"content": [
{"type": "input_text", "text": "What was the total revenue in this report?"},
{"type": "input_file", "file_url": "https://docs.x.ai/assets/api-examples/documents/sales-report.txt"}
]
}
]
)
final_answer = response.output[-1].content[0].text
print(f"Answer: {final_answer}")使用文件进行流式聊天
在模型搜索文档时实时获取响应。
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.XAI_API_KEY,
baseURL: "https://api.x.ai/v1",
});
// Attach a file by public URL (or use file_id for uploaded files)
const stream = await client.responses.create({
model: "grok-4.7",
input: [
{
role: "user",
content: [
{ type: "input_text", text: "What is the weight of the XR-2000?" },
{ type: "input_file", file_url: "https://docs.x.ai/assets/api-examples/documents/product-specs.txt" },
],
},
],
stream: true,
});
for await (const event of stream) {
if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
}
}
console.log();附加多个文件
同时查询多个文档。
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.XAI_API_KEY,
baseURL: "https://api.x.ai/v1",
});
// Attach files by public URL (or use file_id for uploaded files)
const response = await client.responses.create({
model: "grok-4.7",
input: [
{
role: "user",
content: [
{
type: "input_text",
text: "Based on these documents, when did the project start, what is the budget, and how many people are on the team?",
},
{ type: "input_file", file_url: "https://docs.x.ai/assets/api-examples/documents/project-timeline.txt" },
{ type: "input_file", file_url: "https://docs.x.ai/assets/api-examples/documents/project-budget.txt" },
{ type: "input_file", file_url: "https://docs.x.ai/assets/api-examples/documents/project-team.txt" },
],
},
],
});
const finalAnswer = response.output[response.output.length - 1].content[0].text;
console.log("Answer: " + finalAnswer);
console.log("Documents searched: 3");使用文件进行多轮对话
在针对同一文档的多个问题之间保持上下文。使用加密内容可在多个轮次之间高效保留文件上下文。
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.XAI_API_KEY,
baseURL: "https://api.x.ai/v1",
});
// Attach a file by public URL (or use file_id for uploaded files)
// First turn: Ask about the document
const response1 = await client.responses.create({
model: "grok-4.7",
input: [
{
role: "user",
content: [
{ type: "input_text", text: "What is the employee's name?" },
{ type: "input_file", file_url: "https://docs.x.ai/assets/api-examples/documents/employee-info.txt" },
],
},
],
});
console.log("Q1: What is the employee's name?");
console.log("A1: " + response1.output[response1.output.length - 1].content[0].text + "\\n");
// Second turn: Ask about department (uses previous_response_id for context)
const response2 = await client.responses.create({
model: "grok-4.7",
previous_response_id: response1.id,
input: [
{ role: "user", content: "What department does this employee work in?" },
],
});
console.log("Q2: What department does this employee work in?");
console.log("A2: " + response2.output[response2.output.length - 1].content[0].text + "\\n");
// Third turn: Ask about skills
const response3 = await client.responses.create({
model: "grok-4.7",
previous_response_id: response2.id,
input: [
{ role: "user", content: "What skills does this employee have?" },
],
});
console.log("Q3: What skills does this employee have?");
console.log("A3: " + response3.output[response3.output.length - 1].content[0].text + "\\n");将文件与其他模态结合
可以在一条消息中组合文件附件、图像和其他内容类型。
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.XAI_API_KEY,
baseURL: "https://api.x.ai/v1",
});
// Attach files by public URL (or use file_id for uploaded files)
const response = await client.responses.create({
model: "grok-4.7",
input: [
{
role: "user",
content: [
{
type: "input_text",
text: "Based on the attached care guide, do you have any advice about the pictured cat?",
},
{ type: "input_file", file_url: "https://docs.x.ai/assets/api-examples/documents/cat-care.txt" },
{
type: "input_image",
image_url: "https://media.x.ai/v1/docs/example-cat-in-tree-8e9ac3e0.png",
},
],
},
],
});
const analysis = response.output[response.output.length - 1].content[0].text;
console.log("Analysis: " + analysis);将文件与代码执行结合
对于数据分析任务,可以附加数据文件并启用代码执行工具。这样 Grok 就能编写并运行 Python 代码来分析和处理数据。
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.XAI_API_KEY,
baseURL: "https://api.x.ai/v1",
});
// Attach a file by public URL (or use file_id for uploaded files)
const stream = await client.responses.create({
model: "grok-4.7",
input: [
{
role: "user",
content: [
{
type: "input_text",
text: "Analyze this sales data and calculate: 1) Total revenue by product, " +
"2) Average units sold by region, " +
"3) Which product-region combination has the highest revenue",
},
{ type: "input_file", file_url: "https://docs.x.ai/assets/api-examples/documents/sales-data.csv" },
],
},
],
tools: [{ type: "code_interpreter" }],
stream: true,
});
for await (const event of stream) {
if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
}
}
console.log();模型将会:
访问附加的数据文件
编写 Python 代码来加载和分析数据
在沙盒环境中执行代码
执行计算和统计分析
在响应中返回结果与洞察
限制与注意事项
请求约束
不支持 batch 请求:带文档搜索的文件附件属于智能体请求,不支持 batch 模式(
n > 1)推荐使用流式传输:使用流式模式可更清楚地观察文档搜索过程
文档复杂度
高度非结构化或非常长的文档可能需要更多处理
组织良好且结构清晰的文档更容易搜索
大型文档和大量搜索可能导致更高的 token 用量
模型兼容性
推荐模型:
grok-4.7可提供最佳文档理解效果智能体要求:文件附件需要支持服务器端工具的 具备智能体能力的模型。
下一步
进一步了解如何管理文件:
最后更新:2026 年 9 月 21 日