Ollama

Ollama を使用すると、オープンソース モデルをローカルで実行し、Agent Framework で使用できます。 これは、データをオンプレミスに保持する必要がある開発、テスト、シナリオに最適です。

前提条件

  • Ollama をインストールして起動します。
  • 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"

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

前提条件

例を実行する前に、ダウンロードしたモデルで Ollama がインストールされ、ローカルで実行されていることを確認します。

ollama pull llama3.2

Note

すべてのモデルが関数呼び出しをサポートしているわけではありません。 ツールを使用する場合は、 llama3.2 または qwen3:4bしてみてください。

Installation

pip install agent-framework-ollama --pre

Configuration

OLLAMA_MODEL="llama3.2"

ネイティブ クライアントは、既定で http://localhost:11434 に接続します。 OLLAMA_HOST環境変数または host コンストラクター引数でオーバーライドします。

Ollama エージェントを作成する

OllamaChatClient は、ネイティブの Ollama 統合と、関数ツールとストリーミングの完全なサポートを提供します。

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

Python Ollama クライアント (OllamaChatClient および OpenAIChatClient は、Ollama と互換性のあるエンドポイントを指します) は、ローカルで呼び出されたツールをサポートします。 Ollama はローカル モデル ランタイムであるため、ホストされるツールの種類は存在しません。

ツール Status 注記
関数ツール ✅ 標準の Python の呼び出し可能オブジェクト、または @ai_function。 選択したモデルが実際にそれらを呼び出すことができるかどうかは、モデル自体によって異なります。
ツールの承認 ✅ フレームワークの関数呼び出しチャットクライアントによって提供され、あらゆる関数ツールの呼び出しに対応します。
コード インタープリター ❌ ホストされているコード インタープリターはありません。
ファイル検索 ❌ ホストされているファイル検索はありません。
Web 検索 ❌ ホストされた Web 検索はありません。
ホストされている MCP ツール ❌ Ollama では、ホストされている MCP は公開されません。
ローカル MCP ツール ✅ プロセス内で実行され、任意のチャット クライアントで動作します。

ネイティブ OllamaChatClientの場合、 tool_choice では auto と noneがサポートされます。 既定と auto は構成済みのツールを送信しますが、 none は要求からそれらを省略します。 required モードと、Ollama では適用できないため、allowed_toolsChatClientInvalidRequestExceptionを発生させるオプションが含まれます。

関数ツール

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

この機能の Go サポートは近日公開予定です。 最新の状態については、 Agent Framework Go リポジトリ を参照してください。

次のステップ