Permite que los modelos busquen información relevante en tus archivos antes de generar una respuesta.
La búsqueda de archivos es una herramienta disponible en la API Responses.
Permite que los modelos recuperen información de una base de conocimientos de archivos cargados previamente mediante búsquedas semánticas y por palabras clave.
Al crear almacenes vectoriales y cargar archivos en ellos, puedes ampliar los conocimientos propios de los modelos al darles acceso a estas bases de conocimientos o vector_stores.
Para obtener más información sobre cómo funcionan los almacenes vectoriales y la búsqueda semántica, consulta nuestra
guía de recuperación.
Esta es una herramienta alojada y administrada por OpenAI, por lo que no tienes que implementar código de tu lado para gestionar su ejecución.
Cuando el modelo decida usarla, llamará automáticamente a la herramienta, recuperará información de tus archivos y devolverá un resultado.
Cómo usarla
Antes de usar la búsqueda de archivos con la API Responses, debes haber configurado una base de conocimientos en un almacén vectorial y haber cargado archivos en él.
Sigue estos pasos para crear un almacén vectorial y cargar un archivo en él. Puedes usar este archivo de ejemplo o cargar uno propio.
Cargar el archivo en la API de archivos
Cargar un archivo
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,});
Una vez configurada tu base de conocimientos, puedes incluir la herramienta file_search en la lista de herramientas disponibles para el modelo, junto con la lista de almacenes vectoriales en los que se realizará la búsqueda.
Herramienta de búsqueda de archivos
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)
Cuando el modelo llame a esta herramienta, recibirás una respuesta con varios elementos de salida:
Un elemento de salida file_search_call, que contiene el identificador de la llamada de búsqueda de archivos.
Un elemento de salida message, que contiene la respuesta del modelo junto con las citas de los archivos.
Respuesta de búsqueda de archivos
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" } ] } ] } ]}
Personalización de la recuperación
Limitar la cantidad de resultados
Al usar la herramienta de búsqueda de archivos con la API Responses, puedes personalizar la cantidad de resultados que quieres recuperar de los almacenes vectoriales. Esto puede ayudar a reducir tanto el consumo de tokens como la latencia, pero puede disminuir la calidad de las respuestas.
Limitar la cantidad 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)
Incluir los resultados de búsqueda en la respuesta
Aunque puedes ver anotaciones (referencias a archivos) en el texto de salida, la llamada de búsqueda de archivos no devolverá resultados de búsqueda de forma predeterminada.
Para incluir los resultados de búsqueda en la respuesta, puedes usar el parámetro include al crear la respuesta.
Incluir los resultados de búsqueda
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)
Puedes filtrar los resultados de búsqueda según los metadatos de los archivos. Para obtener más detalles, consulta nuestra guía de recuperación, que explica: