카테고리 없음
[C#] Ollama를 이용한 로컬 LLM 연동, API 호출
전자기린
2026. 11. 9. 23:13

[C#] Ollama를 이용한 로컬 LLM 연동, API 호출
Ollama로 로컬에 구동 중인 LLM 모델을 C#(.NET) 환경에서 HttpClient를 통해 호출하는 방법입니다.
절차
- Ollama 설치 및 모델 실행
- 요청/응답 모델(Class) 정의
- API 호출 코드 작성
- (선택) 스트리밍 출력 처리
1. Ollama 설치 및 모델 실행
터미널(CMD)에서 사용할 모델을 다운로드 및 실행합니다.
ollama run llama3
기본적으로 http://localhost:11434 포트로 API 서버가 활성화됩니다.
(백그라운드 실행 확인: ollama list)
2. 요청 및 응답 데이터 모델 정의
Ollama /api/generate 규격에 맞는 데이터 클래스를 생성합니다.
public class OllamaRequest
{
public string model { get; set; }
public string prompt { get; set; }
public bool stream { get; set; } = false;
}
public class OllamaResponse
{
public string model { get; set; }
public string response { get; set; }
public bool done { get; set; }
}
3. API 호출 코드 작성
외부 라이브러리 없이 .NET 기본 HttpClient와 System.Text.Json을 사용합니다.
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
class Program
{
private static readonly HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
string apiUrl = "http://localhost:11434/api/generate";
var requestData = new OllamaRequest
{
model = "llama3",
prompt = "C#의 장점 3가지를 요약해줘.",
stream = false
};
string json = JsonSerializer.Serialize(requestData);
var content = new StringContent(json, Encoding.UTF8, "application/json");
try
{
HttpResponseMessage response = await client.PostAsync(apiUrl, content);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize<OllamaResponse>(responseBody);
Console.WriteLine("=== 응답 결과 ===");
Console.WriteLine(result.response);
}
catch (HttpRequestException ex)
{
Console.WriteLine($"호출 실패: {ex.Message}");
}
}
}
3-1. 호출 실패(Connection refused / 10061) 에러 발생 시
Ollama 백그라운드 서비스가 꺼져 있는 경우 발생합니다.
작업 관리자에서 Ollama 프로세스를 확인하거나, 터미널에서 ollama serve를 실행하여 서비스 데몬을 구동합니다.
4. 실시간 한 글자씩 스트리밍(Streaming) 출력
응답 대기 시간 없이 실시간 토큰 출력이 필요한 경우 stream: true로 설정하고 라인 단위로 수신합니다.
var requestData = new OllamaRequest { model = "llama3", prompt = "테스트", stream = true };
var response = await client.PostAsync(apiUrl, new StringContent(JsonSerializer.Serialize(requestData), Encoding.UTF8, "application/json"));
using var stream = await response.Content.ReadAsStreamAsync();
using var reader = new System.IO.StreamReader(stream);
while (!reader.EndOfStream)
{
var line = await reader.ReadLineAsync();
if (!string.IsNullOrWhiteSpace(line))
{
var chunk = JsonSerializer.Deserialize<OllamaResponse>(line);
Console.Write(chunk.response);
}
}