Ollama

O Ollama permite executar modelos de software livre localmente e usá-los com o Agent Framework. Isso é ideal para desenvolvimento, teste e cenários em que você precisa manter dados locais.

Prerequisites

  • Instale e inicie o Ollama.
  • Baixe um modelo, como 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"

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

Prerequisites

Verifique se o Ollama está instalado e em execução localmente com um modelo baixado antes de executar qualquer exemplo:

ollama pull llama3.2

Note

Nem todos os modelos dão suporte à chamada de função. Para uso de ferramentas, tente llama3.2 ou qwen3:4b.

Installation

pip install agent-framework-ollama --pre

Configuration

OLLAMA_MODEL="llama3.2"

O cliente nativo se conecta por http://localhost:11434 padrão. Substitua-o com a OLLAMA_HOST variável de ambiente ou o argumento do host construtor.

Criar agentes Ollama

OllamaChatClient fornece integração nativa do Ollama com suporte total para ferramentas de funções e streaming.

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

Os clientes Python Ollama (OllamaChatClient e OpenAIChatClient apontados para um ponto de extremidade compatível com Ollama) dão suporte a ferramentas invocadas localmente. Os tipos de ferramentas hospedadas não existem porque o Ollama é um runtime de modelo local.

Tool Status Notes
Ferramentas de Funções Callables Python padrão ou @ai_function. Se o modelo selecionado pode realmente chamá-los depende do próprio modelo.
Aprovação da ferramenta Fornecido pelo cliente de chat com invocação de funções do framework; funciona com qualquer chamada de ferramenta de função.
Interpretador de Código Nenhum interpretador de código hospedado.
Pesquisa de Arquivo Nenhuma pesquisa de arquivo hospedada.
Pesquisa na Web Nenhuma pesquisa na Web hospedada.
Ferramentas MCP hospedadas O Ollama não expõe o MCP hospedado.
Ferramentas MCP locais É executado em seu processo e funciona com qualquer cliente de chat.

Ferramentas de Funções

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

Note

O suporte para Go a este recurso estará disponível em breve. Consulte o repositório Agent Framework Go para obter o status mais recente.

Próximas Etapas