ein lokales LLM. Hübsch.
Aber nach den ersten paar Gesprächen fragen Sie sich vielleicht: Was kann ich sonst noch damit machen?
Nun, wie wäre es, wenn Sie den lokalen LLM-Agenten mit einem Software nutzen würden?
In diesem Beitrag untersuchen wir, wie man einen lokalen LLM in einen Software-verwendenden Agenten verwandelt. Konkret werden wir verwenden
- Gemma 4-Modell (kantenfreundliche Varianten) als unser lokales LLM
- Ollama für die Betreuung des lokalen LLM
- OpenAI Brokers SDK für die Agentenlaufzeit
- Tavily Websuche MCP als ein Beispiel für das externe Software
Wir werden einen Mini-Deep-Analysis-Agenten bauen, der das Internet durchsuchen, Beweise sammeln und anhand einer Benutzerfrage eine Antwort mit Zitaten zusammenfassen kann.
Am Ende des Beitrags hätten Sie einen funktionierenden lokalen Deep-Analysis-Agenten und ein wiederverwendbares Implementierungsmuster, um ein lokales Modell in einen lokalen KI-Agenten umzuwandeln.

Wenn Sie an einem lokalen Coding-Agent-Setup interessiert sind, habe ich es bereits besprochen Gemma 4 + OpenCode. In diesem Beitrag konzentrieren wir uns auf das allgemeinere Muster der Verbindung eines lokalen Modells mit einer Agentenlaufzeit und externen Instruments.
1. Richten Sie den lokalen Agentenstapel ein
Wir müssen vier Teile vorbereiten, bevor wir den Code schreiben: Ollama, Gemma 4 (insbesondere das Gemma 4 E4B-Modell), OpenAI Brokers SDK und Tavily MCP.
Zuerst installieren wir Ollama.
Unter Home windows können Sie das Installationsprogramm von der offiziellen Ollama-Web site herunterladen:
https://ollama.com/obtain
Oder verwenden winget in PowerShell:
winget set up Ollama.Ollama
Unter Linux kann Ollama installiert werden mit:
"curl -fsSL https://ollama.com/set up.sh | sh"
Bitte überprüfen Sie nach der Set up:
ollama --version
Denken Sie unter Home windows daran, Ollama über das Startmenü zu starten. Sobald es ausgeführt wird, ist der lokale API-Endpunkt verfügbar.
Als nächstes ziehen wir das lokale Modell. Hier verwenden wir die Gemma 4 E4B-Variante:
ollama pull gemma4:e4b
Gemma 4 hat mehrere Varianten. Das E4B-Modell eignet sich intestine für unseren Zweck, da es für Edge-/lokale Agenten-Workflows konzipiert ist. Mein Laptop verfügt über eine NVIDIA RTX 2000 Ada Laptop computer-GPU mit etwa 8 GB VRAM. Wenn Ihre Maschine stärker eingeschränkt ist, können Sie die leichtere E2B-Variante ausprobieren:
ollama pull gemma4:e2b
Als nächstes benötigen wir die Agent-Laufzeitbibliothek. Dafür verwenden wir das OpenAI Brokers SDK:
pip set up openai-agents
Sie benötigen außerdem den OpenAI-kompatiblen Consumer:
pip set up openai
Hier ist Folgendes zu beachten: Später verweisen wir den Consumer auf den lokalen Endpunkt von Ollama. Dies bedeutet additionally nicht, dass wir Modellaufrufe an OpenAI senden.
Schließlich benötigen wir einen Tavily MCP-Endpunkt. Falls Sie es noch nicht verwendet haben: Tavily ist eine Such-API, die für LLM-Anwendungen entwickelt wurde. In diesem Beitrag verwenden wir seinen MCP-Server, damit der Agent das Internet durchsuchen kann.
Sie müssen zunächst ein Tavily-Konto erstellen und einen API-Schlüssel erhalten. Auf der Tavily-Plattform können Sie direkt einen MCP-Hyperlink mit der folgenden Kind generieren:
https://mcp.tavily.com/mcp/?tavilyApiKey=<your-api-key>
Jetzt sind wir bereit.
Die Verwendung von Tavily hier ist keine gesponserte Entscheidung; Es wird hier als ein praktisches MCP verwendet Das gleiche Muster kann auch mit anderen MCP-kompatiblen Instruments funktionieren.
Tatsächlich ist der gesamte Stapel hier nicht die einzige Possibility. Anstatt Ollama zu verwenden, können Sie das lokale Modell mit LM Studio oder llama.cpp bereitstellen. Anstelle der Gemma 4-Modelle können Sie es auch mit anderen Modellen, z. B. der Qwen-Familie, versuchen. Für Agent-Framework, Wir haben auch Optionen von Google oder Anthropic. Anstelle von Tavily könnten Sie auch andere MCP-Instruments anschließen. Ich verwende diese Kombination einfach, weil ich mit diesem Stapel vertraut bin. Die wichtigste Erkenntnis aus dieser Fallstudie ist jedoch das allgemeine lokale Agentenmuster.
2. Konfigurieren Sie den Native Analysis Agent
Mit dem OpenAI Brokers SDK ist dies das Finale Agent Objekt, das wir zusammenstellen müssen:
from brokers import Agent
agent = Agent(
identify="Native Analysis Agent",
directions=RESEARCH_AGENT_INSTRUCTIONS,
mannequin=mannequin,
mcp_servers=(tavily_server),
mcp_config={"include_server_in_tool_names": True},
)
Packen wir jeden Teil aus.
2.1 Das Modell
Zuerst das Modell.
from openai import AsyncOpenAI
from brokers import OpenAIChatCompletionsModel
MODEL_NAME = "gemma4:e4b"
OLLAMA_BASE_URL = "http://localhost:11434/v1"
consumer = AsyncOpenAI(
api_key="ollama",
base_url=OLLAMA_BASE_URL,
)
mannequin = OpenAIChatCompletionsModel(
mannequin=MODEL_NAME,
openai_client=consumer,
)
Wir beginnen mit der Erstellung eines Shoppers, der auf Ollamas lokalen OpenAI-kompatiblen Endpunkt verweist.
Dann verwenden wir OpenAIChatCompletionsModel um das Gemma-Modell in ein Modellobjekt zu verpacken. Dadurch kann das Brokers SDK dieses Modell innerhalb der Agentenschleife verwenden.
Beachten Sie, dass die api_key="ollama" worth ist nur ein Platzhalter. Ollama benötigt nicht wirklich einen echten OpenAI-API-Schlüssel. Wir verwenden es, weil der Kunde dieses Feld erwartet.
2.2 Die Anleitung
Als nächstes definieren wir die Anweisung für den Agenten mit dem gewünschten Forschungsverhalten:
from datetime import datetime
CURRENT_DATE = datetime.now().strftime("%B %d, %Y")
# Observe that this instruction is iterated with AI
RESEARCH_AGENT_INSTRUCTIONS = f"""
(Position)
You're a concise analysis assistant.
(Process)
Reply the consumer's query by turning it right into a small net analysis activity.
Use the present date when deciphering time-sensitive questions: {CURRENT_DATE}.
(Analysis habits)
Begin with one focused search question.
For suggestion or comparability questions, full this analysis loop earlier than answering:
first establish the principle choices, then seek for comparability context, then synthesize a suggestion.
Use follow-up searches when the primary outcomes are inadequate, conflicting, or solely cowl a part of the query.
Want related and credible sources, and observe which supply helps every necessary declare.
Earlier than answering, test whether or not the gathered proof is sufficient to help the conclusion.
(Anticipated output)
Give a direct reply first, then briefly clarify the proof behind it.
Embody supply hyperlinks for key factual claims.
(Guidelines)
Don't depend on reminiscence for information which will have modified.
Don't invent lacking particulars.
Preserve the reply concise.
""".strip()
2.3 Die Werkzeuge
Jetzt statten wir den Agenten mit dem Websuchtool aus. In diesem Fall nutzen wir die Tavily-Suchmaschine über MCP:
from brokers import Agent, Runner
from brokers.mcp import MCPServerStreamableHttp
TAVILY_MCP_URL = "YOUR_TAVILY_MCP_URL"
async with MCPServerStreamableHttp(
identify="tavily",
params={"url": TAVILY_MCP_URL},
) as tavily_server:
instruments = await tavily_server.list_tools()
print("Out there Tavily instruments:")
for instrument in instruments:
description = (instrument.description or "").substitute("n", " ")
print(f"- {instrument.identify}: {description(:120)}")
agent = Agent(
identify="Native Analysis Agent",
directions=RESEARCH_AGENT_INSTRUCTIONS,
mannequin=mannequin,
mcp_servers=(tavily_server),
mcp_config={"include_server_in_tool_names": True},
)
consequence = await Runner.run(agent, RESEARCH_QUESTION, max_turns=MAX_TURNS)
Dieser Codeblock macht drei Dinge:
- Es wird eine Verbindung zum MCP-Server von Tavily hergestellt
async with MCPServerStreamableHttp(...) as tavily_server:Sobald die Verbindung hergestellt ist, stellt Tavily seine verfügbaren Instruments dem Agenten-SDK zur Verfügung. - Wir erstellen das Agent-Objekt innerhalb des MCP-Kontexts. Beachten Sie, dass wir haben
mcp_servers=(tavily_server)wodurch die MCP-Instruments von Tavily mit dem Agenten verbunden werden. - Wir führen den Agenten endlich mit aus
consequence = await Runner.run(agent, RESEARCH_QUESTION, max_turns=MAX_TURNS). Der Kontextmanager ist hier wichtig, da die MCP-Verbindung nur innerhalb des aktiv istasync withBlock.
mcp_config={"include_server_in_tool_names": True}dient hauptsächlich der Lesbarkeit im Hint. Ohne diese Angabe wird der Werkzeugname nur als angezeigttavily_search. Damit wird der Werkzeugname als angezeigtmcp_tavily__tavily_search. Dadurch wird deutlicher, dass der Software-Aufruf über den Tavily MCP-Server erfolgte.
3. Stellen Sie eine Forschungsfrage
Nachdem der Agent nun konfiguriert ist, testen wir ihn mit einer konkreten Frage:
„Welches WM-Spiel am 23. Juni 2026 hatte in der Gruppenphase den höchsten Einsatz und warum?“
Um zu untersuchen, was passiert ist, drucke ich eine kompakte Ablaufverfolgung aus:
def compact(worth: object, restrict: int = 220) -> str:
textual content = str(worth).substitute("n", " ")
return textual content if len(textual content) <= restrict else textual content(:restrict) + "..."
for step, merchandise in enumerate(consequence.new_items, begin=1):
raw_item = getattr(merchandise, "raw_item", None)
raw_type = getattr(raw_item, "sort", "")
raw_name = getattr(raw_item, "identify", "")
raw_output = getattr(raw_item, "output", "")
print(
f"{step:02d} | {sort(merchandise).__name__} | "
f"{raw_type or raw_name} | {compact(raw_output or raw_item)}"
)
Bei mir sah die Spur so aus:
01 | ToolCallItem | function_call | ResponseFunctionToolCall(arguments='{"question":"World Cup 2026 group stage matches June 23, 2026 stakes"}', identify='mcp_tavily__tavily_search', ...)
02 | ToolCallOutputItem | | {'call_id': ..., 'output': ...}
03 | MessageOutputItem | message | ResponseOutputMessage(... closing reply ...)
Dadurch können wir das Verhalten des Agenten direkt sehen. In diesem Lauf beschloss das lokale Gemma-Modell, das Tavily-Suchtool aufzurufen, das Brokers SDK führte diesen Toolaufruf aus und übergab die Ergebnisse an das Modell zurück. Dann lieferte das Modell die endgültige Antwort.
Um die endgültige Antwort zu sehen, können wir Folgendes ausdrucken:
print(consequence.final_output)
Das hat der Agent produziert:
The match with the largest group-stage stakes on June 23, 2026, was Colombia vs. DR Congo.
Why:
Based on FIFA reporting, this particular match was highlighted as a important second the place Colombia superior into the knockout part of the event.
The article notes that Daniel Munoz scored the primary aim for Colombia throughout this Group Okay fixture, which immediately contributed to their development within the competitors.
Proof
- FIFA: An article titled "Colombia v Congo DR Group Okay FIFA World Cup 2026" particularly stories on a key second from this match, stating that Munoz's aim helped hearth Colombia into the knockout part.
Supply: https://digitalhub.fifa.com/rework/450614d3-72d7-4c1f-85ff-ea0fbee6f28d/Colombia-v-Congo-DR-Group-Okay-FIFA-World-Cup-2026?focuspoint=0.51
- Yahoo Sports activities: Confirms the fixture and consequence for that date: Colombia defeated DR Congo.
Supply: https://sports activities.yahoo.com/soccer/article/2026-world-cup-results-standings-and-schedule-live-scores-group-stage-updates-and-how-to-watch-050724193.html
Beachten Sie, dass der Agent in diesem Lauf nur eine Suchrunde durchgeführt hat, da die Suchergebnisse bereits genügend Beweise enthielten, damit das Modell antworten konnte. Für komplexere Fragen wären mehrere Such- und Argumentationsrunden erforderlich, und unser aktuelles Framework unterstützt dies natürlich.
4. Zusammenfassung
Ein lokaler LLM muss nicht als Chat-Modell bleiben.
In diesem Beitrag haben wir ein Gemma 4 E4B-Modell lokal über Ollama bereitgestellt, dann haben wir das Modell in eine Agentenlaufzeit eingefügt, die vom OpenAI Brokers SDK bereitgestellt wird, und wir haben dem Agenten ein Websuchtool gegeben, damit er Informationen on-line finden kann, um Benutzerfragen zu beantworten.
Von hier aus können Sie dieses Muster ganz einfach um stärkere Forschungsanweisungen erweitern oder einen expliziteren Planungs-Reflexions-Workflow erstellen, wenn Sie weiterhin in Richtung tiefergehender Forschung arbeiten möchten, oder Sie können den Agenten für viele andere Anwendungsfälle mit weiteren MCP-Instruments verbinden.
Viel Spaß beim Bauen!
Referenz
Ollama: https://ollama.com/
Gemma-Modellfamilie: https://ai.google.dev/gemma
OpenAI Brokers SDK: https://openai.github.io/openai-agents-python/
Brokers SDK MCP-Dokumente: https://openai.github.io/openai-agents-python/mcp/
Tavily MCP-Dokumente: https://docs.tavily.com/documentation/mcp
