วันนี้รีบแวะไปฟังช่วงนี้ลอง Semantic Kernel กับ Local LLM ในช่วงวันหยุดครับ เลยสนใจ และได้จดมา 3 หัวข้อตามนี้
มี FB Live ด้วยนะ https://www.facebook.com/kidchenko/videos/725832880271298/?rdid=DdA3hrUeNqva2HJc#
A2A for .NET Development with GPT-OSS: How AI-powered open-source tools are transforming .NET development workflows.
Speaker Charunthon Limseelo
- GPT-OSS: The First Open Weight Models from OpenAI
📌 หลังจาก Open AI ได้ Open Weight Models จริงๆอีกรอบตามชื่อ บ อีกรอบ (เคยเปิดตอน GPT2) โดยมี Model 2 ตัว ได้แก่ gpt-oss-20b / gpt-oss-120b License แบบ Apache 2.0
📌 ความสามารถเจ้า GPT-OSS Model นี้มีหลายอย่างได้แก่ Chat Completions / Function calling / Reasoning / Structured outputs / Streaming รองรับแบบ text in/out นะ
📌 ถ้าลองมาเทียบกับ GPT2 พบว่าโครงสร้างของตัว Model จะมีการเพิ่ม Transformer / MoE Layer (ให้ Model เรียน Expert ได้ดีขึ้น + ในพลังงานน้อยลง เพราะไม่ได้ใช้ Neural ทุกตัวแล้ว

- Agent คือ อะไร ?

ปกติแล้ว LLM มันได้แค่ Text มันเลยมี Idea ของ Agent ขึ้นมา เพื่อให้มันต่อกับโลกภายนอกได้
- A2A Protocal คือ อะไร ?


📌 เป็นมาตรฐานกลางที่พัฒนาจากทาง Google เพื่อให้ Agent แต่ละตัวมีรูปแบบการสื่อสารกันด้วยภาษากลาง โดยจะมีตัว
- Capability Discovery เหมือน Resume บอกว่าทำอะไรได้บ้าง
- Secure Collaborate คุยกัน โดยไม่ต้องเปิดเผย State ของ Neural / Memory / Tools ของตัวเอง
- Negotiate Interraction ตัว Agent มันคุย จัดการ Task ง่ายต่างๆ
- รวมถึงเป็นตัวเชื่อม (Interoperbolity) ของ platform ต่างๆ เช่น LangChain / Sematic Kernel / MCP (หัวข้อถัดไป)
📌 ถ้าในมุม Coding ของ dotnet จะมีตัว SDK ให้ https://github.com/a2aproject/a2a-dotnet ลง Lib ตามนี้
dotnet add package A2A dotnet add package A2A.AspNetCore
📌 มี Class ที่สำคัญ
A2ACardResolver
เป็น HR ดู Resume ของ hello.dev
A2ACardResolver cardResolver = new A2ACardResolver(new Uri("http://hello.dev:5100/")); AgentCard agentCard = await cardResolver.GetAgentCardAsync();
- อีกฝั่ง ถ้าเป็น ASP.NET Core สามารถเรียกใช้ app.MapA2A กระจาย Resume ของเราไป
TaskManager taskManager = new TaskManager(); EchoAgent agent = new EchoAgent(); agent.Attach(taskManager); // Single line to expose your agent via A2A protocol app.MapA2A(taskManager, "/agent");
A2AClient
หลังจากรู้แล้ว Agent แต่ละตัวทำอะไรได้ เริ่มติดต่อกับแล้ว โดยมีการคุย 2 แบบ Message-based / Task-based หรือทำเป็น Stream ก็ได้นะ
ถ้าตัวอย่างแบบเต็มลองดูจากในนี้ได้ Building AI Agents with the A2A .NET SDK
จากนั้นเป็น Demo ตัว Source Code A2A Property Finder ตัวอย่าง A2A ช้วยหาข้อมูลอลังหา ให้กับ User โดยใช้ backend ใช้ groq Run Model gpt-oss ตอนนี้ฟรี มันตัวใหญ่นะ dotnetenv nuget อ่าน .en

ตัว A2A เป็นตัวครอบ MCP นะ

Resource: Slide / Source Code A2A Property Finder / A2A .NET SDK Comprehensive Documentation / AI apps for .NET developers
MCP in .NET: Practical insights and tips
Speaker MD Rafee
- LLM มันดี แต่
📌 มันดี มีความรู้หลากหลาย ทรงพลัง มีความคิดสร้างสรรค์ แต่
- Limit Knowledge มันรู้เท่าที่ Train + เข้าถึงข้อมูลข้างในของเราไม่ได้ พวกไฟล์ต่างๆ หรือ ระบบ DB บราๆ และเติมความรู้จาก Internet เองไม่ได้ อย่าง Claude Sonnet 4 (Data Jan 2025) / GPT5 (Data Sept 2024)
- ตัวมันเองตอบได้แต่ Text ทำอย่างอื่นยาก
- Agent คือ อะไร ?
Agent มันวิธีการนึงที่ให้ LLM มาต่อสภาพแวดล้อมข้างนอกได้ เช่น หาข้อมูลตั๋วเครื่องบิน + จองตั๋วเครื่องบินเป็นต้น
- จากเดิมที่ LLM (สมอง) มันเก่งด้านการ Planning + Reasoning + Reflection ที่เราได้กำหนดจาก Prompt (Task / Role)
- Memory เอาไว้ทดสิ่งที่ LLM มันคิดเวลาคุยจะได้ Context เดิม
- และสุดท้ายส่วนของ Tools ส่วนที่ให้ LLM Accesss สภาพแวดล้อมข้างนอกได้ Actions เช่น การ Search / Call API

- แม้ว่าทำ Agent มาแก้ปัญหาได้ แต่มีประเด็นหลายอย่าง อาทิ เช่น
📌 Tools มันหลากหลาย และมี Requirement เฉพาะตัวของมัน อย่างถ้าเราไปต่อ jira / github ต้องมาคิดว่า
- API + DATA Format - REST API / Graph QL
- Authentication
📌 ถ้าต้องแก้เยอะๆจะทำยังไง ถ้าให้ Agent คุยกันเอง มันยุ่งเหยิงไปหมด มี Dependeny / Coupling สูงไปหมด และเขียน Code จัดการแต่ละอีก มันยากกับการดูแลด้วย (n-n problem)

📌 ตรงนี้เอา LSP (Language Server Protocol) มาแก้ เพื่อลดความซับซ้อน ทุกคนทำ API ตามมาตรฐานกลาง สำหรับ Tools จะเป็นส่วนของ MCP (Model Context Protocol) ออกแบบโดยทาง Claude มองว่าเหมือน port USB มาเชื่อมกับ LLM ให้สั่งการทำงานต่างๆ

- Component MCP

📌 Host - ตัว AI App อย่าง Clade Desktop
📌 Client - ตัวเปิด Connection ไปหา Tools ต่าง
📌 Server - App ของเราอย่าง jira / azure cloud / Garmin Device เป็นต้น มันบอกว่า
- Tools - สิ่งที่เตรียมไว้ให้ Model ใช้ หรือ พวก Action ต่างๆ เช่น การ Search / Send Email / Add Data เป็นต้น เอาจริงๆ ผมคิดว่ามันน่าจะคล้ายกับ [KernelFunction] ของ Semantic Kernel
- Resource - Data ที่เปิดให้ AI App มาใช้ อาจจะเป็น
- Database / File
- หรือ พวก API Doc ก็ได้นะ
- หรือ observabilityData พวก Log / Metric เป็นต้น - Prompt - อะไรที่ AI เข้ามาทำได้ มี Template เช่น การเปิด PR / Coding Standard

- แล้วเราจะรู้ได้ไงว่าที MCP Server ที่ไหนบ้าง ?

ตอนนี้มี MCP Server เยอะมาก มาจากทั้งในส่วนของ Official และ Community ดังนั้นการใช้งานควรเลือกของ Official ถ้าใช้ Community ต้องดูด้วยมันที่เค้าเขียนมา มัน Expose อะไรออกไป อาจจะทำให้มีความเสี่ยงส่วน Security ได้
โดยถ้าเราอยากรู้ MCP Server หาได้จาก smithery.ai / github.com/modelcontextprotocol / mcp.so / mcpservers.org
- การใช้งาน MCP


📌 การเชื่อมต่อ โดยปกติแล้วจะเป็นไฟล์ json ที่บอกชื่อ Rule ว่าเข้า MCP Server ไหน และ Command ที่ใช้เรียก การเพิ่มลด จะอิงไปตามอันนี้แล้วแต่ Doc ที่ Host ใช้งาน อย่าง Claude Desktop
📌 MCP Inspector - เป็นเครื่องมือแนวๆ Swagger / Open API บอกว่าตัว MCP Server นั้นๆ เปิดอะไรให้เราใช้งานบ้าง
- MCP in .NET + Demo
📡SERVER📡
📌 Add NuGet ModelContextProtocol หรือ สร้าง Project Template
dotnet new install Microsoft.Extensions.AI.Templates dotnet new mcpserver -n SampleMcpServer
📌 ในส่วนของ main (program.cs) บอกด้วยว่าเราใช้ protocal ไหน และให้ Resource กลุ่มไหน
builder.Services.AddMcpServer() .WithStdioServerTransport() .WithPromptsFromAssembly() .WithResourcesFromAssembly() .WithToolsFromAssembly();
📌 Class เติม [McpServerToolType] / [McpServerPromptType] / [McpServerResourceType]
📌 ส่วน Method
- McpServerXXX เช่น
-[McpServerTool(Name = "convert_markdown_to_html", Title = "Convert Markdown to HTML")]
-[McpServerPrompt(Name = "get_search_prompt", Title = "Prompt for searching copilot instructions")]
-[McpServerResource, Description("Returns the Investment endpoint URL.")]
- Description เช่น
-[Description("Converts markdown text to HTML.")]
แอบคล้าย SemanicKernel KernelFunction > McpServerXXX 55
📌 Config JSON ออกไปให้ Host อย่าง VSCode / Claude Desktop ใช้
💻CLIENT💻
📌 ขา Client แบบ HttpClient มี Class MCPClient ให้เปิด Connection
Resource: https://devblogs.microsoft.com/dotnet/mcp-server-dotnet-nuget-quickstart/ (Getting Start) / modelcontextprotocol/csharp-sdk / mcp-dotnet-samples / lets-learn-mcp-csharp / mcp-lokalise
Vector Search Engine in .NET: Unlocking high-performance search capabilities in your .NET applications.
Speaker Thanapat Chotipun
- Challenge

📌 เข้าใจว่า User จะทำอะไร (User Intent) นั่นเองครับ โดย Agoda เค้าจะ YCS (Yield Control System) ระบบหลังบ้านจัดการห้องพัก ถ้าตัวระบบมันเข้าใจคนมากขึ้น ลดเวลา และเพิ่มโอกาศได้ด้วย
📌 Run On Local
📌 DOTNET Family เพราะเป็น Stack หลักที่ Agoda ใช้งาน
- ทำไมต้อง Vector Search
📌 ของเดิมมีอะไรบ้าง
- keyword search - หาจากตำที่ User ป้อนเข้าไปใน c# String.Contain()
- fuzzy search - หาเผื่อเคสที่พิมพ์ผิดได้บางคำ
- BM25 - Algorithm ดูจากความถี่ของคำและความยาวของเอกสาร
📌 Vector Search
ปัญหาของ Search แบบเดิม มันยังไม่เข้าใจความหมายที่ User เข้าใจอยู่ดี Vector Search เลยเข้ามาตอบโจทย์ตรงนี้ มองข้อมูลทุกอย่างให้เป็น Vector (ทำ Embedding) จากนั้นเอา Algorithm ต่างๆ มาข่วย เช่น Cosine Similarity
- Tech Stack

- ONNX Runtime ตัว Run Model ขึ้นมาใช้งาน นำเสนอจากทาง Microsoft เองเลย รองรับ GPU ด้วย ถ้า Model ที่ได้ใน huggingface มี format นี้เลยจะดีมาก
- SQLLite เป็น Vector DB


- ตอนใช้ ML.NET ต้อง Check Id ด้วย ของ python return 0 / net 1 ต้องไปดู doc ของ model ด้วย รวมถึง Context Length ที่รับได้ และ Tokenize ที่ Algorithm + Size ที่ตรงกัน อาจจะดูจาก Huggling Face ที่เจ้าของ Model ได้ให้ข้อมูลไว้
- จากนั้นเป็น Demo


Resource: DotNetVectorSearch / https://learn.microsoft.com/en-us/azure/machine-learning/concept-onnx?view=azureml-api-2
Reference
- Live: https://www.facebook.com/kidchenko/videos/725832880271298/?rdid=DdA3hrUeNqva2HJc#
- https://lu.ma/rvc35skt
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.