How to Intermediate · 3 min read

How to enable file search in OpenAI assistant

Quick answer
To enable file search in an OpenAI assistant, first embed your files' content using OpenAIEmbeddings and store them in a vector database like FAISS. Then, query this vector store to retrieve relevant file chunks and pass them as context to your gpt-4o chat completions for accurate file-aware responses.

PREREQUISITES

  • Python 3.8+
  • OpenAI API key (free tier works)
  • pip install openai langchain langchain_community faiss-cpu

Setup

Install required packages and set your OpenAI API key as an environment variable.

bash
pip install openai langchain langchain_community faiss-cpu

Step by step

This example shows how to load text files, embed their content, store embeddings in FAISS, and query them to enable file search in your OpenAI assistant.

python
import os
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import FAISS
from langchain_community.document_loaders import TextLoader
from langchain_core.prompts import ChatPromptTemplate

# Load documents from a folder
loader = TextLoader("./documents/sample.txt")  # Replace with your file path
documents = loader.load()

# Create embeddings
embeddings = OpenAIEmbeddings(openai_api_key=os.environ["OPENAI_API_KEY"])

# Create FAISS vector store from documents
vectorstore = FAISS.from_documents(documents, embeddings)

# Query vector store for relevant file chunks
query = "Explain the main topic of the document"
relevant_docs = vectorstore.similarity_search(query, k=3)

# Prepare context from retrieved documents
context = "\n\n".join([doc.page_content for doc in relevant_docs])

# Initialize OpenAI chat client
client = ChatOpenAI(model_name="gpt-4o-mini", openai_api_key=os.environ["OPENAI_API_KEY"])

# Create prompt with context
prompt_template = "You are an assistant with access to the following file content:\n{context}\nAnswer the user query based on this information."
prompt = prompt_template.format(context=context)

# Send chat completion request
response = client.invoke([
    {"role": "system", "content": prompt},
    {"role": "user", "content": query}
])

print(response.content)
output
The main topic of the document is ... (based on file content)

Common variations

  • Use TextLoader to load multiple files or PDFs.
  • Switch to other vector stores like Chroma or Weaviate for scalable search.
  • Use gpt-4o-mini for faster, cheaper responses.
  • Implement async calls with OpenAI SDK if needed.

Troubleshooting

  • If no relevant documents are returned, verify your file paths and that documents are loaded correctly.
  • Ensure your OPENAI_API_KEY is set and valid.
  • Check that the vector store is built after embedding documents.
  • For large files, chunk documents before embedding to improve search relevance.

Key Takeaways

  • Use OpenAIEmbeddings with a vector store like FAISS to enable file search.
  • Query the vector store to retrieve relevant file content as context for your assistant.
  • Pass retrieved file chunks in the system prompt to gpt-4o for accurate file-aware answers.
Verified 2026-04 · gpt-4o-mini
Verify ↗