Ollama, Gemma4 e4b, MS Agent Framework, MCP Client 예제

오늘 아침 새롭게 출시된 Google의 새 오픈 소스 LLM인 Gemma 4를 바로 테스트해보고 싶어서 테스트 코드를 작성해봤습니다.

MS Agent Framework, Ollama, 그리고 MS Learn MCP 서버 툴 콜링까지 합친 온전한 예제를 손쉽게 만들 수 있었고 로컬에서도 꽤 의미있는 결과를 낼 수 있었습니다. Edge 디바이스 용으로 경량화된 환경, 그리고 애플 M2 Air 정도 되는 사양에서도 그럭저럭 쓸만한 결과가 나와서 흥미로웠습니다. :smiley: (이미 잘 아시겠지만, .NET은 애플 실리콘 맥에서도 너무나 자연스럽게 잘 작동합니다.)

아래 코드를 gemma4.cs 로 저장하고 dotnet run gemma4.cs 혹은 chmod +x gemma4.cs; ./gemma4.cs 로 Ollama가 떠 있는 상태에서 실행하시면 Model Pull부터 툴 콜링까지 한 번에 전개되는 것을 보실 수 있을 것입니다. :smiley:

#!/usr/bin/env dotnet
#:package Microsoft.Agents.AI@1.*
#:package Microsoft.Extensions.AI@10.*
#:package OllamaSharp@5.*
#:package ModelContextProtocol@1.*
#:property PublishAot=false

using Microsoft.Extensions.AI;
using Microsoft.Agents.AI;
using OllamaSharp;
using ModelContextProtocol.Client;

var ollamaEndpoint = "http://localhost:11434";
var modelId = "gemma4";
var systemCard = "당신은 Ollama 안에서 실행되는 유능하고 유용한 로컬 AI 어시스턴트입니다. 모든 메시지는 한국어로 답해야 합니다.";
var prompt = "Windows Sandbox를 XML 방식으로 제어하는 방법이 궁금합니다.";

var option = new ChatClientAgentRunOptions()
{
	ChatOptions = new()
	{
		Reasoning = new()
		{
			Effort = ReasoningEffort.High,
			Output = ReasoningOutput.Full,
		}
	},
};

using var chatClient = new OllamaApiClient(ollamaEndpoint, modelId);
await foreach (var eachFragment in chatClient.PullModelAsync(modelId))
	Console.WriteLine($"{eachFragment?.Status}: {eachFragment?.Percent}%");

var client = await McpClient.CreateAsync(new HttpClientTransport(new HttpClientTransportOptions() { Name = "microsoft_learn", Endpoint = new Uri("https://learn.microsoft.com/api/mcp"), }));

var agent = chatClient.AsAIAgent(
	instructions: systemCard,
	tools: (await client.ListToolsAsync()).Cast<AITool>().ToList());
var session = await agent.CreateSessionAsync().ConfigureAwait(false);

await foreach (var eachFragment in agent.RunStreamingAsync(prompt, session, option))
{
	foreach (var eachContent in eachFragment.Contents)
	{
		if (eachContent is TextReasoningContent reasoning)
			Console.Write(reasoning.Text);
		else if (eachContent is TextContent text)
			Console.Write(text.Text);
		else
			Console.WriteLine($"<< {eachContent.GetType()} >>");
	}
}

6개의 좋아요

노트북에 설치 하고 돌릴수는 없죠 ?? 서버급 으로 성능 좋은거에 설치 해야 하죠 ?

작년 인가 재작년인가 LLM 노트북에 깔고 뭐 할라다가 죽은줄 알았는데 암것도 안되서

1개의 좋아요

테스트에 사용한 모델은 gemma4:e4b 버전입니다.

모델 구동 자체는 NVIDIA GeForce RTX 4060 Laptop 정도 (전용 GPU 메모리 8GB)에서 턱걸이로 가능하지만, MS Learn MCP 서버가 되돌려주는 내용까지 합쳐서 추론하는 것은 이것보다는 사양이 좋아야 할 것 같습니다. 이게 몇 세대 전 NVIDIA 그래픽카드이니 요즈음 구할 수 있는 것으로 테스트하시면 적당히 돌아갈 것 같습니다.

맥북의 경우, 맥북 M2 Air 16GB 정도에서 MS Learn MCP 서버가 되돌려주는 내용까지 합쳐서 추론하는 것도 적당히 구동되고 있습니다.

개인적인 감상으로, Gemma4는 qwen이나 kimi 같은 하이엔드 LLM보다는 훨씬 여유있게 돌아가는 것 같습니다.

2개의 좋아요

젬마가 멀티모달 펑션콜도 되는점이 강점이다라고 하던게 ,라이트한 모델로 윈도제어용을 찾던 찰나에 이 방법으로 시도해봐야겠습니다. 파이썬 설치에 씨름하느라 젬마설치 실패 -파이썬초보라

게이밍급 개발급 녹북에는 원활하게 돌아갈것같으며

(ai개발 서폿머신으로 장만 했으나 겜돌이가됨)

라이트모델 평션콜이 되나 샘플확보중에 있습니다.

시도하고자하는것

text+윈도이미지 주고 => 평션콜

이거 안될시 text+이미지해석 => 텍스트분석 => 평션콜

3개의 좋아요