파일 검색은 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