Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Alleen van toepassing op:klassieke Foundry-portal. Dit artikel is niet beschikbaar voor de nieuwe Foundry-portal.
Meer informatie over de nieuwe portal.
Opmerking
Koppelingen in dit artikel kunnen inhoud openen in de nieuwe Microsoft Foundry-documentatie in plaats van de Foundry-documentatie (klassiek) die u nu bekijkt.
Opmerking
De Assistants API is verouderd en zal op 26 augustus 2026 met pensioen worden genomen. Gebruik de algemeen beschikbare Microsoft Foundry Agents-dienst. Volg de migratiegids om je workloads bij te werken. Meer informatie.
File Search vergroot de Assistent met kennis van buiten het model, zoals bedrijfseigen productgegevens of documenten die door uw gebruikers worden verstrekt. OpenAI parseert en segmenteert uw documenten automatisch, maakt en slaat de insluitingen op en gebruikt zowel vector- als trefwoordzoekopdrachten om relevante inhoud op te halen om gebruikersquery's te beantwoorden.
Belangrijk
- Bestandszoekopdrachten hebben aanvoeglijke kosten buiten de kosten op basis van tokens voor Azure OpenAI-gebruik.
Ondersteuning voor zoeken in bestanden
Ondersteunde regio's
Zoeken naar bestanden is beschikbaar in regio's die assistenten ondersteunen.
API-versie
- Vanaf 2024-05-01-preview
Ondersteunde bestandstypen
Opmerking
Voor tekst-/MIME-typen moet de codering utf-8, utf-16 of ASCII zijn.
| Bestandsindeling | MIME-type |
|---|---|
| .c | tekst/x-c |
| .cs | text/x-csharp |
| .cpp | text/x-c++ |
| .doc | application/msword |
| .docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
| .html | text/html |
| .java | text/x-java |
| .json | application/json |
| .md | text/markdown |
| application/pdf | |
| .php | text/x-php |
| .pptx | application/vnd.openxmlformats-officedocument.presentationml.presentation |
| .Py | text/x-python |
| .Py | text/x-script.python |
| .rb | text/x-ruby |
| .tex | tekst/x-tex |
| .txt | platte tekst |
| .css | text/css |
| .js | text/javascript |
| .sh | application/x-sh |
| .ts | toepassing/typescript |
Bestanden zoeken inschakelen
from openai import AzureOpenAI
client = AzureOpenAI(
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-05-01-preview",
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
)
assistant = client.beta.assistants.create(
name="Financial Analyst Assistant",
instructions="You are an expert financial analyst. Use your knowledge base to answer questions about audited financial statements.",
model="gpt-4-turbo",
tools=[{"type": "file_search"}],
)
Bestanden uploaden voor het zoeken naar bestanden
Voor toegang tot uw bestanden gebruikt het hulpprogramma voor het zoeken van bestanden het vectorarchiefobject. Upload uw bestanden en maak een vectorarchief om ze te bevatten. Zodra de vectoropslag is gemaakt, moet u de status ervan blijven controleren totdat alle bestanden uit de in_progress status zijn om zeker te zijn dat alle inhoud is verwerkt. De SDK biedt helpers voor het uploaden en peilen.
from openai import AzureOpenAI
client = AzureOpenAI(
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-05-01-preview",
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
)
# Create a vector store called "Financial Statements"
vector_store = client.beta.vector_stores.create(name="Financial Statements")
# Ready the files for upload to OpenAI
file_paths = ["mydirectory/myfile1.pdf", "mydirectory/myfile2.txt"]
file_streams = [open(path, "rb") for path in file_paths]
# Use the upload and poll SDK helper to upload the files, add them to the vector store,
# and poll the status of the file batch for completion.
file_batch = client.beta.vector_stores.file_batches.upload_and_poll(
vector_store_id=vector_store.id, files=file_streams
)
# You can print the status and the file counts of the batch to see the result of this operation.
print(file_batch.status)
print(file_batch.file_counts)
Bijwerk de assistent zodat deze de nieuwe vectoropslag gebruikt
Als u de bestanden toegankelijk wilt maken voor uw assistent, werkt u de assistent tool_resources bij met de nieuwe vector_store ID.
assistant = client.beta.assistants.update(
assistant_id=assistant.id,
tool_resources={"file_search": {"vector_store_ids": [vector_store.id]}},
)
Een thread maken
U kunt ook bestanden toevoegen als berichtbijlagen in uw thread. Als u dit doet, wordt er nog een vector_store aan de thread verbonden, of als er al een vectoropslag aan deze thread is gekoppeld, voegt u de nieuwe bestanden toe aan de bestaande threadvectoropslag. Wanneer u een Run op deze thread maakt, zal het hulpprogramma voor het zoeken van bestanden zowel de vector_store vanuit uw assistent als de vector_store op de thread opvragen.
# Upload the user provided file to OpenAI
message_file = client.files.create(
file=open("mydirectory/myfile.pdf", "rb"), purpose="assistants"
)
# Create a thread and attach the file to the message
thread = client.beta.threads.create(
messages=[
{
"role": "user",
"content": "How many company shares were outstanding last quarter?",
# Attach the new file to the message.
"attachments": [
{ "file_id": message_file.id, "tools": [{"type": "file_search"}] }
],
}
]
)
# The thread now has a vector store with that file in its tool resources.
print(thread.tool_resources.file_search)
Vectorarchieven worden gemaakt met behulp van berichtbijlagen met een standaardverloopbeleid van zeven dagen nadat ze voor het laatst actief waren (gedefinieerd als de laatste keer dat het vectorarchief deel uitmaakte van een uitvoering). Deze standaardwaarde bestaat om u te helpen bij het beheren van de kosten voor vectoropslag. U kunt dit verloopbeleid op elk gewenst moment overschrijven.
Voer een run uit en controleer de uitvoer
Maak een run en kijk of het model gebruikmaakt van het hulpprogramma voor het zoeken van bestanden om een antwoord te geven op de vraag van de gebruiker.
from typing_extensions import override
from openai import AssistantEventHandler, OpenAI
client = OpenAI()
class EventHandler(AssistantEventHandler):
@override
def on_text_created(self, text) -> None:
print(f"\nassistant > ", end="", flush=True)
@override
def on_tool_call_created(self, tool_call):
print(f"\nassistant > {tool_call.type}\n", flush=True)
@override
def on_message_done(self, message) -> None:
# print a citation to the file searched
message_content = message.content[0].text
annotations = message_content.annotations
citations = []
for index, annotation in enumerate(annotations):
message_content.value = message_content.value.replace(
annotation.text, f"[{index}]"
)
if file_citation := getattr(annotation, "file_citation", None):
cited_file = client.files.retrieve(file_citation.file_id)
citations.append(f"[{index}] {cited_file.filename}")
print(message_content.value)
print("\n".join(citations))
# Then, we use the stream SDK helper
# with the EventHandler class to create the Run
# and stream the response.
with client.beta.threads.runs.stream(
thread_id=thread.id,
assistant_id=assistant.id,
instructions="Please address the user as Jane Doe. The user has a premium account.",
event_handler=EventHandler(),
) as stream:
stream.until_done()
Hoe het werkt
Het hulpprogramma voor het zoeken van bestanden implementeert verschillende aanbevolen procedures voor het ophalen van bestanden, zodat u de juiste gegevens uit uw bestanden kunt extraheren en de antwoorden van het model kunt uitbreiden. Het hulpprogramma file_search:
- Hiermee worden gebruikersquery's herschreven om ze te optimaliseren voor zoekopdrachten.
- Hiermee worden complexe gebruikersquery's opgesplitst in meerdere zoekopdrachten die parallel kunnen worden uitgevoerd.
- Voert zowel zoekwoorden als semantische zoekopdrachten uit in zowel assistent- als thread-vector-databestanden.
- Hiermee worden zoekresultaten opnieuw geherrankerd om de meest relevante resultaten te kiezen voordat het uiteindelijke antwoord wordt gegenereerd.
- Het hulpprogramma voor het zoeken van bestanden gebruikt standaard de volgende instellingen:
- Segmentgrootte: 800 tokens
- Segment overlap: 400 tokens
- Insluitmodel: tekst-insluiten-3-groot bij 256 dimensies
- Maximum aantal segmenten toegevoegd aan context: 20
Vectoropslagplaatsen
Vector Store-objecten geven het hulpprogramma voor het zoeken van bestanden de mogelijkheid om uw bestanden te doorzoeken. Als u een bestand toevoegt aan een vectorarchief, worden het bestand automatisch geparseerd, segmenten, ingesloten en opgeslagen in een vectordatabase die geschikt is voor trefwoorden en semantische zoekopdrachten. Elk vectorarchief kan maximaal 10.000 bestanden bevatten. Vectorarchieven kunnen worden gekoppeld aan zowel assistenten als threads. Op dit moment kunt u maximaal één vectorarchief koppelen aan een assistent en maximaal één vectorarchief aan een thread.
Vectorarchieven maken en bestanden toevoegen
U kunt een vectorarchief maken en er bestanden aan toevoegen in één API-aanroep:
vector_store = client.beta.vector_stores.create(
name="Product Documentation",
file_ids=['file_1', 'file_2', 'file_3', 'file_4', 'file_5']
)
Het toevoegen van bestanden aan vectorarchieven is een asynchrone bewerking. Om ervoor te zorgen dat de bewerking is voltooid, raden we u aan de helpers 'maken en peilen' te gebruiken in onze officiële SDK's. Als u de SDK's niet gebruikt, kunt u het object ophalen en de eigenschap file_counts ervan in de gaten houden om het resultaat van de bestandverwerkingsbewerking te zien.
Bestanden kunnen ook worden toegevoegd aan een vectorarchief nadat deze is gemaakt door vectoropslagbestanden te maken.
file = client.beta.vector_stores.files.create_and_poll(
vector_store_id="vs_abc123",
file_id="file-abc123"
)
U kunt ook verschillende bestanden toevoegen aan een vectorarchief door batches van maximaal 500 bestanden te maken.
batch = client.beta.vector_stores.file_batches.create_and_poll(
vector_store_id="vs_abc123",
file_ids=['file_1', 'file_2', 'file_3', 'file_4', 'file_5']
)
Op dezelfde manier kunnen deze bestanden worden verwijderd uit een vectorarchief door:
- Het vectorarchiefbestandsobject verwijderen of,
- Door het onderliggende bestandsobject te verwijderen (waarmee het bestand wordt verwijderd uit alle vector_store en code_interpreter configuraties voor alle assistenten en threads in uw organisatie)
De maximale bestandsgrootte is 512 MB. Elk bestand mag niet meer dan 5.000.000 tokens per bestand bevatten (automatisch berekend wanneer u een bestand bijvoegt).
Vectorarchieven koppelen
U kunt vectorarchieven aan uw assistent of thread koppelen met behulp van de parameter tool_resources.
assistant = client.beta.assistants.create(
instructions="You are a helpful product support assistant and you answer questions based on the files provided to you.",
model="gpt-4-turbo",
tools=[{"type": "file_search"}],
tool_resources={
"file_search": {
"vector_store_ids": ["vs_1"]
}
}
)
thread = client.beta.threads.create(
messages=[ { "role": "user", "content": "How do I cancel my subscription?"} ],
tool_resources={
"file_search": {
"vector_store_ids": ["vs_2"]
}
}
)
U kunt ook een vectorwinkel koppelen aan threads of assistenten nadat ze zijn gemaakt door ze bij te werken met de juiste tool_resources.
Gereedheid van vectorgeheugen garanderen voordat er runs worden aangemaakt
We raden u ten zeerste aan ervoor te zorgen dat alle bestanden in een vector_store volledig worden verwerkt voordat u een uitvoering maakt. Dit zorgt ervoor dat alle gegevens in uw vectorarchief doorzoekbaar zijn. U kunt controleren op gereedheid voor vectoropslag met behulp van de polling-helpers in de SDK's of door het vector_store object handmatig te peilen om ervoor te zorgen dat de status is voltooid.
Als reservecapaciteit is er een maximale wachttijd van 60 seconden in het actie-object wanneer de thread's vectoropslag bestanden bevat die nog worden verwerkt. Dit is om ervoor te zorgen dat alle bestanden die uw gebruikers in een thread uploaden volledig doorzoekbaar zijn voordat de procedure begint. Deze wachttijd is niet van toepassing op de vectoropslag van de assistent.
Kosten beheren met vervalbeleid
Het file_search hulpprogramma gebruikt het vector_stores object als resource en u wordt gefactureerd op basis van de grootte van de vector_store objecten die zijn gemaakt. De grootte van het vectorarchiefobject is de som van alle geparseerde segmenten uit uw bestanden en de bijbehorende insluitingen.
Om u te helpen bij het beheren van de kosten die zijn gekoppeld aan deze vector_store-objecten, hebben we ondersteuning toegevoegd voor verloopbeleid in het vector_store object. U kunt deze beleidsregels instellen bij het maken of bijwerken van het vector_store object.
vector_store = client.beta.vector_stores.create_and_poll(
name="Product Documentation",
file_ids=['file_1', 'file_2', 'file_3', 'file_4', 'file_5'],
expires_after={
"anchor": "last_active_at",
"days": 7
}
)
Thread vector stores hebben standaard verloopbeleid
Vectorarchieven die zijn gemaakt met thread-helpers (zoals tool_resources.file_search.vector_stores in threads of message.attachments in berichten) hebben een standaardverloopbeleid van zeven dagen nadat ze voor het laatst actief waren (gedefinieerd als de laatste keer dat het vectorarchief deel uitmaakte van een uitvoering).
Wanneer een vectorarchief verloopt, mislukt de uitvoering op die thread. U kunt dit oplossen door een nieuwe vector_store opnieuw te maken met dezelfde bestanden en deze opnieuw aan de thread te koppelen.
all_files = list(client.beta.vector_stores.files.list("vs_expired"))
vector_store = client.beta.vector_stores.create(name="rag-store")
client.beta.threads.update(
"thread_abc123",
tool_resources={"file_search": {"vector_store_ids": [vector_store.id]}},
)
for file_batch in chunked(all_files, 100):
client.beta.vector_stores.file_batches.create_and_poll(
vector_store_id=vector_store.id, file_ids=[file.id for file in file_batch]
)