文件搜索是 Responses API 提供的一项工具。
它让模型能够通过语义搜索和关键词搜索,从已上传文件构成的知识库中检索信息。
您可以创建向量存储并向其中上传文件,让模型访问这些知识库(即 vector_stores),以补充模型已有的知识。
如需了解向量存储和语义搜索的工作原理,请参阅我们的
检索指南 。
这是由 OpenAI 管理的托管工具,因此您无需自行编写代码来处理工具的执行。
当模型决定使用该工具时,它会自动调用工具,从您的文件中检索信息并返回输出。
在通过 Responses API 使用文件搜索之前,您需要先在向量存储中建立知识库,并向其中上传文件。
创建向量存储并上传文件 按照以下步骤创建向量存储并向其中上传文件。您可以使用此示例文件 ,也可以上传自己的文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 import fs from "fs";
import OpenAI from "openai";
const openai = new OpenAI();
async function createFile(filePath) {
let result;
if (filePath.startsWith("http://") || filePath.startsWith("https://")) {
// Download the file content from the URL
const res = await fetch(filePath);
const buffer = await res.arrayBuffer();
const urlParts = filePath.split("/");
const fileName = urlParts[urlParts.length - 1];
const file = new File([buffer], fileName);
result = await openai.files.create({
file: file,
purpose: "assistants",
});
} else {
// Handle local file path
const fileContent = fs.createReadStream(filePath);
result = await openai.files.create({
file: fileContent,
purpose: "assistants",
});
}
return result.id;
}
// Replace with your own file path or URL
const fileId = await createFile(
"https://cdn.openai.com/API/docs/deep_research_blog.pdf"
);
console.log(fileId); 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 from io import BytesIO
import requests
from openai import OpenAI
client = OpenAI()
def create_file (client, file_path):
if file_path.startswith(( "http://" , "https://" )):
response = requests.get(file_path, timeout = 30 )
response.raise_for_status()
file_content = BytesIO(response.content)
file_name = file_path.rsplit( "/" , 1 )[ - 1 ]
result = client.files.create(
file = (file_name, file_content),
purpose = "assistants" ,
)
else :
with open (file_path, "rb" ) as file_content:
result = client.files.create(
file = file_content,
purpose = "assistants" ,
)
return result.id
file_id = create_file(
client,
"https://cdn.openai.com/API/docs/deep_research_blog.pdf" ,
)
print (file_id) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package main
import (
"context"
"fmt"
"os"
"github.com/openai/openai-go/v3"
)
func main() {
file, err := os.Open("customer_policies.txt")
if err != nil {
panic(err)
}
defer file.Close()
client := openai.NewClient()
result, err := client.Files.New(context.Background(), openai.FileNewParams{
File: openai.File(file, "customer_policies.txt", "text/plain"),
Purpose: openai.FilePurposeAssistants,
})
if err != nil {
panic(err)
}
fmt.Println(result.ID)
} 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.files.FileCreateParams;
import com.openai.models.files.FilePurpose;
import java.nio.file.Path;
var file =
client
.files()
.create(
FileCreateParams.builder()
.file(Path.of(System.getenv("OPENAI_EXAMPLE_FILE_PATH")))
.purpose(FilePurpose.USER_DATA)
.build());
System.out.println(file.id()); 1
2
3
4
5
6
7 require "openai"
require "pathname"
client = OpenAI::Client.new
file = Pathname("customer_policies.txt")
uploaded = client.files.create(file: file, purpose: :user_data)
puts(uploaded.id) const vectorStore = await openai.vectorStores.create({
name: "knowledge_base",
});
console.log(vectorStore.id); vector_store = client.vector_stores.create( name = "knowledge_base" )
print (vector_store.id) package main
import (
"context"
"fmt"
"github.com/openai/openai-go/v3"
)
func main() {
client := openai.NewClient()
vectorStore, err := client.VectorStores.New(context.Background(), openai.VectorStoreNewParams{
Name: openai.String("knowledge_base"),
})
if err != nil {
panic(err)
}
fmt.Println(vectorStore.ID)
} import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.vectorstores.VectorStoreCreateParams;
var store =
client
.vectorStores()
.create(VectorStoreCreateParams.builder().name("Product docs").build());
System.out.println(store.id()); require "openai"
client = OpenAI::Client.new
store = client.vector_stores.create(name: "Product docs")
puts(store.id) 1
2
3
4 // Use vectorStore and fileId from the earlier create and upload steps.
await openai.vectorStores.files.create(vectorStore.id, {
file_id: fileId,
}); 1
2
3
4
5 result = client.vector_stores.files.create(
vector_store_id = vector_store.id,
file_id = file_id,
)
print (result) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package main
import (
"context"
"fmt"
"github.com/openai/openai-go/v3"
)
func main() {
client := openai.NewClient()
file, err := client.VectorStores.Files.New(context.Background(), "<vector_store_id>", openai.VectorStoreFileNewParams{
FileID: "file_abc123",
})
if err != nil {
panic(err)
}
fmt.Println(file.ID)
} 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.vectorstores.files.FileCreateParams;
String vectorStoreId = "<vector_store_id>";
String fileId = "file_abc123";
var file =
client
.vectorStores()
.files()
.create(vectorStoreId, FileCreateParams.builder().fileId(fileId).build());
System.out.println(file.id()); 1
2
3
4
5 require "openai"
client = OpenAI::Client.new
file = client.vector_stores.files.create("<vector_store_id>", file_id: "file_abc123")
puts(file.id) 反复运行此代码,直到文件可供使用(即状态为 completed)。
// Use vectorStore from the earlier create step.
const result = await openai.vectorStores.files.list(vectorStore.id);
console.log(result); result = client.vector_stores.files.list( vector_store_id = vector_store.id)
print (result) package main
import (
"context"
"fmt"
"github.com/openai/openai-go/v3"
)
func main() {
client := openai.NewClient()
files, err := client.VectorStores.Files.List(context.Background(), "<vector_store_id>", openai.VectorStoreFileListParams{})
if err != nil {
panic(err)
}
fmt.Println(files.Data)
} import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
String vectorStoreId = "<vector_store_id>";
System.out.println(client.vectorStores().files().list(vectorStoreId).data()); require "openai"
client = OpenAI::Client.new
files = client.vector_stores.files.list("<vector_store_id>")
puts(files.data&.map(&:status))
知识库设置完成后,您可以将 file_search 工具添加到模型可用的工具列表中,并提供要搜索的向量存储列表。
1
2
3
4
5
6
7
8
9
10
11
12
13
14 import OpenAI from "openai";
const openai = new OpenAI();
const response = await openai.responses.create({
model: "gpt-6-astra",
input: "What is deep research by OpenAI?",
tools: [
{
type: "file_search",
vector_store_ids: ["<vector_store_id>"],
},
],
});
console.log(response); 1
2
3
4
5
6
7
8
9
10 from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model = "gpt-6-astra" ,
input = "What is deep research by OpenAI?" ,
tools = [{ "type" : "file_search" , "vector_store_ids" : [ "<vector_store_id>" ]}],
)
print (response) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package main
import (
"context"
"fmt"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/responses"
)
func main() {
client := openai.NewClient()
response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
Model: "gpt-6-astra",
Input: responses.ResponseNewParamsInputUnion{OfString: openai.String("What is deep research by OpenAI?")},
Tools: []responses.ToolUnionParam{responses.ToolParamOfFileSearch([]string{"<vector_store_id>"})},
})
if err != nil {
panic(err)
}
fmt.Println(response)
} 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.responses.ResponseCreateParams;
import java.util.List;
String vectorStoreId = "<vector_store_id>";
ResponseCreateParams params =
ResponseCreateParams.builder()
.model("gpt-6-astra")
.input("What is deep research by OpenAI?")
.addFileSearchTool(List.of(vectorStoreId))
.build();
client.responses().create(params).output().stream()
.flatMap(item -> item.message().stream())
.flatMap(message -> message.content().stream())
.flatMap(content -> content.outputText().stream())
.forEach(text -> System.out.println(text.text())); 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 using OpenAI.Responses;
#pragma warning disable OPENAI001
string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;
string vectorStoreId = "<vector_store_id>";
ResponsesClient client = new(key);
CreateResponseOptions options = new() { Model = "gpt-6-astra" };
options.Tools.Add(
ResponseTool.CreateFileSearchTool([vectorStoreId])
);
options.InputItems.Add(
ResponseItem.CreateUserMessageItem("What is deep research by OpenAI?")
);
ResponseResult response = await client.CreateResponseAsync(options);
Console.WriteLine(response.GetOutputText()); 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 require "openai"
openai = OpenAI::Client.new
response = openai.responses.create(
model: "gpt-6-astra",
input: "What is deep research by OpenAI?",
tools: [
{
type: "file_search",
vector_store_ids: ["<vector_store_id>"]
}
]
)
puts(response)
当模型调用此工具时,您会收到包含多个输出项的响应:
一个 file_search_call 输出项,其中包含文件搜索调用的 ID。
一个 message 输出项,其中包含模型的回复以及文件引用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 {
"output" : [
{
"type" : "file_search_call" ,
"id" : "fs_67c09ccea8c48191ade9367e3ba71515" ,
"status" : "completed" ,
"queries" : [ "What is deep research?" ],
"search_results" : null
},
{
"id" : "msg_67c09cd3091c819185af2be5d13d87de" ,
"type" : "message" ,
"role" : "assistant" ,
"content" : [
{
"type" : "output_text" ,
"text" : "Deep research is a sophisticated capability that allows for extensive inquiry and synthesis of information across various domains. It is designed to conduct multi-step research tasks, gather data from multiple online sources, and provide comprehensive reports similar to what a research analyst would produce. This functionality is particularly useful in fields requiring detailed and accurate information..." ,
"annotations" : [
{
"type" : "file_citation" ,
"index" : 992 ,
"file_id" : "file-2dtbBZdjtDKS8eqWxqbgDi" ,
"filename" : "deep_research_blog.pdf"
},
{
"type" : "file_citation" ,
"index" : 992 ,
"file_id" : "file-2dtbBZdjtDKS8eqWxqbgDi" ,
"filename" : "deep_research_blog.pdf"
},
{
"type" : "file_citation" ,
"index" : 1176 ,
"file_id" : "file-2dtbBZdjtDKS8eqWxqbgDi" ,
"filename" : "deep_research_blog.pdf"
},
{
"type" : "file_citation" ,
"index" : 1176 ,
"file_id" : "file-2dtbBZdjtDKS8eqWxqbgDi" ,
"filename" : "deep_research_blog.pdf"
}
]
}
]
}
]
}
通过 Responses API 使用文件搜索工具时,您可以自定义要从向量存储中检索的结果数量。这有助于减少 Token 用量并降低延迟,但可能会降低回答质量。
1
2
3
4
5
6
7
8
9
10
11
12 const response = await openai.responses.create({
model: "gpt-6-astra",
input: "What is deep research by OpenAI?",
tools: [
{
type: "file_search",
vector_store_ids: ["<vector_store_id>"],
max_num_results: 2,
},
],
});
console.log(response); 1
2
3
4
5
6
7
8
9
10
11
12 response = client.responses.create(
model = "gpt-6-astra" ,
input = "What is deep research by OpenAI?" ,
tools = [
{
"type" : "file_search" ,
"vector_store_ids" : [ "<vector_store_id>" ],
"max_num_results" : 2 ,
}
],
)
print (response) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package main
import (
"context"
"fmt"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/responses"
)
func main() {
client := openai.NewClient()
tool := responses.ToolParamOfFileSearch([]string{"<vector_store_id>"})
tool.OfFileSearch.MaxNumResults = openai.Int(2)
response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
Model: "gpt-6-astra",
Input: responses.ResponseNewParamsInputUnion{OfString: openai.String("What is deep research by OpenAI?")},
Tools: []responses.ToolUnionParam{tool},
})
if err != nil {
panic(err)
}
fmt.Println(response)
} 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.responses.FileSearchTool;
import com.openai.models.responses.ResponseCreateParams;
String vectorStoreId = "<vector_store_id>";
ResponseCreateParams params =
ResponseCreateParams.builder()
.model("gpt-6-astra")
.input("What is deep research by OpenAI?")
.addTool(
FileSearchTool.builder().addVectorStoreId(vectorStoreId).maxNumResults(2).build())
.build();
client.responses().create(params).output().stream()
.flatMap(item -> item.message().stream())
.flatMap(message -> message.content().stream())
.flatMap(content -> content.outputText().stream())
.forEach(text -> System.out.println(text.text())); 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 using OpenAI.Responses;
#pragma warning disable OPENAI001
string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;
// Replace this illustrative ID with your vector store ID.
string vectorStoreId = "<vector_store_id>";
ResponsesClient client = new(key);
CreateResponseOptions options = new() { Model = "gpt-6-astra" };
options.Tools.Add(
ResponseTool.CreateFileSearchTool([vectorStoreId], maxResultCount: 2)
);
options.InputItems.Add(
ResponseItem.CreateUserMessageItem("What is deep research by OpenAI?")
);
ResponseResult response = await client.CreateResponseAsync(options);
Console.WriteLine(response.GetOutputText()); 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 require "openai"
client = OpenAI::Client.new
response = client.responses.create(
model: "gpt-6-astra",
input: "What is deep research by OpenAI?",
tools: [
{
type: :file_search,
vector_store_ids: ["<vector_store_id>"],
max_num_results: 2
}
]
)
puts(response)
虽然您可以在输出文本中看到注释(对文件的引用),但文件搜索调用默认不会返回搜索结果。
要在响应中包含搜索结果,您可以在创建响应时使用 include 参数。
1
2
3
4
5
6
7
8
9
10
11
12 const response = await openai.responses.create({
model: "gpt-6-astra",
input: "What is deep research by OpenAI?",
tools: [
{
type: "file_search",
vector_store_ids: ["<vector_store_id>"],
},
],
include: ["file_search_call.results"],
});
console.log(response); 1
2
3
4
5
6
7
8
9
10
11
12 response = client.responses.create(
model = "gpt-6-astra" ,
input = "What is deep research by OpenAI?" ,
tools = [
{
"type" : "file_search" ,
"vector_store_ids" : [ "<vector_store_id>" ],
}
],
include = [ "file_search_call.results" ],
)
print (response) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package main
import (
"context"
"fmt"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/responses"
)
func main() {
client := openai.NewClient()
response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
Model: "gpt-6-astra",
Input: responses.ResponseNewParamsInputUnion{OfString: openai.String("What is deep research by OpenAI?")},
Tools: []responses.ToolUnionParam{responses.ToolParamOfFileSearch([]string{"<vector_store_id>"})},
Include: []responses.ResponseIncludable{responses.ResponseIncludableFileSearchCallResults},
})
if err != nil {
panic(err)
}
fmt.Println(response)
} 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.responses.ResponseCreateParams;
import com.openai.models.responses.ResponseIncludable;
import java.util.List;
String vectorStoreId = "<vector_store_id>";
ResponseCreateParams params =
ResponseCreateParams.builder()
.model("gpt-6-astra")
.input("What is deep research by OpenAI?")
.addInclude(ResponseIncludable.of("file_search_call.results"))
.addFileSearchTool(List.of(vectorStoreId))
.build();
client.responses().create(params).output().stream()
.flatMap(item -> item.fileSearchCall().stream())
.flatMap(call -> call.results().stream())
.flatMap(List::stream)
.forEach(System.out::println); 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 using OpenAI.Responses;
#pragma warning disable OPENAI001
string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;
// Replace this illustrative ID with your vector store ID.
string vectorStoreId = "<vector_store_id>";
ResponsesClient client = new(key);
CreateResponseOptions options = new() { Model = "gpt-6-astra" };
options.Tools.Add(ResponseTool.CreateFileSearchTool([vectorStoreId]));
options.IncludedProperties.Add(IncludedResponseProperty.FileSearchCallResults);
options.InputItems.Add(
ResponseItem.CreateUserMessageItem("What is deep research by OpenAI?")
);
ResponseResult response = await client.CreateResponseAsync(options);
foreach (FileSearchCallResponseItem search in response.OutputItems.OfType<FileSearchCallResponseItem>())
{
foreach (FileSearchCallResult result in search.Results)
{
Console.WriteLine($"{result.Filename}: {result.Text}");
}
} 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 require "openai"
client = OpenAI::Client.new
response = client.responses.create(
model: "gpt-6-astra",
input: "What is deep research by OpenAI?",
include: ["file_search_call.results"],
tools: [
{
type: :file_search,
vector_store_ids: ["<vector_store_id>"]
}
]
)
puts(response)
您可以根据文件的元数据筛选搜索结果。如需了解详情,请参阅我们的检索指南 ,其中介绍了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 const response = await openai.responses.create({
model: "gpt-6-astra",
input: "What is deep research by OpenAI?",
tools: [
{
type: "file_search",
vector_store_ids: ["<vector_store_id>"],
filters: {
type: "in",
key: "category",
value: ["blog", "announcement"],
},
},
],
});
console.log(response); 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 response = client.responses.create(
model = "gpt-6-astra" ,
input = "What is deep research by OpenAI?" ,
tools = [
{
"type" : "file_search" ,
"vector_store_ids" : [ "<vector_store_id>" ],
"filters" : {
"type" : "in" ,
"key" : "category" ,
"value" : [ "blog" , "announcement" ],
},
}
],
)
print (response) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package main
import (
"context"
"fmt"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/responses"
"github.com/openai/openai-go/v3/shared"
)
func main() {
client := openai.NewClient()
tool := responses.ToolParamOfFileSearch([]string{"<vector_store_id>"})
tool.OfFileSearch.Filters = responses.FileSearchToolFiltersUnionParam{
OfComparisonFilter: &shared.ComparisonFilterParam{
Type: shared.ComparisonFilterTypeIn,
Key: "category",
Value: shared.ComparisonFilterValueUnionParam{OfComparisonFilterValueArray: []shared.ComparisonFilterValueArrayItemUnionParam{
{OfString: openai.String("blog")},
{OfString: openai.String("announcement")},
}},
},
}
response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
Model: "gpt-6-astra",
Input: responses.ResponseNewParamsInputUnion{OfString: openai.String("What is deep research by OpenAI?")},
Tools: []responses.ToolUnionParam{tool},
})
if err != nil {
panic(err)
}
fmt.Println(response)
} 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.ComparisonFilter;
import com.openai.models.responses.FileSearchTool;
import com.openai.models.responses.ResponseCreateParams;
import java.util.List;
String vectorStoreId = "<vector_store_id>";
ResponseCreateParams params =
ResponseCreateParams.builder()
.model("gpt-6-astra")
.input("What is deep research by OpenAI?")
.addTool(
FileSearchTool.builder()
.addVectorStoreId(vectorStoreId)
.filters(
ComparisonFilter.builder()
.type(ComparisonFilter.Type.IN)
.key("category")
.valueOfComparisonFilterValueItems(
List.of(
ComparisonFilter.Value.ComparisonFilterValueItem.ofString(
"blog"),
ComparisonFilter.Value.ComparisonFilterValueItem.ofString(
"announcement")))
.build())
.build())
.build();
client.responses().create(params).output().stream()
.flatMap(item -> item.message().stream())
.flatMap(message -> message.content().stream())
.flatMap(content -> content.outputText().stream())
.forEach(text -> System.out.println(text.text())); 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 using OpenAI.Responses;
#pragma warning disable OPENAI001
string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;
// Replace this illustrative ID with your vector store ID.
string vectorStoreId = "<vector_store_id>";
ResponsesClient client = new(key);
BinaryData filters = BinaryData.FromString(
"""
{ "type": "in", "key": "category", "value": ["blog", "announcement"] }
"""
);
CreateResponseOptions options = new() { Model = "gpt-6-astra" };
options.Tools.Add(
ResponseTool.CreateFileSearchTool([vectorStoreId], filters: filters)
);
options.InputItems.Add(
ResponseItem.CreateUserMessageItem("What is deep research by OpenAI?")
);
ResponseResult response = await client.CreateResponseAsync(options);
Console.WriteLine(response.GetOutputText()); 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 require "openai"
client = OpenAI::Client.new
response = client.responses.create(
model: "gpt-6-astra",
input: "What is deep research by OpenAI?",
tools: [
{
type: :file_search,
vector_store_ids: ["<vector_store_id>"],
filters: {
type: :in,
key: "category",
value: ["blog", "announcement"]
}
}
]
)
puts(response)
对于 text/ MIME 类型,编码必须是 utf-8、utf-16 或 ascii 之一。
文件格式 MIME 类型 .ctext/x-c.cpptext/x-c++.cstext/x-csharp.csstext/css.docapplication/msword.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document.gotext/x-golang.htmltext/html.javatext/x-java.jstext/javascript.jsonapplication/json.mdtext/markdown.pdfapplication/pdf.phptext/x-php.pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentation.pytext/x-python.pytext/x-script.python.rbtext/x-ruby.shapplication/x-sh.textext/x-tex.tsapplication/typescript.txttext/plain
API 可用性
速率限制
备注 等级 1
100 RPM
等级 2 和 3
500 RPM
等级 4 和 5
1000 RPM
定价
ZDR 和数据驻留