Interne linkstructuur automatiseren met Python
Oktober 14, 2023
Assistants API is een van de meest recente functies die door OpenAI is uitgebracht. De OpenAI Assistants API is een tool waarmee je AI-assistants kan maken die je in je eigen applicatie kunt integreren [...]
Assistants API is een van de meest recente functies die door OpenAI is uitgebracht. De OpenAI Assistants API is een tool waarmee je AI-assistants kan maken die je in je eigen applicatie kunt integreren. Ik integreer het voor een aantal klanten en eigen (affiliate) projecten. Het biedt ook tools zoals Code Interpreter, het ophalen van kennis en het aanroepen van aangepaste functies.
Met de Assistance API kan je 3 acties uitvoeren 1) Retrieval: breidt je Assistant uit met data van buiten het model, zoals eigen productinformatie of documenten. Zodat een bestand is geüpload en doorgegeven is aan de Assistant, zal OpenAI automatisch je documenten 2) chunken, deze data indexeren en opslaan. Je assistant is als ware getraind om op basis van deze input data te genereren en vragen te beantwoorden. Ook wel 3) function calling genoemd.
De Assistance API is daarom ook veel sneller in het genereren van output. Het slaat alle informatie op in deeltjes. En weet precies waar die de informatie in moet ophalen. In dit artikel ga ik een API-assistent maken die zoekopdrachten beantwoordt met behulp van een retrieval tool. Er is geen chunking, geen embeddings en geen vectordatabase nodig:
import os
import openai
import time
from pprint import pprint
OPENAI_API_TOKEN = "sk-YOUR_KEY"
# OpenAI API Key
api_key = os.environ["OPENAI_API_KEY"] = OPENAI_API_TOKEN
De code importeert de nodige modules, waaronder os en openai, stelt de API-sleutel in voor OpenAI en wijst deze toe aan een variabele genaamd api_key.
# Initialize the client
client = openai.OpenAI()
file = client.files.create(file=open("seo.pdf", "rb"),purpose='assistants')
# Create an Assistant (Note model="gpt-3.5-turbo-1106" instead of "gpt-4-1106-preview")
assistant = client.beta.assistants.create(
name="Concept: online marketing briefing",
instructions="Je bent een chatbot die gespecialiseerd is in online marketing, en met name SEO. Gebruik je kennisbank om vragen over SEO zo goed mogelijk te beantwoorden. Wees zo precies mogelijk.",
model="gpt-3.5-turbo-1106",
tools=[{"type": "retrieval"}],
file_ids=[file.id]
)
Dit script initialiseert een OpenAI-client en creëert vervolgens een bestand in de OpenAI-omgeving met als doel 'assistants'. Vervolgens wordt een assistent gemaakt met de naam "Concept: online marketing briefing", ingesteld om te reageren op vragen met betrekking tot SEO, geïnstrueerd om precies te zijn (wil niet dat de bot gaat hallucineren), met behulp van het GPT-3.5-turbo-1106 model en het bestand dat eerder is gemaakt als referentie.
# Create a Thread
thread = client.beta.threads.create()
# Add a Message to a Thread
message = client.beta.threads.messages.create(thread_id=thread.id,role="user",
content="Start met een introductie over SEO. Noem een aantal entiteiten, die voor SEO heel belangrijk zijn."
)
# Run the Assistant
run = client.beta.threads.runs.create(thread_id=thread.id,assistant_id=assistant.id,instructions="Spreek de gebruiker aan als 'gebruiker'")
print(run.model_dump_json(indent=4))
# Initialize the client
client = openai.OpenAI()
file = client.files.create(file=open("seo.pdf", "rb"),purpose='assistants')
Dit script creëert eerst een discussiethread in de OpenAI-omgeving en voegt vervolgens een gebruikersbericht toe aan die thread met de inhoud. Daarna wordt de assistent uitgevoerd binnen die thread met specifieke instructies om de gebruiker aan te spreken als "gebruiker". Het JSON-gegevensobject van de modeldump wordt vervolgens afgedrukt.
# Create an Assistant (Note model="gpt-3.5-turbo-1106" instead of "gpt-4-1106-preview")
assistant = client.beta.assistants.create(
name="Concept: online marketing briefing",
instructions="Je bent een chatbot die gespecialiseerd is in online marketing, en met name SEO. Gebruik je kennisbank om vragen over SEO zo goed mogelijk te beantwoorden. Wees zo precies mogelijk.",
model="gpt-3.5-turbo-1106",
tools=[{"type": "retrieval"}],
file_ids=[file.id]
)
# Create a Thread
thread = client.beta.threads.create()
# Add a Message to a Thread
message = client.beta.threads.messages.create(thread_id=thread.id,role="user",
content="Vertel me meer over SEO"
)
Dit script maakt eerst een assistent genaamd "Concept: online marketing briefing", bedoeld voor het reageren op vragen over SEO met behulp van het GPT-3.5-turbo-1106 model en een specifiek bestand als referentie. Vervolgens creëert het een discussiethread en voegt het een bericht van de gebruiker toe aan die thread met de inhoud "Vertel me meer over SEO".
# Run the Assistant
run = client.beta.threads.runs.create(thread_id=thread.id,assistant_id=assistant.id,instructions="Spreek de gebruiker aan als 'gebruiker'")
print(run.model_dump_json(indent=4))
# If run is 'completed', get messages and print
while True:
# Retrieve the run status
run_status = client.beta.threads.runs.retrieve(thread_id=thread.id,run_id=run.id)
print(run_status.model_dump_json(indent=4))
time.sleep(10)
if run_status.status == 'completed':
messages = client.beta.threads.messages.list(thread_id=thread.id)
pprint(messages)
break
else:
### sleep again
time.sleep(2)
Dit script voert de assistent uit binnen de gespecificeerde discussiethread en geeft vervolgens de JSON-gegevens van het modeldump van de uitvoering weer. Daarna controleert het script continu de status van de uitvoering van de assistent. Als de status 'completed' is, haalt het de berichten op die in de thread zijn geplaatst en geeft deze weer. Het script wacht telkens gedurende enkele seconden voordat het de status opnieuw controleert.
Dit is maar een simpel script. Maar je kunt het zo complex maken als je zelf wilt. Des te meer input, des te beter de output. Zorg er daarom eerst voor dat je alle benodigde input hebt. En laat de Assistance API deze input op de juiste manier aanroepen.