Ollama

Ollama umożliwia lokalne uruchamianie modeli typu open source i używanie ich z platformą Agent Framework. Jest to idealne rozwiązanie w przypadku programowania, testowania i scenariuszy, w których należy przechowywać dane lokalnie.

Wymagania wstępne

  • Zainstaluj i uruchom aplikację Ollama.
  • Pobierz model, taki jak ollama pull llama3.2.

Instalacja

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

Configuration

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

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

Wymagania wstępne

Upewnij się, że system Ollama jest zainstalowany i uruchomiony lokalnie z pobranym modelem przed uruchomieniem jakichkolwiek przykładów:

ollama pull llama3.2

Note

Nie wszystkie modele obsługują wywoływanie funkcji. W przypadku użycia narzędzia spróbuj llama3.2 lub qwen3:4b.

Instalacja

pip install agent-framework-ollama --pre

Configuration

OLLAMA_MODEL="llama3.2"

Klient natywny http://localhost:11434 domyślnie nawiązuje połączenie. Zastąpij ją zmienną środowiskową OLLAMA_HOST lub argumentem konstruktora host .

Tworzenie agentów Ollama

OllamaChatClient Zapewnia natywną integrację Ollama z pełną obsługą narzędzi funkcji i przesyłania strumieniowego.

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

Klienci Python Ollama (OllamaChatClient i OpenAIChatClient wskazywane na punkt końcowy zgodny z Ollama) obsługują lokalnie wywoływane narzędzia. Hostowane typy narzędzi nie istnieją, ponieważ Ollama jest lokalnym środowiskiem uruchomieniowym modelu.

Narzędzie Status Notatki
Narzędzia funkcji Standardowe obiekty wywoływalne Pythona lub @ai_function. To, czy wybrany model może je rzeczywiście wywołać, zależy od samego modelu.
Zatwierdzanie narzędzi Zapewniane przez klienta czatu frameworka do wywoływania funkcji; działa z dowolnym wywołaniem narzędzia-funkcji.
Interpreter kodów Brak interpretera kodu hostowanego.
Wyszukiwanie plików Brak wyszukiwania plików hostowanych.
Wyszukiwanie w Sieci Web Brak hostowanego wyszukiwania w Internecie.
Hostowane narzędzia MCP Ollama nie uwidacznia hostowanej umowy MCP.
Lokalne narzędzia MCP Działa w procesie i współpracuje z dowolnym klientem czatu.

Narzędzia funkcji

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

Obsługa tej funkcji w języku Go będzie dostępna wkrótce. Aktualny status znajdziesz w repozytorium Agent Framework dla Go.

Następne kroki