Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí jenom pro:Portál Foundry (Classic). Tento článek není k dispozici pro nový portál Foundry.
Přečtěte si další informace o novém portálu.
Poznámka
Odkazy v tomto článku můžou otevírat obsah v nové dokumentaci Microsoft Foundry místo dokumentace Foundry (classic), kterou si právě prohlížíte.
Poznámka
Rozhraní Assistants API bylo ukončeno. Použijte obecně dostupnou službu Microsoft Foundry Agents. Pokud chcete aktualizovat úlohy, prohlédněte si průvodce migrací. Další informace
Vyhledávání souborů rozšiřuje asistenta o znalosti mimo jeho model, jako jsou informace o vlastním produktu nebo dokumenty poskytované vašimi uživateli. OpenAI automaticky parsuje a ukládá dokumenty, vytváří a ukládá vložené položky a pomocí vektoru a vyhledávání klíčových slov načítá relevantní obsah pro odpovědi na dotazy uživatelů.
Důležité
- Hledání souborů má přidatné poplatky nad rámec poplatků založených na tokenech za Azure využití OpenAI.
Podpora vyhledávání souborů
Podporované oblasti
Hledání souborů je dostupné v oblastech , které podporují asistenty.
Verze rozhraní API
- S účinností od 1. 5. 2024
Podporované typy souborů
Poznámka
U typů text/MIME musí být kódování buď utf-8, utf-16 nebo ASCII.
| Formát souboru | Typ MIME |
|---|---|
| .c | text/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 | text/x-tex |
| .txt | prostý text |
| .css | text/css |
| .js | text/javascript |
| .sh | application/x-sh |
| .ts | application/typescript |
Povolení hledání souborů
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"}],
)
Nahrání souborů pro hledání souborů
Pro přístup k souborům používá nástroj pro vyhledávání souborů objekt úložiště vektorů. Nahrajte soubory a vytvořte vektorové úložiště, které je bude obsahovat. Po vytvoření vektorového úložiště byste se měli dotazovat na jeho stav, dokud všechny soubory nebudou ve stavu mimo in_progress, abyste zajistili, že zpracování veškerého obsahu bylo dokončeno. Sada SDK poskytuje nástroje pro nahrávání a dotazování.
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)
Aktualizujte asistenta tak, aby používal nové úložiště vektorů.
Pokud chcete, aby byly soubory přístupné vašemu asistentovi, aktualizujte ho tool_resources novým vector_store ID.
assistant = client.beta.assistants.update(
assistant_id=assistant.id,
tool_resources={"file_search": {"vector_store_ids": [vector_store.id]}},
)
Vytvoření vlákna
Soubory můžete také připojit jako přílohy zprávy ve vlákně. Tím vytvoříte další vector_store přidružený k vláknu nebo, pokud už je k tomuto vláknu připojeno vektorové úložiště, připojí nové soubory k existujícímu vektorovému úložišti připojenému k vláknu. Když vytvoříte spuštění v tomto vlákně, nástroj pro vyhledávání souborů se dotáže jak na vector_store od vašeho asistenta, tak na vector_store ve vlákně.
# 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)
Vektorové úložiště se vytváří pomocí příloh zpráv, které mají výchozí zásadu platnosti 7 dnů po jejich poslední aktivitě (definováno jako poslední, kdy bylo úložiště vektorů součástí běhu). Toto výchozí nastavení vám pomůže se správou nákladů na úložiště vektorů. Tyto zásady vypršení platnosti můžete kdykoli přepsat.
Vytvořte spuštění a zkontrolujte výstup
Vytvořte spuštění a všimněte si, že model používá nástroj pro vyhledávání souborů k poskytnutí odpovědi na otázku uživatele.
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()
Jak to funguje
Nástroj pro vyhledávání souborů implementuje několik osvědčených postupů načítání, které vám pomůžou extrahovat správná data ze souborů a rozšířit odpovědi modelu. Nástroj file_search:
- Přepíše dotazy uživatelů, aby je optimalizoval pro vyhledávání.
- Rozdělí složité dotazy uživatelů do několika vyhledávání, které může běžet paralelně.
- Spouští klíčová i sémantická hledání v úložištích vektorů asistentů i vláken.
- Výsledky hledání se před vygenerováním konečné odpovědi znovu seřadí a vyberou ty nejrelevavantnější.
- Ve výchozím nastavení nástroj pro vyhledávání souborů používá následující nastavení:
- Velikost bloku: 800 tokenů
- Překrývající se blok dat: 400 tokenů
- Model vkládání: text-embedding-3-large s 256 rozměry
- Maximální počet bloků dat přidaných do kontextu: 20
Vektorová úložiště
Objekty vektorového úložiště poskytují nástroji pro vyhledávání souborů možnost prohledávat soubory. Přidání souboru do vektorového úložiště automaticky parsuje, rozčleňuje, vkládá a ukládá soubor do vektorové databáze, která umožňuje jak vyhledávání podle klíčových slov, tak sémantické vyhledávání. Každé úložiště vektorů může obsahovat až 10 000 souborů. Vektorové úložiště lze připojit ke asistentům i vláknům. V současné době můžete k asistentovi připojit maximálně jedno vektorové úložiště a k vláknu maximálně jedno úložiště vektorů.
Vytváření vektorových úložišť a přidávání souborů
Můžete vytvořit vektorové úložiště a přidat do něj soubory v jednom volání rozhraní API:
vector_store = client.beta.vector_stores.create(
name="Product Documentation",
file_ids=['file_1', 'file_2', 'file_3', 'file_4', 'file_5']
)
Přidání souborů do vektorových úložišť je asynchronní operace. Abyste měli jistotu, že je operace dokončená, doporučujeme použít pomocné funkce pro vytvoření a dotazování ve našich oficiálních sadách SDK. Pokud sady SDK nepoužíváte, můžete načíst vector_store objekt a monitorovat jeho file_counts vlastnost, abyste viděli výsledek operace příjmu souborů.
Soubory lze do vektorového úložiště přidat také tím, že po jeho vytvoření vytvoříte odpovídající soubory pro vektorové úložiště.
file = client.beta.vector_stores.files.create_and_poll(
vector_store_id="vs_abc123",
file_id="file-abc123"
)
Alternativně můžete do úložiště vektorů přidat několik souborů tím, že vytvoříte dávky obsahující až 500 souborů.
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']
)
Podobně lze tyto soubory z úložiště vektorů odebrat buď:
- Odstranění objektu souboru úložného prostoru pro vektory nebo
- Odstraněním základního souborového objektu (který tento soubor odebere ze všech konfigurací vector_store a code_interpreter ve všech asistentech a vláknech ve vaší organizaci)
Maximální velikost souboru je 512 MB. Každý soubor by měl obsahovat maximálně 5 000 000 tokenů na soubor (při připojení souboru se počítá automaticky).
Připojení úložišť vektorů
Vektorové úložiště můžete připojit ke svému asistentovi nebo vláknu pomocí parametru 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"]
}
}
)
Vektorové úložiště můžete také připojit ke vláknům nebo asistentům po jejich vytvoření tak, že je aktualizujete pravým tool_resourcestlačítkem .
Zajištění připravenosti vektorového úložiště před spuštěním běhů
Důrazně doporučujeme, abyste zajistili, že všechny soubory v "vector_store" budou plně zpracovány, předtím než vytvoříte běh. Tím zajistíte, že všechna data ve vašem vektorovém úložišti budou prohledávatelná. Připravenost úložiště vektorů můžete zkontrolovat pomocí nástrojů pro dotazování v sadách SDK nebo ručním dotazováním objektu vector_store, aby byla zajištěna úplnost stavu.
V záložním případě existuje v objektu spuštění maximální 60sekundové čekání, když úložiště vektorů vlákna obsahuje soubory, které se stále zpracovávají. To zajistí, aby všechny soubory, které uživatelé nahrají do vlákna, byly plně prohledatelné před spuštěním procesu. Toto záložní čekání se nevztahuje na asistentovo vektorové úložiště.
Správa nákladů pomocí zásad vypršení platnosti
Nástroj file_search použije vector_stores objekt jako prostředek a bude vám účtován na základě velikosti vytvořených objektů vector_store. Velikost objektu úložiště vektorů je součet všech parsovaných bloků dat z vašich souborů a jejich odpovídajících vložených objektů.
Abychom vám pomohli se správou nákladů spojených s těmito vector_store objekty, přidali jsme podporu zásad vypršení platnosti objektu vector_store . Tyto zásady můžete nastavit při vytváření nebo aktualizaci objektu vector_store .
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
}
)
Úložiště vektorů vláken mají výchozí zásady vypršení platnosti.
Vektorová úložiště vytvořená pomocí pomocných rutin vláken (například tool_resources.file_search.vector_stores ve vláknech nebo message.attachments ve zprávách) mají výchozí zásadu vypršení platnosti sedm dnů po tom, co byly naposledy aktivní (definováno jako poslední doba, kdy bylo vektorové úložiště součástí spuštění).
Když vyprší platnost úložiště vektorů, spuštění v daném vlákně selže. Pokud chcete tento problém vyřešit, můžete znovu vytvořit nový vector_store se stejnými soubory a znovu ho připojit k vláknu.
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]
)