Semantic Kernel์˜ Python SDK์—์„œ๋Š” OpenAI Realtime API์™€ **Model Context Protocol(MCP)**์„ ๋ชจ๋‘ ์ง€์›ํ•˜์—ฌ, ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ AI ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ, Realtime API๋Š” WebSocket ๋ฐ WebRTC ๊ธฐ๋ฐ˜์˜ Realtime Client๋ฅผ ํ†ตํ•ด ํ…์ŠคํŠธยท์˜ค๋””์˜ค ์ŠคํŠธ๋ฆฌ๋ฐ๊ณผ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ œ๊ณตํ•˜๊ณ , MCP๋Š” SK๋ฅผ ํ˜ธ์ŠคํŠธ๋‚˜ ์„œ๋ฒ„๋กœ ๋™์ž‘์‹œ์ผœ ์™ธ๋ถ€ ๋„๊ตฌ์™€ ์—์ด์ „ํŠธ๋ฅผ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ๋กœ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ฒฐํ•ฉํ•˜๋ฉด, SK ๋‚ด๋ถ€์—์„œ ์‹ค์‹œ๊ฐ„ ์ž…์ถœ๋ ฅ ๊ธฐ๋Šฅ์„ Kernel ํ•จ์ˆ˜๋กœ ๋ž˜ํ•‘(wrap)ํ•˜๊ณ , MCP ํ”Œ๋Ÿฌ๊ทธ์ธ ํ˜น์€ ์„œ๋ฒ„๋กœ ๋…ธ์ถœํ•˜์—ฌ ๋‹ค๋ฅธ MCP ํ˜ธ์ŠคํŠธ/ํด๋ผ์ด์–ธํŠธ์™€ ์ƒํ˜ธ์šด์šฉํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. OpenAI Realtime API ์ง€์›

1.1 ์ง€์› ํ˜„ํ™ฉ

1.2 ์ œ๊ณต ๊ธฐ๋Šฅ

  • WebSocket ๊ธฐ๋ฐ˜ ํด๋ผ์ด์–ธํŠธ(OpenAIRealtimeWebsocket)์™€

  • WebRTC ๊ธฐ๋ฐ˜ ํด๋ผ์ด์–ธํŠธ(OpenAIRealtimeWebRTC)๊ฐ€ ์ œ๊ณต๋˜์–ด

1.3 ์‚ฌ์šฉ ์˜ˆ์‹œ

from semantic_kernel.connectors.ai.open_ai import OpenAIRealtimeWebsocket, OpenAIRealtimeExecutionSettings
 
# 1) Realtime ํด๋ผ์ด์–ธํŠธ ์ƒ์„ฑ
realtime_client = OpenAIRealtimeWebsocket()
 
# 2) ์‹คํ–‰ ์„ค์ •: ์Œ์„ฑ ์ง€์ • ๋“ฑ
settings = OpenAIRealtimeExecutionSettings(voice="alloy")
 
# 3) ์„ธ์…˜ ๊ด€๋ฆฌ ๋ฐ ๋ฉ”์‹œ์ง€ ์†ก์ˆ˜์‹ 
async with realtime_client(settings=settings, create_response=True):
    async for event in realtime_client.receive():
        if event.type == "text":
            print(event.text.text, end="")

์ด์ฒ˜๋Ÿผ receive()๊ฐ€ async generator๋กœ ๋™์ž‘ํ•˜์—ฌ, ๋„์ฐฉํ•˜๋Š” ํ…์ŠคํŠธ๋‚˜ ์˜ค๋””์˜ค ์ฒญํฌ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (Realtime AI Integrations for Semantic Kernel | Microsoft Learn).

์ฐธ๊ณ 

2. Model Context Protocol(MCP) ์ง€์›

2.1 MCP ๊ฐœ์š”

  • MCP๋Š” Anthropic์ด ์ œ์•ˆํ•œ ๋ชจ๋ธยท๋„๊ตฌยท์—์ด์ „ํŠธ ์ƒํ˜ธ ์šด์šฉ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ๋กœ, stdioยทSSEยทWebSocket ๋“ฑ ๋‹ค์–‘ํ•œ ์ „์†ก ๋ฐฉ์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค (Semantic Kernel adds Model Context Protocol (MCP) support for Python | Semantic Kernel).

2.2 SK์˜ MCP ๊ธฐ๋Šฅ

  • MCP ํ˜ธ์ŠคํŠธ(Client): SK๊ฐ€ ์™ธ๋ถ€ MCP ์„œ๋ฒ„๋ฅผ ํ”Œ๋Ÿฌ๊ทธ์ธ์ฒ˜๋Ÿผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋„๊ตฌ์™€ ํ”„๋กฌํ”„ํŠธ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

  • MCP ์„œ๋ฒ„(Server): SK์˜ ํ•จ์ˆ˜ยทํ”„๋กฌํ”„ํŠธ๋ฅผ MCP ์„œ๋ฒ„๋กœ ๋…ธ์ถœํ•˜์—ฌ, ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์—์„œ ํ‘œ์ค€ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (Semantic Kernel adds Model Context Protocol (MCP) support for Python | Semantic Kernel).

2.2.1 ์˜ˆ์‹œ: MCP ํ˜ธ์ŠคํŠธ

from semantic_kernel.connectors.mcp import MCPStdioPlugin
 
async with MCPStdioPlugin(
    name="ReleaseNotes",
    command="uv",
    args=["--directory=python/samples/demos/mcp_server","run","mcp_server_with_sampling.py"],
) as plugin:
    # plugin์„ Kernel ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์‚ฌ์šฉ
    ...

์ด ๊ตฌ์„ฑ์œผ๋กœ ๋กœ์ปฌ stdio MCP ์„œ๋ฒ„๋ฅผ SK ์—์ด์ „ํŠธ์—์„œ ๋ฐ”๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (Semantic Kernel adds Model Context Protocol (MCP) support for Python | Semantic Kernel).

2.2.2 ์˜ˆ์‹œ: MCP ์„œ๋ฒ„

from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
 
kernel = Kernel()
kernel.add_service(OpenAIChatCompletion(service_id="default"))
 
# SK๋ฅผ MCP ์„œ๋ฒ„๋กœ ์‹คํ–‰
server = kernel.as_mcp_server(server_name="sk")
import anyio
from mcp.server.stdio import stdio_server
 
async def handle_stdin():
    async with stdio_server() as (read, write):
        await server.run(read, write, server.create_initialization_options())
 
anyio.run(handle_stdin)

์ด์ œ sk๋ผ๋Š” MCP ์„œ๋ฒ„๋กœ SK ํ•จ์ˆ˜์™€ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค (Semantic Kernel adds Model Context Protocol (MCP) support for Python | Semantic Kernel).

3. Realtime API์™€ MCP ํ†ตํ•ฉ ์‹œ๋‚˜๋ฆฌ์˜ค

3.1 ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”

  1. Realtime Client๋ฅผ Kernel์— ๋“ฑ๋กํ•˜์—ฌ

  2. KernelFunction์œผ๋กœ ๋ž˜ํ•‘(wrap)

  3. Wrap๋œ ํ•จ์ˆ˜ ๋˜๋Š” ์—์ด์ „ํŠธ๋ฅผ MCP ์„œ๋ฒ„๋กœ ๋…ธ์ถœ

  4. ๋‹ค๋ฅธ MCP ํ˜ธ์ŠคํŠธ/ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ๋กœ ํ˜ธ์ถœ

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ๊ธฐ๋Šฅ์„ MCP ๊ธฐ๋ฐ˜ ํˆด ์ฒด์ธ์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (Realtime AI Integrations for Semantic Kernel | Microsoft Learn, Semantic Kernel adds Model Context Protocol (MCP) support for Python | Semantic Kernel).

3.2 ์ฃผ์˜์‚ฌํ•ญ ๋ฐ ์ œํ•œ

4. ๊ฒฐ๋ก 

Semantic Kernel Python SDK์˜ Realtime API์™€ MCP ๊ธฐ๋Šฅ์„ ๊ฒฐํ•ฉํ•˜๋ฉด, ํ…์ŠคํŠธยท์˜ค๋””์˜ค ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ๊ณผ ์—์ด์ „ํŠธ ๊ฐ„ ํ‘œ์ค€ํ™”๋œ ์ƒํ˜ธ์šด์šฉ์„ฑ์„ ํ•œ ๋ฒˆ์— ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•œ ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์—์ด์ „ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค์™€ ๋„คํŠธ์›Œํฌ ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋‚˜๋“œ๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ์†์‰ฝ๊ฒŒ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ .NET ์ชฝ Realtime ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๋ฉด, Python์—์„œ ์‹œ๋„ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ .NET ํ™˜๊ฒฝ์œผ๋กœ๋„ ํ™•์žฅํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.