Ollama

Ollama consente di eseguire modelli open source in locale e di usarli con Agent Framework. Questo è ideale per lo sviluppo, il test e gli scenari in cui è necessario mantenere i dati in locale.

Prerequisiti

  • Installare e avviare Ollama.
  • Scaricare un modello, ad esempio 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"

Creare un agente Ollama

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."));

Prerequisiti

Verificare che Ollama sia installato ed eseguito localmente con un modello scaricato prima di eseguire esempi:

ollama pull llama3.2

Annotazioni

Non tutti i modelli supportano la chiamata di funzione. Per l'utilizzo degli strumenti, provare llama3.2 o qwen3:4b.

Installation

pip install agent-framework-ollama --pre

Configuration

OLLAMA_MODEL="llama3.2"

Il client nativo si connette a per http://localhost:11434 impostazione predefinita. Eseguirne l'override con la OLLAMA_HOST variabile di ambiente o l'argomento del host costruttore.

Creare agenti Ollama

OllamaChatClient offre l'integrazione nativa di Ollama con supporto completo per gli strumenti e lo streaming delle funzioni.

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

I client Ollama Python (OllamaChatClient e OpenAIChatClient a cui punta un endpoint compatibile con Ollama) supportano gli strumenti richiamati localmente. I tipi di strumenti ospitati non esistono perché Ollama è un runtime del modello locale.

Strumento Condizione Note
Strumenti per le funzioni Oggetti richiamabili Python standard o @ai_function. Se il modello selezionato può effettivamente chiamarli dipende dal modello stesso.
Approvazione degli strumenti Fornito dal client di chat del framework per l'invocazione di funzioni; funziona con qualsiasi chiamata a uno strumento funzione.
Interprete di codice Nessun interprete di codice ospitato.
Ricerca file Nessuna ricerca di file ospitata.
Ricerca Web Nessuna ricerca Web ospitata.
Strumenti MCP ospitati Ollama non espone mcp ospitato.
Strumenti MCP locali Viene eseguito nel processo e funziona con qualsiasi client di chat.

Strumenti per le funzioni

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()

Annotazioni

Il supporto per questa funzionalità sarà presto disponibile. Vedere il repository di Agent Framework Go per lo stato più aggiornato.

Passaggi successivi