E-mail versturen vanuit LlamaIndex
Combineer RAG en e-mailbezorging in één LlamaIndex-agent — verstuur e-mail via Wesender als FunctionTool.
Vereisten
- Python 3.11+ en pip
- Wesender-account met API-sleutel
- pip install llama-index wesender openai
- Omgevingsvariabelen: WESENDER_API_KEY en OPENAI_API_KEY
Stap 1: Installeer LlamaIndex en de Wesender Python SDK
Voeg de benodigde packages toe. LlamaIndex vereist ook de OpenAI-bibliotheek voor de standaard LLM-backend.
pip install llama-index wesender openai Stap 2: Definieer send_email als LlamaIndex FunctionTool
LlamaIndex-agents gebruiken FunctionTool om Python-functies beschikbaar te maken als tool-aanroepen. De docstring wordt gebruikt als beschrijving voor het LLM.
from llama_index.core.tools import FunctionTool
from wesender import Wesender
import os
client = Wesender(api_key=os.environ["WESENDER_API_KEY"])
def send_email(to: str, subject: str, html: str) -> str:
"""
Verstuur een e-mail via Wesender.
Args:
to: E-mailadres van de ontvanger.
subject: Onderwerpregel van de e-mail.
html: HTML-inhoud van de e-mail.
"""
result = client.emails.send(
from_="noreply@jouwdomein.nl",
to=to,
subject=subject,
html=html,
)
return f"E-mail verzonden. ID: {result.id}"
email_tool = FunctionTool.from_defaults(fn=send_email) Stap 3: Maak een ReActAgent aan met de e-mailtool
Combineer de e-mailtool met andere LlamaIndex-tools, zoals een QueryEngine voor documentretrieval. De agent beslist zelf welke tool hij wanneer inzet.
from llama_index.core.agent import ReActAgent
from llama_index.llms.openai import OpenAI
agent = ReActAgent.from_tools(
tools=[email_tool],
llm=OpenAI(model="gpt-4o"),
verbose=True,
) Stap 4: Roep de agent aan
Geef de agent een instructie in natuurlijke taal. De ReActAgent redeneert stap voor stap en roept send_email aan wanneer nodig.
response = agent.chat(
"Stuur een welkomstmail naar jan@voorbeeld.nl "
"met onderwerp 'Welkom bij ons platform' "
"en een vriendelijke HTML-begroeting."
)
print(response.response) Volledig voorbeeld
Hier is de volledige implementatie in llamaindex_email_agent.py:
import os
from llama_index.core.tools import FunctionTool
from llama_index.core.agent import ReActAgent
from llama_index.llms.openai import OpenAI
from wesender import Wesender
client = Wesender(api_key=os.environ["WESENDER_API_KEY"])
def send_email(to: str, subject: str, html: str) -> str:
"""
Verstuur een e-mail via Wesender.
Args:
to: E-mailadres van de ontvanger.
subject: Onderwerpregel van de e-mail.
html: HTML-inhoud van de e-mail.
"""
result = client.emails.send(
from_="noreply@jouwdomein.nl",
to=to,
subject=subject,
html=html,
)
return f"E-mail verzonden. ID: {result.id}"
email_tool = FunctionTool.from_defaults(fn=send_email)
agent = ReActAgent.from_tools(
tools=[email_tool],
llm=OpenAI(model="gpt-4o"),
verbose=True,
)
response = agent.chat(
"Stuur een welkomstmail naar jan@voorbeeld.nl "
"met onderwerp 'Welkom bij ons platform'."
)
print(response.response) Bezorgstatussen via webhooks
LlamaIndex kan bezorg-, bounce- en klachtsignalen ontvangen via webhooks. Configureer een webhook-endpoint in je LlamaIndex-workflow dat POST-verzoeken van Wesender accepteert. Zie Webhooks instellen voor de volledige configuratiestappen en het payload-formaat.
Veelgestelde vragen
Kan ik de e-mailtool combineren met een documentindex?
Ja. Voeg naast email_tool ook een QueryEngineTool toe die verbonden is met je VectorStoreIndex. De agent kan eerst documenten raadplegen en daarna een samenvatting per e-mail versturen.
Welke LLM-backends ondersteunt LlamaIndex?
LlamaIndex ondersteunt OpenAI, Anthropic, Mistral, HuggingFace en meer via pluggable LLM-integraties. Vervang OpenAI(model=...) door bijv. Anthropic(model='claude-sonnet-4-5') na installatie van llama-index-llms-anthropic.
Hoe gebruik ik de async-variant voor hoge throughput?
Gebruik achat() in plaats van chat() voor asynchroon gebruik: response = await agent.achat(...). Combineer met asyncio.gather() om meerdere agents tegelijk te draaien.