Integraties

E-mail versturen vanuit LlamaIndex

Combineer RAG en e-mailbezorging in één LlamaIndex-agent — verstuur e-mail via Wesender als FunctionTool.

Agent-framework Python Webhooks

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.

Volgende stappen