Azure OpenAI Assistants fájlkereső eszköz (előzetes verzió)
A fájlkeresés a modellen kívülről származó ismeretekkel bővíti a segédet, mint például az Ön felhasználói által biztosított termékinformációk vagy dokumentumok. Az OpenAI automatikusan elemzi és darabolja az Ön dokumentumait, létrehozza és tárolja a beágyazásokat, valamint vektoros és kulcsszókereséssel is lekéri a releváns tartalmakat a felhasználói lekérdezések megválaszolása érdekében.
Fontos
- A fájlkeresés az Azure OpenAI használatának tokenalapú díjain túl további díjakkal is jár.
Feljegyzés
- A fájlkeresés asszisztensenként akár 10 000 fájlt is betölthet – 500-szor több, mint korábban. Gyors, többszálas keresésekkel támogatja a párhuzamos lekérdezéseket, és továbbfejlesztett újrarangsorolást és lekérdezés-újraírást is kínál.
- A vektortároló egy új objektum az API-ban. Miután hozzáadnak egy fájlt egy vektortárolóhoz, a rendszer automatikusan elemzi, darabolja és beágyazza azt, és készen áll a keresésre. A vektortárolók segédeken és szálakon átnyúlóan is használhatók, így egyszerűbbé téve a fájlkezelést és a számlázást.
- Hozzáadtuk a
tool_choice
paraméter támogatását, amely egy adott eszköz (például fájlkeresés, kódértelmező vagy függvény) egy adott futtatáshoz való kényszerítésére használható.
Fájlkeresés támogatása
Támogatott régiók
A fájlkeresés az Asszisztenseket támogató régiókban érhető el.
API-verzió
- 2024-05-01-preview
Támogatott fájltípusok
Feljegyzés
Szöveg- és MIME-típusok esetén a kódolásnak utf-8, utf-16 vagy ASCII típusúnak kell lennie.
Fájlformátum | MIME-típus |
---|---|
c. | szöveg/x-c |
.cs | text/x-csharp |
.Cpp | szöveg/x-c++ |
.doc | application/msword |
.docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
.html | szöveg/html |
.java | text/x-java |
.json | application/json |
.md | szöveg/markdown |
alkalmazás/pdf | |
.php | text/x-php |
.pptx | application/vnd.openxmlformats-officedocument.presentationml.presentation |
.py | szöveg/x-python |
.py | text/x-script.python |
.rb | szöveg/x-ruby |
.Tex | szöveg/x-tex |
.txt | text/plain |
.Css | szöveg/css |
.js | text/javascript |
.Sh | application/x-sh |
.Ts | application/typescript |
Fájlkeresés engedélyezése
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"}],
)
Fájlok feltöltése fájlkereséshez
A fájlok eléréséhez a fájlkereső eszköz a vektortároló objektumot használja. Töltse fel a fájlokat, és hozzon létre egy vektortárolót, amely tartalmazza őket. A vektortároló létrehozása után le kell kérdeznie annak állapotát, amíg az összes fájl nincs állapotban in_progress
, hogy az összes tartalom feldolgozása befejeződött- e. Az SDK segítséget nyújt a feltöltéshez és a lekérdezéshez.
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)
Az asszisztens frissítése az új vektortároló használatára
Ha elérhetővé szeretné tenni a fájlokat az asszisztens számára, frissítse az asszisztens azonosítóját tool_resources
az új vector_store
azonosítóval.
assistant = client.beta.assistants.update(
assistant_id=assistant.id,
tool_resources={"file_search": {"vector_store_ids": [vector_store.id]}},
)
Szál létrehozása
A szálakon üzenetmellékletként is csatolhat fájlokat. Ezzel egy másik vector_store
, a szálhoz társított fájlt hoz létre, vagy ha már van ehhez a szálhoz egy vektortároló, csatolja az új fájlokat a meglévő szálvektortárolóhoz. Amikor létrehoz egy Futtatás ezen a szálon, a fájlkereső eszköz lekérdezi az vector_store
asszisztenstől és a vector_store
szálról is.
# 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)
A vektortárolók olyan üzenetmellékletek használatával jönnek létre, amelyek az utolsó aktív állapotuktól számított hét napos alapértelmezett lejárati szabályzattal rendelkeznek (a vektortároló utolsó futtatásakor). Ez az alapértelmezett beállítás segít a vektoros tárolási költségek kezelésében. Ezeket a lejárati szabályzatokat bármikor felülbírálhatja.
Futtatás létrehozása és a kimenet ellenőrzése
Hozzon létre egy futtatási lehetőséget, és figyelje meg, hogy a modell a fájlkereső eszközzel választ ad a felhasználó kérdésére.
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()
Hogyan működik?
A fájlkereső eszköz számos beolvasási ajánlott eljárást implementál a dobozból, hogy segítsen kinyerni a megfelelő adatokat a fájlokból, és kiegészíteni a modell válaszait. Az file_search eszköz:
- Átírja a felhasználói lekérdezéseket, hogy optimalizálja őket a kereséshez.
- Az összetett felhasználói lekérdezéseket több, párhuzamosan futtatható keresésre bontja.
- A kulcsszó- és szemantikai kereséseket egyaránt futtatja az asszisztens és a szálvektor-tárolók között.
- A keresési eredményeket újraküldi, hogy a végső válasz létrehozása előtt a legrelevánsabbakat válassza ki.
- Alapértelmezés szerint a fájlkereső eszköz a következő beállításokat használja:
- Adattömb mérete: 800 token
- Adattömb átfedése: 400 token
- Beágyazási modell: text-embedding-3-large 256 dimenzióban
- A környezethez hozzáadott adattömbök maximális száma: 20
Vektortárolók
A vektortároló-objektumok lehetővé teszik a fájlkereső eszköz számára a fájlok keresését. A fájl vektortárolóhoz való hozzáadása automatikusan elemzi, darabolja, beágyazza és tárolja a fájlt egy vektoradatbázisban, amely képes a kulcsszó- és szemantikai keresésre is. Minden vektortároló legfeljebb 10 000 fájlt tartalmazhat. A vektortárolók az Asszisztensekhez és a Szálakhoz is csatolhatók. Jelenleg legfeljebb egy vektortárolót csatolhat egy asszisztenshez, és legfeljebb egy vektortárolót egy szálhoz.
Vektortárolók létrehozása és fájlok hozzáadása
Létrehozhat egy vektortárolót, és fájlokat adhat hozzá egyetlen API-hívásban:
vector_store = client.beta.vector_stores.create(
name="Product Documentation",
file_ids=['file_1', 'file_2', 'file_3', 'file_4', 'file_5']
)
A fájlok vektortárolókhoz való hozzáadása aszinkron művelet. A művelet befejezésének biztosítása érdekében javasoljuk, hogy használja a "létrehozás és szavazás" segítőit a hivatalos SDK-kban. Ha nem használja az SDK-kat, lekérheti az vector_store
objektumot, és figyelheti annak tulajdonságát file_counts
, hogy lássa a fájlbetöltési művelet eredményét.
A vektortárolókba azok létrehozása után is felvehet fájlokat vektortároló fájlok létrehozásával.
file = client.beta.vector_stores.files.create_and_poll(
vector_store_id="vs_abc123",
file_id="file-abc123"
)
Másik lehetőségként több fájlt is hozzáadhat egy vektortárolóhoz akár 500 fájlból álló kötegek létrehozásával.
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']
)
Hasonlóképpen, ezek a fájlok eltávolíthatók egy vektortárolóból a következő módok egyikével:
- A vektortároló fájl objektumának törlése vagy
- A mögöttes fájlobjektum törlésével (amely eltávolítja a fájlt az összes vector_store és code_interpreter konfigurációból a szervezet összes segédjében és szálában)
A maximális fájlméret 512 MB. Minden fájl fájlonként legfeljebb 5 000 000 tokent tartalmazhat (a fájl csatolásakor automatikusan kiszámítva).
Vektortárolók csatolása
A tool_resources paraméterrel vektortárolókat csatolhat az asszisztenshez vagy a szálhoz.
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"]
}
}
)
A létrehozásuk után vektortárolót is csatolhat a szálakhoz vagy az asszisztensekhez a megfelelő tool_resources
frissítéssel.
A vektortár felkészültségének biztosítása futtatások létrehozása előtt
Javasoljuk, hogy a futtatás létrehozása előtt győződjön meg arról, hogy a vector_store összes fájlja teljesen fel van dolgozva. Ez biztosítja, hogy a vektortároló összes adata kereshető legyen. A vektortárolók felkészültségét az SDK-k lekérdezési segédjeivel, vagy az vector_store
objektum manuális lekérdezésével ellenőrizheti, hogy az állapot befejeződött-e.
Tartalékként 60 másodperces maximális várakozási idő áll rendelkezésre a futtatási objektumban, ha a szál vektortárolója még feldolgozás alatt álló fájlokat tartalmaz. Ennek célja, hogy a felhasználók által feltöltött fájlok teljes mértékben kereshetőek legyenek a futtatás előtt. Ez a tartalék várakozás nem vonatkozik az asszisztens vektortárolójára.
Költségek kezelése lejárati szabályzatokkal
Az file_search
eszköz az vector_stores
objektumot használja erőforrásként, és a létrehozott vector_store objektumok mérete alapján kell fizetnie. A vektortároló objektum mérete a fájlokból és azok megfelelő beágyazásaiból származó összes elemzési adattömb összege.
A vector_store objektumokhoz kapcsolódó költségek kezelése érdekében támogattuk az vector_store
objektum lejárati szabályzatait. Ezeket a szabályzatokat az vector_store
objektum létrehozásakor vagy frissítésekor állíthatja be.
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
}
)
A szálvektor-tárolók alapértelmezett lejárati szabályzatokkal rendelkeznek
A szálsegítők használatával létrehozott vektortárolók (például tool_resources.file_search.vector_stores
a szálakban vagy message.attachments
az Üzenetekben) az utolsó aktív állapotuktól számított hét napos alapértelmezett lejárati szabályzattal rendelkeznek (a vektortároló utolsó futtatásakor).
Ha egy vektortároló lejár, az adott szál futtatása sikertelen lesz. A probléma megoldásához újra létrehozhat egy új vector_store ugyanazokkal a fájlokkal, és újrakontingathatja a szálhoz.
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]
)