1. 文件检索
# 1.1 注意事项
本文档中的所有代码示例假设您已经正确配置了 API 密钥和 BASE_URL 的系统环境变量。如果您还未配置,请参考 大模型API调用 - 1.5 系统环境变量配置 章节进行设置。
代码中的 client = OpenAI() 将自动从以下环境变量读取配置:
OPENAI_API_KEY:您的 API 密钥OPENAI_BASE_URL:API 服务地址(可选,默认为 OpenAI 官方地址)
# 1.2 核心概念
File Search是基于向量数据库的语义检索工具,通过自动文本分块和嵌入生成技术,支持多文件并行处理与跨文档语义搜索,实现大规模知识库的高效信息查询。
# 1.3 助手创建
from openai import OpenAI
import time
client = OpenAI()
# 创建助手
assistant = client.beta.assistants.create(
name="烟草行业助手",
instructions="你是一个烟草行业的专家,请根据用户的问题与知识库给出专业的回答",
model="gpt-4o",
tools=[{"type": "file_search"}],
)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 1.4 上传文件并向量存储
# 创建向量存储库
vector_store = client.beta.vector_stores.create(name="烟草行业解决方案白皮书")
# 文件批量上传
file_paths = ["《烟草行业解决方案白皮书》.pdf"]
file_streams = [open(path, "rb") for path in file_paths]
file_batch = client.beta.vector_stores.file_batches.upload_and_poll(
vector_store_id=vector_store.id, files=file_streams
)
# 查看处理状态(需包含:in_progress, completed, failed等状态)
print(f"状态:{file_batch.status},成功:{file_batch.file_counts.completed}")
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 1.5 将助手关联知识库
assistant = client.beta.assistants.update(
assistant_id=assistant.id,
tool_resources={
"file_search": {
"vector_store_ids": [vector_store.id] # 可关联多个知识库
}
}
)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 1.6 对话
thread = client.beta.threads.create(
messages=[
{
"role": "user",
"content": "案例中做了哪些建设?",
}
]
)
# 运行助手
run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id
)
# 轮询等待 `run` 处理完成
while True:
run_status = client.beta.threads.runs.retrieve(thread_id=thread.id, run_id=run.id)
if run_status.status in ["completed", "failed"]:
break
time.sleep(1)
# 获取助手的回答并打印
messages = client.beta.threads.messages.list(thread_id=thread.id)
for message in messages.data:
print(f"{message.role}: {message.content}")
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
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
# 1.7 文件附加
在创建话题时,也可以附加一个向量存储到此线程,在此线程上创建运行时,文件搜索工具将查询来自您的助手的 vector_store和线程上向量存储库上的数据,具体写法如下:
# Upload the user provided file to OpenAI
message_file = client.files.create(
file=open("---------", "rb"), purpose="assistants"
)
# Create a thread and attach the file to the message
thread = client.beta.threads.create(
messages=[
{
"role": "user",
"content": "------------------",
# 将新文件附加到消息中
"attachments": [
{ "file_id": message_file.id, "tools": [{"type": "file_search"}] }
],
}
]
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
编辑 (opens new window)
上次更新: 2025/09/18, 08:16:15