Ollama

O Ollama permite executar modelos open-source localmente e usá-los com o Agent Framework. Isto é ideal para desenvolvimento, testes e cenários onde precisa de manter os dados no local.

Pré-requisitos

  • Instale e inicie o Ollama.
  • Descarregue 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"

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

Pré-requisitos

Certifique-se de que o Ollama está instalado e a correr localmente com um modelo descarregado antes de executar qualquer exemplo:

ollama pull llama3.2

Observação

Nem todos os modelos suportam a chamada de funções. Para uso de ferramentas, experimente llama3.2 ou qwen3:4b.

Installation

pip install agent-framework-ollama --pre

Configuration

OLLAMA_MODEL="llama3.2"

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

Criar Agentes Ollama

OllamaChatClient fornece integração nativa com Ollama com suporte total para ferramentas funcionais 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 Python clientes Ollama (OllamaChatClient e OpenAIChatClient apontados para um endpoint compatível com Ollama) suportam ferramentas invocadas localmente. Os tipos de ferramentas alojadas não existem porque o Ollama é um modelo local em tempo de execução.

Tool Situação Observações
Ferramentas Funcionais Objetos invocáveis padrão de Python ou @ai_function. Se o modelo selecionado pode realmente chamá-los depende do próprio modelo.
Aprovação de Ferramentas Fornecido pelo cliente de chat de invocação de funções do framework; Funciona com qualquer chamada de ferramenta funcional.
Intérprete de código Sem interpretador de código alojado.
Pesquisa de ficheiros Sem pesquisa de ficheiros alojados.
Pesquisa na Web Não há pesquisa na web alojada.
Ferramentas alojadas do MCP O Ollama não expõe MCP hospedado.
Ferramentas MCP Locais Corre no teu processo e funciona com qualquer cliente de chat.

Ferramentas de Função

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

Observação

O suporte para esta funcionalidade do go está a chegar em breve. Consulte o repositório Agent Framework Go para o estado mais recente.

Passos seguintes