ファイル検索は 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
6
7 result = client.vector_stores.files.create_and_poll(
vector_store_id = vector_store.id,
file_id = file_id,
)
if result.status != "completed" :
raise RuntimeError ( f "File indexing ended with status: { result.status } " )
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 になるまで)、このコードを繰り返し実行してください。
1
2
3 // Use vectorStore from the earlier create step.
const result = await openai.vectorStores.files.list(vectorStore.id);
console.log(result.data); 1
2
3
4
5
6
7
8
9
10
11
12 import time
# Listing visibility can lag behind completed indexing.
deadline = time.monotonic() + 60
while True :
result = client.vector_stores.files.list( vector_store_id = vector_store.id)
if any ( file .id == file_id and file .status == "completed" for file in result.data):
break
if time.monotonic() >= deadline:
raise TimeoutError ( "The indexed file is not visible in the listing yet." )
time.sleep( 1 )
print (result) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 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)
} 1
2
3
4
5
6 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()); 1
2
3
4
5 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 のファイル検索ツールでは、ベクトルストアから取得する検索結果の件数を指定できます。件数を制限すると、トークン使用量を抑え、レイテンシを短縮できますが、回答の品質が低下する場合があります。
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)
MIME タイプが text/ で始まる場合、エンコーディングには utf-8、utf-16、ascii のいずれかを使用する必要があります。
ファイル形式
MIME タイプ
.c
text/x-c
.cpp
text/x-c++
.cs
text/x-csharp
.css
text/css
.doc
application/msword
.docx
application/vnd.openxmlformats-officedocument.wordprocessingml.document
.go
text/x-golang
.html
text/html
.java
text/x-java
.js
text/javascript
.json
application/json
.md
text/markdown
.pdf
application/pdf
.php
text/x-php
.pptx
application/vnd.openxmlformats-officedocument.presentationml.presentation
.py
text/x-python
.py
text/x-script.python
.rb
text/x-ruby
.sh
application/x-sh
.tex
text/x-tex
.ts
application/typescript
.txt
text/plain