OpenAI 在其最新的 API 工具链中引入了一个强大功能 —— File Search(文件搜索)。这个功能可以让大模型在你上传的文件中进行语义和关键词搜索,从而辅助生成更加精准的响应,适用于知识库问答、文档检索、AI 教学助手等场景。

File Search

一、File Search 是什么?

File Search
  • 向量化:通过 Embedding 将文本转化为向量;

  • 语义搜索:用户提问时,模型会进行语义理解,匹配相关内容;

  • 自动响应生成:模型结合搜索结果生成带引用的回答。

⚠️ 无需你本地实现搜索逻辑,一切由 OpenAI 托管服务完成。


二、快速接入:实战步骤

下面将以 Python 和 JavaScript 两种语言为例,讲解完整流程。

第一步:上传文件到 OpenAI 文件服务

from openai import OpenAI
import requests
from io import BytesIO

client = OpenAI(base_url="https://api.aaaaapi.com")  # 使用中转 API

def upload_file(url_or_path):
    if url_or_path.startswith("http"):
        response = requests.get(url_or_path)
        file = BytesIO(response.content)
        filename = url_or_path.split("/")[-1]
        return client.files.create(file=(filename, file), purpose="assistants").id
    else:
        with open(url_or_path, "rb") as f:
            return client.files.create(file=f, purpose="assistants").id

file_id = upload_file("https://cdn.openai.com/API/docs/deep_research_blog.pdf")

JavaScript 示例:

import fs from "fs";
import OpenAI from "openai";

const openai = new OpenAI({ baseURL: "https://api.aaaaapi.com" }); // 使用中转 API

async function uploadFile(path) {
  const fileContent = path.startsWith("http")
    ? new File([await (await fetch(path)).arrayBuffer()], path.split("/").pop())
    : fs.createReadStream(path);

  const result = await openai.files.create({ file: fileContent, purpose: "assistants" });
  return result.id;
}

const fileId = await uploadFile("https://cdn.openai.com/API/docs/deep_research_blog.pdf");

第二步:创建向量存储(Vector Store)

vector_store = client.vector_stores.create(name="knowledge_base")
vector_store_id = vector_store.id
const vectorStore = await openai.vectorStores.create({ name: "knowledge_base" });
const vectorStoreId = vectorStore.id;

OpenAI File Search 教程:让模型搜索你上传的文件,实现智能知识问答!第三步:添加文件到向量库

client.vector_stores.files.create(vector_store_id=vector_store_id, file_id=file_id)
await openai.vectorStores.files.create(vectorStoreId, { file_id: fileId });

第四步:确认向量化完成

files = client.vector_stores.files.list(vector_store_id=vector_store_id)
print(files)

三、使用 File Search 进行智能问答

responses.create()
response = client.responses.create(
    model="gpt-4o-mini",
    input="什么是 OpenAI 的 Deep Research?",
    tools=[{
        "type": "file_search",
        "vector_store_ids": [vector_store_id]
    }]
)
print(response.output[1]["content"][0]["text"])

支持高级配置:

限制返回结果数

tools=[{
    "type": "file_search",
    "vector_store_ids": [vector_store_id],
    "max_num_results": 2
}]

包含搜索内容原文

include=["file_search_call.results"]

四、过滤搜索结果(基于元数据)

"type": "blog"
tools=[{
    "type": "file_search",
    "vector_store_ids": [vector_store_id],
    "filters": {
        "type": "eq",
        "key": "type",
        "value": "blog"
    }
}]

详细可参考官方指南:OpenAI 检索指南


五、支持的文件类型列表

文件类型MIME 类型
.pdfapplication/pdf
.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
.pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentation
.txt / .mdtext/plain / text/markdown
.py / .js / .php / .cpp / .java 等源代码文件

💡 支持 UTF-8、UTF-16、ASCII 编码的文本。


六、推荐使用中转 API 接入体验更丝滑!

由于 OpenAI 官方 API 在国内访问速度波动较大,建议使用以下稳定中转地址进行接入,开发体验大大提升:

在客户端代码中,配置如下:

client = OpenAI(base_url="https://api.aaaaapi.com")

七、总结

通过 File Search 工具,OpenAI 让开发者可以轻松构建:

  • 文档问答助手;

  • 企业内部知识库查询系统;

  • 支持引用的报告生成工具。

你只需上传文件,其余工作由模型自动完成!


八、参考链接