LlamaIndex ist ein Framework zum Erstellen von Wissens-Agents mit LLMs, die mit Ihren Daten verbunden sind. In diesem Beispiel wird gezeigt, wie Sie einen Multi-Agent-Workflow für einen Research Agent erstellen. In LlamaIndex sind
Workflows
die Bausteine von Agenten und Multi-Agenten-Systemen.
Sie benötigen einen Gemini API-Schlüssel. Falls Sie noch keinen haben, können Sie einen in Google AI Studio erstellen.
Installieren Sie zuerst alle erforderlichen LlamaIndex-Bibliotheken. LlamaIndex verwendet im Hintergrund das google-genai-Paket.
pip install llama-index llama-index-utils-workflow llama-index-llms-google-genai llama-index-tools-google
Gemini in LlamaIndex einrichten
Die Engine eines jeden LlamaIndex-Agents ist ein LLM, das für die Verarbeitung von Logik und Text zuständig ist. In diesem Beispiel wird Gemini 3 Flash verwendet. Legen Sie Ihren API-Schlüssel als Umgebungsvariable fest.
import os
from llama_index.llms.google_genai import GoogleGenAI
# Set your API key in the environment elsewhere, or with os.environ['GEMINI_API_KEY'] = '...'
assert 'GEMINI_API_KEY' in os.environ
llm = GoogleGenAI(model="gemini-3-flash-preview")
Build-Tools
Agents verwenden Tools, um mit der Außenwelt zu interagieren, z. B. um im Web zu suchen oder Informationen zu speichern. Tools in LlamaIndex
können reguläre Python-Funktionen sein oder aus vorhandenen ToolSpecs importiert werden.
Gemini enthält ein integriertes Tool für die Google Suche, das hier verwendet wird.
from google.genai import types
google_search_tool = types.Tool(
google_search=types.GoogleSearch()
)
llm_with_search = GoogleGenAI(
model="gemini-3-flash-preview",
generation_config=types.GenerateContentConfig(tools=[google_search_tool])
)
Testen Sie die LLM-Instanz nun mit einer Anfrage, für die eine Suche erforderlich ist. In dieser Anleitung wird davon ausgegangen, dass eine laufende Ereignisschleife vorhanden ist (z. B. python -m asyncio oder Google Colab).
response = await llm_with_search.acomplete("What's the weather like today in Biarritz?")
print(response)
Der Research Agent verwendet Python-Funktionen als Tools. Es gibt viele Möglichkeiten, ein System zu entwickeln, das diese Aufgabe ausführt. In diesem Beispiel verwenden Sie Folgendes:
search_webverwendet Gemini mit der Google Suche, um im Web nach Informationen zum angegebenen Thema zu suchen.record_notesspeichert im Web gefundene Informationen im Status, damit die anderen Tools sie verwenden können.write_reporterstellt den Bericht anhand der Informationen, die vonResearchAgentgefunden wurden.review_reportprüft den Bericht und gibt Feedback.
Die Klasse Context übergibt den Status zwischen Agents/Tools und jeder Agent hat Zugriff auf den aktuellen Status des Systems.
from llama_index.core.workflow import Context
async def search_web(ctx: Context, query: str) -> str:
"""Useful for searching the web about a specific query or topic"""
response = await llm_with_search.acomplete(f"""Please research given this query or topic,
and return the result\n<query_or_topic>{query}</query_or_topic>""")
return response
async def record_notes(ctx: Context, notes: str, notes_title: str) -> str:
"""Useful for recording notes on a given topic."""
current_state = await ctx.store.get("state")
if "research_notes" not in current_state:
current_state["research_notes"] = {}
current_state["research_notes"][notes_title] = notes
await ctx.store.set("state", current_state)
return "Notes recorded."
async def write_report(ctx: Context, report_content: str) -> str:
"""Useful for writing a report on a given topic."""
current_state = await ctx.store.get("state")
current_state["report_content"] = report_content
await ctx.store.set("state", current_state)
return "Report written."
async def review_report(ctx: Context, review: str) -> str:
"""Useful for reviewing a report and providing feedback."""
current_state = await ctx.store.get("state")
current_state["review"] = review
await ctx.store.set("state", current_state)
return "Report reviewed."
Multi-Agent-Assistenten erstellen
Um ein Multi-Agent-System zu erstellen, definieren Sie die Agents und ihre Interaktionen. Ihr System hat drei Agents:
- Mit
ResearchAgentwird das Web nach Informationen zum angegebenen Thema durchsucht. - Ein
WriteAgenterstellt den Bericht anhand der Informationen, die vomResearchAgentgefunden wurden. - Ein
ReviewAgentprüft den Bericht und gibt Feedback.
In diesem Beispiel wird die Klasse AgentWorkflow verwendet, um ein Multi-Agent-System zu erstellen, in dem die Agents nacheinander ausgeführt werden. Jeder Agent erhält einen system_prompt, der ihm sagt, was er tun soll, und vorschlägt, wie er mit den anderen Agenten zusammenarbeiten kann.
Optional können Sie Ihr Multi-Agent-System unterstützen, indem Sie mit can_handoff_to angeben, mit welchen anderen Agenten es kommunizieren kann. Andernfalls versucht es, dies selbst herauszufinden.
from llama_index.core.agent.workflow import (
AgentInput,
AgentOutput,
ToolCall,
ToolCallResult,
AgentStream,
)
from llama_index.core.agent.workflow import FunctionAgent, ReActAgent
research_agent = FunctionAgent(
name="ResearchAgent",
description="Useful for searching the web for information on a given topic and recording notes on the topic.",
system_prompt=(
"You are the ResearchAgent that can search the web for information on a given topic and record notes on the topic. "
"Once notes are recorded and you are satisfied, you should hand off control to the WriteAgent to write a report on the topic."
),
llm=llm,
tools=[search_web, record_notes],
can_handoff_to=["WriteAgent"],
)
write_agent = FunctionAgent(
name="WriteAgent",
description="Useful for writing a report on a given topic.",
system_prompt=(
"You are the WriteAgent that can write a report on a given topic. "
"Your report should be in a markdown format. The content should be grounded in the research notes. "
"Once the report is written, you should get feedback at least once from the ReviewAgent."
),
llm=llm,
tools=[write_report],
can_handoff_to=["ReviewAgent", "ResearchAgent"],
)
review_agent = FunctionAgent(
name="ReviewAgent",
description="Useful for reviewing a report and providing feedback.",
system_prompt=(
"You are the ReviewAgent that can review a report and provide feedback. "
"Your feedback should either approve the current report or request changes for the WriteAgent to implement."
),
llm=llm,
tools=[review_report],
can_handoff_to=["ResearchAgent","WriteAgent"],
)
Die Agents sind definiert. Jetzt können Sie die AgentWorkflow erstellen und ausführen.
from llama_index.core.agent.workflow import AgentWorkflow
agent_workflow = AgentWorkflow(
agents=[research_agent, write_agent, review_agent],
root_agent=research_agent.name,
initial_state={
"research_notes": {},
"report_content": "Not written yet.",
"review": "Review required.",
},
)
Während der Ausführung des Workflows können Sie Ereignisse, Tool-Aufrufe und Updates in die Konsole streamen.
from llama_index.core.agent.workflow import (
AgentInput,
AgentOutput,
ToolCall,
ToolCallResult,
AgentStream,
)
research_topic = """Write me a report on the history of the web.
Briefly describe the history of the world wide web, including
the development of the internet and the development of the web,
including 21st century developments"""
handler = agent_workflow.run(
user_msg=research_topic
)
current_agent = None
current_tool_calls = ""
async for event in handler.stream_events():
if (
hasattr(event, "current_agent_name")
and event.current_agent_name != current_agent
):
current_agent = event.current_agent_name
print(f"\n{'='*50}")
print(f"🤖 Agent: {current_agent}")
print(f"{'='*50}\n")
elif isinstance(event, AgentOutput):
if event.response.content:
print("📤 Output:", event.response.content)
if event.tool_calls:
print(
"🛠️ Planning to use tools:",
[call.tool_name for call in event.tool_calls],
)
elif isinstance(event, ToolCallResult):
print(f"🔧 Tool Result ({event.tool_name}):")
print(f" Arguments: {event.tool_kwargs}")
print(f" Output: {event.tool_output}")
elif isinstance(event, ToolCall):
print(f"🔨 Calling Tool: {event.tool_name}")
print(f" With arguments: {event.tool_kwargs}")
Nach Abschluss des Workflows können Sie die endgültige Ausgabe des Berichts sowie den endgültigen Prüfstatus des Prüfbeauftragten ausdrucken.
state = await handler.ctx.store.get("state")
print("Report Content:\n", state["report_content"])
print("\n------------\nFinal Review:\n", state["review"])
Benutzerdefinierte Workflows
Der AgentWorkflow ist ein guter Ausgangspunkt für Multi-Agenten-Systeme. Was aber, wenn Sie mehr Kontrolle benötigen? Sie können einen Workflow von Grund auf neu erstellen. Hier sind einige Gründe, warum Sie einen eigenen Workflow erstellen sollten:
- Mehr Kontrolle über den Prozess: Sie können den genauen Pfad festlegen, den Ihre Kundenservicemitarbeiter einschlagen. Dazu gehört das Erstellen von Schleifen, das Treffen von Entscheidungen an bestimmten Punkten oder die parallele Bearbeitung verschiedener Aufgaben durch Agents.
- Komplexe Daten verwenden: Gehen Sie über reinen Text hinaus. Mit benutzerdefinierten Workflows können Sie strukturiertere Daten wie JSON-Objekte oder benutzerdefinierte Klassen für Ihre Ein- und Ausgaben verwenden.
- Mit verschiedenen Medien arbeiten: Erstellen Sie Agents, die nicht nur Text, sondern auch Bilder, Audio und Video verstehen und verarbeiten können.
- Intelligentere Planung: Sie können einen Workflow entwerfen, in dem zuerst ein detaillierter Plan erstellt wird, bevor die Agents mit der Arbeit beginnen. Das ist nützlich für komplexe Aufgaben, die mehrere Schritte erfordern.
- Selbstkorrektur aktivieren: Erstellen Sie KI-Agenten, die ihre eigene Arbeit überprüfen können. Wenn die Ausgabe nicht gut genug ist, kann der Agent es noch einmal versuchen und so eine Schleife von Verbesserungen erstellen, bis das Ergebnis perfekt ist.
Weitere Informationen zu LlamaIndex-Workflows finden Sie in der Dokumentation zu LlamaIndex-Workflows.