Permita que os modelos pesquisem informações relevantes nos seus arquivos antes de gerar uma resposta.
A pesquisa de arquivos é uma ferramenta disponível na Responses API.
Ela permite que os modelos recuperem informações de uma base de conhecimento composta por arquivos enviados anteriormente, usando pesquisa semântica e por palavras-chave.
Ao criar repositórios de vetores e enviar arquivos para eles, você pode ampliar o conhecimento inerente dos modelos, dando a eles acesso a essas bases de conhecimento, ou vector_stores.
Para saber mais sobre como funcionam os repositórios de vetores e a pesquisa semântica, consulte nosso
guia de recuperação.
Esta é uma ferramenta hospedada e gerenciada pela OpenAI, ou seja, você não precisa implementar código para cuidar da execução dela.
Quando o modelo decidir usá-la, ele chamará a ferramenta automaticamente, recuperará informações dos seus arquivos e retornará uma saída.
Como usar
Antes de usar a pesquisa de arquivos com a Responses API, você precisa configurar uma base de conhecimento em um repositório de vetores e enviar arquivos para ele.
Siga estas etapas para criar um repositório de vetores e enviar um arquivo para ele. Você pode usar este arquivo de exemplo ou enviar um arquivo seu.
Envie o arquivo para a File API
Envie um arquivo
Python
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
34import 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 URLconst fileId = await createFile( "https://cdn.openai.com/API/docs/deep_research_blog.pdf");console.log(fileId);
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,});
Depois de configurar sua base de conhecimento, você pode incluir a ferramenta file_search na lista de ferramentas disponíveis para o modelo, junto com a lista de repositórios de vetores nos quais pesquisar.
Ferramenta de pesquisa de arquivos
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14import 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
10from openai import OpenAIclient = 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
18using OpenAI.Responses;#pragma warning disable OPENAI001string 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
16require "openai"openai = OpenAI::Client.newresponse = 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)
Quando o modelo chamar esta ferramenta, você receberá uma resposta com várias saídas:
Um item de saída file_search_call, que contém o ID da chamada de pesquisa de arquivos.
Um item de saída message, que contém a resposta do modelo junto com as citações dos arquivos.
Resposta da pesquisa de arquivos
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" } ] } ] } ]}
Personalização da recuperação
Como limitar o número de resultados
Ao usar a ferramenta de pesquisa de arquivos com a Responses API, você pode personalizar o número de resultados que deseja recuperar dos repositórios de vetores. Isso pode ajudar a reduzir tanto o uso de tokens quanto a latência, mas pode diminuir a qualidade da resposta.
Limite o número de resultados
Python
1
2
3
4
5
6
7
8
9
10
11
12const 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
12response = 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)
Embora você possa ver anotações (referências a arquivos) no texto de saída, a chamada de pesquisa de arquivos não retorna os resultados da pesquisa por padrão.
Para incluir os resultados da pesquisa na resposta, você pode usar o parâmetro include ao criar a resposta.
Inclua os resultados da pesquisa
Python
1
2
3
4
5
6
7
8
9
10
11
12const 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
12response = 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)