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;
第三步:添加文件到向量库
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 类型 |
|---|---|
| application/pdf | |
| .docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
| .pptx | application/vnd.openxmlformats-officedocument.presentationml.presentation |
| .txt / .md | text/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 让开发者可以轻松构建:
-
文档问答助手;
-
企业内部知识库查询系统;
-
支持引用的报告生成工具。
你只需上传文件,其余工作由模型自动完成!
