Semantic Kernel์˜ ์ปค๋„ ์ดํ•ดํ•˜๊ธฐ (C#)

Semantic Kernel์—์„œ ์ปค๋„์€ ์ค‘์‹ฌ์ ์ธ ๊ตฌ์„ฑ ์š”์†Œ๋กœ, AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์„œ๋น„์Šค์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ด€๋ฆฌํ•˜๋Š” ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection) ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์„œ๋น„์Šค์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ปค๋„์— ์ œ๊ณตํ•˜๋ฉด, AI๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์ด๋ฅผ ์›ํ™œํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปค๋„์€ ์ค‘์‹ฌ์— ์žˆ์Šต๋‹ˆ๋‹ค

์ปค๋„์€ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ์™€ AI ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์„œ๋น„์Šค์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, Semantic Kernel SDK ๋‚ด ๊ฑฐ์˜ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ์—์ด์ „ํŠธ๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, Semantic Kernel์—์„œ ์–ด๋–ค ํ”„๋กฌํ”„ํŠธ๋‚˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋”๋ผ๋„, ์ปค๋„์€ ํ•ญ์ƒ ํ•„์š”ํ•œ ์„œ๋น„์Šค์™€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. image

์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ๋งค์šฐ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๋‹จ์ผ ์œ„์น˜์—์„œ AI ์—์ด์ „ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปค๋„์—์„œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค:

  1. ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ตœ์ ์˜ AI ์„œ๋น„์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  2. ์ œ๊ณต๋œ ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  3. ํ”„๋กฌํ”„ํŠธ๋ฅผ AI ์„œ๋น„์Šค์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

  4. ์‘๋‹ต์„ ์ˆ˜์‹ ํ•˜๊ณ  ๊ตฌ๋ฌธ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

  5. ๋งˆ์ง€๋ง‰์œผ๋กœ LLM์˜ ์‘๋‹ต์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ „์ฒด ๊ณผ์ •์—์„œ ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ์ด๋ฒคํŠธ์™€ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋กœ๊น…, ์‚ฌ์šฉ์ž์—๊ฒŒ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ์ œ๊ณต, ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ฑ…์ž„ ์žˆ๋Š” AI ๊ตฌํ˜„๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ๋‹จ์ผ ์œ„์น˜์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋„ ๋นŒ๋“œํ•˜๊ธฐ

์ปค๋„์„ ๋นŒ๋“œํ•˜๊ธฐ ์ „์— ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

๊ตฌ์„ฑ ์š”์†Œ์„ค๋ช…
์„œ๋น„์ŠคAI ์„œ๋น„์Šค(์˜ˆ: ์ฑ„ํŒ… ์™„์„ฑ)์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ๊ธฐํƒ€ ์„œ๋น„์Šค(์˜ˆ: ๋กœ๊น… ๋ฐ HTTP ํด๋ผ์ด์–ธํŠธ)๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  ์–ธ์–ด์—์„œ ์˜์กด์„ฑ ์ฃผ์ž…์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด .NET์˜ ์„œ๋น„์Šค ์ œ๊ณต์ž ํŒจํ„ด์„ ๋ชจ๋ธ๋กœ ์‚ผ์•˜์Šต๋‹ˆ๋‹ค.
ํ”Œ๋Ÿฌ๊ทธ์ธAI ์„œ๋น„์Šค์™€ ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, AI ์„œ๋น„์Šค๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปค๋„์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด, ํŒŒ์ผ ์ƒ๋‹จ์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Plugins.Core;

๊ทธ๋Ÿฐ ๋‹ค์Œ, ์ปค๋„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

// ์ปค๋„ ๋นŒ๋” ์ƒ์„ฑ
var builder = Kernel.CreateBuilder();
 
// Azure OpenAI ์ฑ„ํŒ… ์™„์„ฑ ์„œ๋น„์Šค ์ถ”๊ฐ€
builder.AddAzureOpenAIChatCompletion(modelId, endpoint, apiKey);
 
// ๋กœ๊น… ์„œ๋น„์Šค ์ถ”๊ฐ€
builder.Services.AddLogging(c => c.AddDebug().SetMinimumLevel(LogLevel.Trace));
 
// ํ”Œ๋Ÿฌ๊ทธ์ธ ์ถ”๊ฐ€
builder.Plugins.AddFromType<TimePlugin>();
 
// ์ปค๋„ ๋นŒ๋“œ
Kernel kernel = builder.Build();

MCP ์„œ๋ฒ„ ์ƒ์„ฑํ•˜๊ธฐ

Semantic Kernel ์ธ์Šคํ„ด์Šค์— ๋“ฑ๋ก๋œ ๊ธฐ๋Šฅ์œผ๋กœ๋ถ€ํ„ฐ MCP ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด, ์ผ๋ฐ˜์ ์œผ๋กœ ์ปค๋„์„ ์ƒ์„ฑํ•œ ๋‹ค์Œ, ํ•ด๋‹น ์ปค๋„๋กœ๋ถ€ํ„ฐ MCP ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Plugins.Core;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.SemanticKernel.Mcp;
 
var builder = Kernel.CreateBuilder();
builder.AddAzureOpenAIChatCompletion(modelId, endpoint, apiKey);
builder.Plugins.AddFromType<TimePlugin>();
var kernel = builder.Build();
 
// MCP ์„œ๋ฒ„ ์‹คํ–‰
var server = new McpServer(kernel);
server.Start();

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, Semantic Kernel์— ๋“ฑ๋ก๋œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋Š” MCP ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ž์„ธํ•œ ๋‚ด์šฉ์€ Microsoft Learn์˜ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.