Ollama

Med Ollama kan du köra modeller med öppen källkod lokalt och använda dem med Agent Framework. Detta är idealiskt för utveckling, testning och scenarier där du behöver lagra data lokalt.

Varning

Behandla modell- eller inbäddningsutdata och modellgenererade verktygsanrop när de stöds som ej betrodda programindata. Verifiera dem innan koden utför biverkningar eller återger innehåll. Om du konfigurerar en anpassad slutpunkt kontrollerar du att du litar på dess URL och operator.

Förutsättningar

  • Installera och starta Ollama.
  • Ladda ned en modell, till exempel ollama pull llama3.2.

Installation

dotnet add package OllamaSharp
dotnet add package Microsoft.Agents.AI --prerelease

Configuration

OLLAMA_ENDPOINT="http://localhost:11434"
OLLAMA_MODEL_NAME="llama3.2"

Skapa en Ollama-agent

using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
using OllamaSharp;

var endpoint = Environment.GetEnvironmentVariable("OLLAMA_ENDPOINT") ?? throw new InvalidOperationException("OLLAMA_ENDPOINT is not set.");
var modelName = Environment.GetEnvironmentVariable("OLLAMA_MODEL_NAME") ?? throw new InvalidOperationException("OLLAMA_MODEL_NAME is not set.");

// Get a chat client for Ollama and use it to construct an AIAgent.
AIAgent agent = new OllamaApiClient(new Uri(endpoint), modelName)
    .AsAIAgent(instructions: "You are good at telling jokes.", name: "Joker");

// Invoke the agent and output the text result.
Console.WriteLine(await agent.RunAsync("Tell me a joke about a pirate."));

Förutsättningar

Kontrollera att Ollama är installerat och körs lokalt med en modell nedladdad innan du kör några exempel:

ollama pull llama3.2

Anmärkning

Alla modeller stöder inte funktionsanrop. Prova eller llama3.2för verktygsanvändningqwen3:4b.

Installation

pip install agent-framework-ollama --pre

Configuration

OLLAMA_MODEL="llama3.2"

Den interna klienten ansluter till http://localhost:11434 som standard. Åsidosätt den med OLLAMA_HOST miljövariabeln eller host konstruktorns argument.

Skapa Ollama-agenter

OllamaChatClient ger inbyggd Ollama-integrering med fullt stöd för funktionsverktyg och strömning.

import asyncio
from agent_framework import Agent
from agent_framework.ollama import OllamaChatClient

async def main():
    agent = Agent(
        client=OllamaChatClient(),
        name="HelpfulAssistant",
        instructions="You are a helpful assistant running locally via Ollama.",
    )
    result = await agent.run("What is the largest city in France?")
    print(result)

asyncio.run(main())

Tools

De Python Ollama-klienterna (OllamaChatClient och OpenAIChatClient pekade på en Ollama-kompatibel slutpunkt) stöder lokalt anropade verktyg. Värdbaserade verktygstyper finns inte eftersom Ollama är en lokal modellkörning.

Tool Status Noteringar
Funktionsverktyg ✅ Vanliga anropsbara Python-objekt eller @ai_function. Om den valda modellen faktiskt kan anropa dem beror på själva modellen.
Godkännande av verktyg ✅ Tillhandahålls av ramverkets funktionsanropande chattklient; fungerar med valfritt funktionsverktygsanrop.
Kodtolkare ❌ Ingen värdbaserad kodtolkare.
Filsökning ❌ Ingen värdbaserad filsökning.
Webbsökning ❌ Ingen värdbaserad webbsökning.
Värdhanterade MCP-verktyg ❌ Ollama exponerar inte värdbaserad MCP.
Lokala MCP-verktyg ✅ Körs i din process och fungerar med alla chattklienter.

För inbyggda OllamaChatClientstöder autotool_choice och none. Standardvärdet och auto skicka de konfigurerade verktygen, samtidigt none som de utelämnas från begäran. Läget required och alternativen som inkluderar allowed_tools höjning ChatClientInvalidRequestException eftersom Ollama inte kan framtvinga dem.

Funktionsverktyg

import asyncio
from datetime import datetime
from agent_framework import Agent
from agent_framework.ollama import OllamaChatClient

def get_time(location: str) -> str:
    """Get the current time."""
    return f"The current time in {location} is {datetime.now().strftime('%I:%M %p')}."

async def main():
    agent = Agent(
        client=OllamaChatClient(),
        name="TimeAgent",
        instructions="You are a helpful time agent.",
        tools=get_time,
    )
    result = await agent.run("What time is it in Seattle?")
    print(result)

asyncio.run(main())

Streaming

from agent_framework import Agent
from agent_framework.ollama import OllamaChatClient

async def streaming_example():
    agent = Agent(
        client=OllamaChatClient(),
        instructions="You are a helpful assistant.",
    )
    print("Agent: ", end="", flush=True)
    async for chunk in agent.run("Tell me about Python.", stream=True):
        if chunk.text:
            print(chunk.text, end="", flush=True)
    print()

Anmärkning

Go-stöd för den här funktionen kommer snart. Se Agent Framework Go-lagringsplatsen för den senaste statusen.

Nästa steg