สรุปงาน .NET Conf TH 2024

สำหรับงาน เริ่มจัดมาตั้งแต่ปี 2018 แล้วครับ เออแอบลองไปดู Blog เก่าๆ เพราะความยากการตั้งชื่อ Blog 55 ตอนงานปี 2018 มี blog จดไว้ด้วยครับ แต่อาจจะไม่ครบทุกปีนะ

Opening

Speaker: Jose Barbosa

จากปีที่แล้วตัว dotnet มีภาพรวมที่เห็นชัดเจนขึ้นจาก NET8

มาปีนี้มีงาน dotnet conf ที่เพิ่งจัดไปเมื่อสัปดาห์ที่แล้ว มีของใหม่เปิดตัวหลายอย่าง เช่น

  • IDE ตอนนี้ตัว JetBrains Rider แจกฟรี (non commercial)
  • dotnet มีปรับหลายส่วนทั้ง AI / ASP.NET เช่น OpenAPI Doc / Hybrid Cache เป็นต้น
  • dotnet aspire มีความสามารถเพิ่มขึ้นนะ เปิดตัว dotnet9 ปีนี้ โดยมีปรับใน 4 ด้านตามรูป
ref Welcome to .NET 9 - .NET Conf 2024 Keynote

The Official OpenAI Library for .NET

Speaker: Surasuk Oakkharaamonphong

ถ้า dev สาย dotnet เมื่อก่อนเวลาจะไปใช้ OpenAI จะมี Lib ของภาษาอื่นๆ เช่น python หรือ ไม่ไปใช้ผ่าน REST API เลย แต่ตอนนี้มี Lib ทางการออกมา ดูแลโดยทาง OpenAI ครับ NuGet Gallery | OpenAI

การใช้งาน Model ของ Open AI มี 2 ที่ให้ใช้งานครับ

  • จาก OpenAI เอง เสียเงิน > Endpoint + API Key
  • Azure Open AI เสียเงิน > Endpoint + Deployment + API Key

ตัว Lib มีของทั้ง / ค่ายครับทั้ง NuGet Gallery | OpenAI / NuGet Gallery | Azure.AI.OpenAI ภาพรวมของ API คล้ายกัน ต่างกันแต่ตอน Initial Client เพื่อใช้งานครับ

OpenAIClient client = new(apiKey: OPENAI_KEY);
AzureOpenAIClient client = new(endpoint: new(AZURE_OPENAI_ENDPOINT), credential: new ApiKeyCredential(AZURE_OPENAI_KEY));

ใน Session นีมี Demo อาทิ เช่น RealTimeChat / Vision / Text To Speech เป็นต้นครับ โดยที่ อจ บอล แกจะเน้นเยอะสุดในส่วนของ RealTimeChat + สำหรับพวก Audio จะมี Lib เพิ่มด้วย NuGet Gallery | NAudio โดยผมจดมาคราวๆ ตามนี้ครับ

  • ConversationStartUpdate รับ input จากไหน
  • ConversationInputSpeechStartedUpdate - ClearPlayback
  • ConversationItemStreamingStartedUpdate ตอน AI เริ่มตอบกลับ
  • ConversationPartDeltaUpdate ส่วนนี้ส่วนที่ ค่อยๆ ถามกลับมา ที่เราถาม ตรงนี้มี
    - Text
    - Audio Stream ออกมาด้วย แต่ระวัง Null
async Task RealtimeChat() {
    var realtimeClient = client.GetRealtimeConversationClient("gpt-4o-realtime-preview");
    using var session = await realtimeClient.StartConversationSessionAsync();    

    ConversationSessionOptions options = new() {
        Voice = ConversationVoice.Shimmer,
    };

    await session.ConfigureSessionAsync(options);
    SpeakerOutput speaker = new();

    await foreach (var update in session.ReceiveUpdatesAsync()) {        
        switch (update) {
            case ConversationSessionStartedUpdate:
                Console.Write($"== Realtime Chat ==");
                _ = Task.Run(async () =>
                {
                    using var mic = MicrophoneAudioStream.Start();
                    await session.SendInputAudioAsync(mic);
                });
                break;
            case ConversationInputSpeechStartedUpdate:
                speaker.ClearPlayback();
                break;
            case ConversationItemStreamingStartedUpdate:
                Console.Write("\n\n>> ");  
                break;
            case ConversationItemStreamingPartDeltaUpdate deltaUpdate:
                Console.Write(deltaUpdate.AudioTranscript); 

                if (deltaUpdate.AudioBytes is not null) {
                    speaker.EnqueueForPlayback(deltaUpdate.AudioBytes);
                }
                break;
        }   
    }
}

ลองไปดู Code เต็มได้ จาก Repo ต้นทางได้ใน Resource ครับ
Resource: ai/dotnet at main · codebangkok/ai · GitHub / Clip

Building and deploying an Azure Functions app with .NET Aspire

Speaker: Veeravat Jeensuksang

.NET Aspire - Cloud Native Ready Stack มีของหมด App / DB / Observability มีนะ เป็น Dashboard ในตัวเลย ถ้าใช้ Visual Studio มี Template Aspire Starter App เข้ามาตั้งต้น โดยมี 4 Project ผมแยก 2 ส่วนนะ

  • Aspire
    - xxx.AppHost - Define Infra
    - xxxServiceDefaults - inject AddOpenTelemetry/ AddServiceDiscovery ทำให้ทุก Component รู้จักกัน
  • App
    - xxx.Web สำหรับส่วน Front End
    - xxx.APIService งาน backend ของเรา

ตอน Run เดี๋ยวมันไปดึง Container Image เข้ามาเอง และมี Dashboard ให้นะ ให็เห็นนะว่า Request ที่ไม่มีเส้นทางยังไง หรือ มี Metric อะไรที่ควรดู เช่น อยากรู้การใช้ memory เป็นต้น

แล้วที่นี้ในงาน dotnet conf 2024 มันมีส่วน Azure Function มานะ ตอนสร้างเราเพียงแค่ Link เข้ากับ Aspire ให้เลือก Enlist in .NET Aspire มันจะใส่ของมาให้ ส่วนของ

  • Asprire Project xxx.AppHost / xxxServiceDefaults
  • App ในที่นี้จะเป็นตัว Azure Function ตอนทำงานจริงมาเพิ่มส่วน Infra AzureStorage

การ Deploy ถ้าเป็น .NET Aspire เราใส่ Subscription + Resource Group มาบอก Credential ใน AppSetting

สำหรับ Project เดิม ต้องการอะไรใน VS คลิกขวา Add .NET Aspire Package อารมณ์เหมือนเพิ่ม NuGet

แล้วที่นี้ใน Code มา Add Resorouce เช่น AzureStorage กำหนดชื่อ รูปแบบ หรือกำหนด Config ของ Azure Function ได้ ตัวอย่าง การ Config ประมาณนี้ครับ

var builder = DistributedApplication.CreateBuilder(args);
//AzureStorage กำหนดชื่อ รูปแบบ
var storage = builder.AddAzureStorage("mystorage").RunAsEmulator();
var blobs = storage.AddBlobs("blobs");

//Config Azure Function
builder.AdddAzureFunctionsProject<Projects.AspireImageReResizer>("aspireimageresizer")
.WithReference(blobs);

ส่วน Step How to ผมว่าลองตามในนี้ได้เลย

Resource: What's new in .NET Aspire 9.0 - .NET Aspire | Microsoft Learn

Speaker: Wittawat Karpkrikaew

สำหรับ Session นี้พี่ป้องกันจะมาแชร์ว่า เริ่มเข้าสู่วงการ AI ยังไง โดยเริ่มจาก AI > Semantic Kernel > Azure AI > MongoDB Atlas

ตอนนี้ AI เต็มไปหมด แล้วเราจะรับมือยังไง
เอาง่ายๆ เข้าร่วมกับมันครับ

การเรียนรู้ แนะนำเทคนิค Ikigai เรียนรู้ที่เราชอบ ที่มี และเราได้เงินด้วย อันนี้สำคัญ

  • หาจุดที่เรารู้ และเชื่อมโยงไปยัง keyword อื่น
  • อย่างเคสของพี่ป้องกัน แกสาย csharp อยู่แล้ว ก็กระโดดเข้าไปได้เลย โดยฝั่ง dotnet เอง จะเข้ามาใช้ตัว AI นอกจากใช้ nuget openai / azure.ai.openai แล้ว ยังมี Framework มาช่วยนะ ของ dotnet จะเป็นตัว Sematic Kernel

ต่อมาก็ขยับไปใช้ Azure Open AI (Azure AI Foundry) ซึ่งมีจุดเด่นของ Model As A Service + ตัว Studio ที่จัดการ Model / Test แล้ว มีส่วน Network Security Support และ Content Filtering ด้วย

จากนั้นลองเอามาใช้ด้วยกันทำ Semantic Kernel ใช้ Plugin ส่วนเสริมเอาไว้จัดการข้อมูล หรือ PreProcess นิดหน่อยก่อนส่งไปหา Model

พอใช้ไปสักดกฟัง Model มันมีข้อจำกัด มันเรียนแหละ แต่เรียนถึงปีไหน ไม่ใช่ความรู้ล่าสุดแน่ๆ

RAG เป็นอีกคำศัพท์นึงที่เราต้องเรียนรู้ช่วงนี้ เข้ามาแก่้ปัญหาข้างต้น โดยเจ้า RAG มาช่วยให้ AI เราฉลาดขึ้น หาข้อมูล Domain ที่มีขึ้นมาก่อน และส่งไปให้ Model จัดการ

  • ถ้าใครเขียน SQL มาก่อน ความใกล้เคียงกับ Domain SQL Like นั้นเอง เป็นตัวอย่างที่ง่ายที่สุด
  • จริงๆความคล้ายใน AI เบื่องหลังมัน คือ Math ที่วันระยะของ Vector 2 ตัว อัลกอริทึมที่นิยมกัน Cosine Similarity ตอนนี้พี่เค้าจะได้ลองใช้
    - Semantic Kernel จะมีส่วน memory ทำ Vector
    - Model text-embedding-3-small

แล้วระหว่างที่ลองจะพบว่าส่องภาษาไทยตรงๆไปบางทีมันหาไม่เจอ แบบหนังมันๆ หนังสยองขวัญ ตรงนี้มันจะมี AI อีกชุด มาชุดสรุปว่าไอ้ที่เราป้อนเข้าไป มันอยู่ในกลุ่มไหน แสดงว่าเราไม่จำเป็นต้องใช้ AI Model เดียวนะ ผสมได้

คำถามถัดไป ถ้าเราจะใช้งานจริงทำยังไง ถ้าทำ RAG คำค้น กับ DB ต้องเก็บในรูปแบบ Vector เหมือนกันนะ

สำหรับ DB ที่เก็บ Vector ได้มีหลายค่ายนะ อย่างใน Session นี้ พี่ป้องกัน จะใช้ตัว MongoDB Atlas มาเก็บข้อมูล Vector และ Feature Vector Search มาหาความคล้ายนั้นเอง
ปล Vector ตอนนี้มีหลายค่ายมี Vector นะ SQL Server 2025 มีแล้ว / Postgres / Maria DB

และปิดท้าย Resource นั้นเอง ทางพี่ป้องกัน และทาง TT Software มีเขียนเส้นทางว่าผ่านอะไรมาบ้างครับ

  1. สรุปเนื้อหาจากงาน .NET Conf 2024 Keynote: State of .NET + AI | by Ponggun | T. T. Software Solution | Medium
  2. สรุปเนื้อหาจากงาน .NET Conf 2024 Get started incorporating AI into your .NET applications and services | by Ponggun | T. T. Software Solution | Medium
  3. บันทึกการทดลองใช้ Azure OpenAI Service | by Ponggun | T. T. Software Solution | Medium
  4. RAG พื้นฐานโดย Semantic Kernel C# ร่วมกับ Chat Completion Model และ Text Embedding Model ใน Azure OpenAI Service | by Ponggun | T. T. Software Solution | Sep, 2024 | Medium
  5. บันทึกความเข้าใจจากการเรียนรู้การใช้งาน Semantic Kernel in C# ร่วมกับ MongoDB Atlas Vector Search และ MongoDB Compass | by Ponggun | T. T. Software Solution | Nov, 2024 | Medium

ส่วนของ Slide / Sample Code / VDO เต็ม //น่าจะเก็บจาก Slide ครบนะ

Building Resilient .NET Applications

Speaker: Nattapong (Nok) Nunpan

Resilient = ทำยังไงให้ SW ของเราล่ม (Disruption / Failure) และลุกขึ้นมาได้ (Recover) โดยที่กระทบกับ End User น้อยที่สุด

Common Source of Failure

  • Network Issue เช่น สั่งของ แล้วเนตหลุด
  • HW Failures
  • Software Bugs เช่น ลืม Edge Case
  • Service Outages - ถ้าเราใช้ API ของคนอื่น อย่าง AI หรือ Payment GW
  • Resource Outage - ใช้เยอะจนเต็ม CAP HW แล้วทำให้มันช้าลง หรือ ไม่ตอบสนอง
  • Security Breach
  • Human Error

Why Resilient

  • ensure continuous availability
  • Enhance user experience
  • Protect Business Revenue / Brand Protection
  • Regulatory Compliance อาจจะมีกฏบังคับ เช่น SLA
  • adapt to unpredicted event เอาให้มี Know How และ DATA เวลาเจอปัญหาใหม้่

Resilience Pattern มีหลาย pattern

  • Retry
  • Circuit Breaker
  • Fallback
  • Rate limiting
  • Bulkhead isolation
  • timeout
  • graceful degradation
  • fail fast
  • etc.

สำหรับงานอธิบาย 4 ตัว Retry / Circuit Breaker / Fallback / Rate Limiting + DEMO

- Retry ทำซ้ำอีกรอบ

sample config in polly

Implementation

  • back off - delay pattern กำหนดรอบการเข้า Resource เช่น ถ้า fail หลายๆรอบ เราอาจจะกำหนด exponential รอไปนานๆ หรือ ให้เท่ากันทุกรอบ Linear
  • jitter ทำให้ Retry มันสมดุล เพื่อจะกันเรื่อง Thundering Herd เช่น Client โผล่มา Retry พร้อมๆกัน เลยใช้การหน่วงเวลาแบบสุ่มออกไป
  • Retry Limits - ถ้าเกินจากนี้ให้เอาออกไปจากระบบก่อน เพื่อไม่ให้ระบบมันค้าง รวน

Pros & Cons

  • Pros Simple / Finetune ปรับตาม Policy เช่น backoff /
  • Cons: Longer Response ถ้าสำเร็จก็ดี แต่ถ้านานไป user อาจจะเสียอารมณ์ได้

- Circuit Breaker - อะไรที่พังก็ตัดไป

ถ้าอันไหนที่พังรับข้ามไปก่อน ให้มัน Recover ตัวเองขึ้นมาได้ก่อน โดยงานที่เทไปอาจจะใช้ตัว Retry Pattern มาช่วยตามเก็บกวาดที่หลัง การจัดการ Circuit Breaker มี 3 State

  • Close State normal state
  • Open State พอเจอว่าระบบมีส่วนไหน Fail ให้ตัดการเชื่อมต่อไปเลย รอจนกว่า Recover ขึ้นมา
  • Half-Open State หลังจากผ่านไประยะเวลานึง ให้ลองส่ง Request เข้าไป ถ้าผ่าน
    - Close State
    - กลับกัน ถ้า failure จะเป็น Open State

Pros & Cons

  • Pros: System Stablity ระบบไม่ได้ไปยิงส่วนที่พัง รอมัน Recover ขึ้นมา
  • Cons: กำหนด Thresold / เวลาที่ต้องรอ นานไป user ไม่ happy / downtime และต้องคุยกับ Business ให้เรียบร้อย ถ้าไม่ได้คุยมันจะกลายเป็นว่างานที่รอตัวที่ Fail มันอาจจะ timeout deadlock ได้

- Fallback พังก็แจ้ง หรือย้ายไปใช้ตัวอื่น

Implementation

  • Default Response - บอกไปตรงๆว่าพัง หรือเอาข้อมูลเก่าใน Cache ตอบแทน
  • Alternative Serice - ย้ายไปใช้ Service ตัวอื่น เช่น DB DC พังย้ายไปทาง DR
  • Graeful Defgradation - ยอมผ่านไปก่อน แต่ต้องตก

- Rate Limiting - คุมงานที่รับได้ในช่วงเวลาหนึ่ง

Implementation

  • PermitLimit - จำนวน Request ที่รับได้
  • QueueLimit - กรณีที่ PermitLimit เต็ม จำนวน Request ที่ให้รอไว้ใน Queue
  • OnReject - Customize Response อย่างไร ถ้า PermitLimit / QueueLimit เต็ม

Pros & Cons

  • Pros: Protect API / Fair Usage
  • Cons: อาจจะทำให้ Client หงุดหงิดได้

Library ที่ใช้งาน

Resource: GitHub - aixasz/DemoResilientApplication

Unity 6: Unlocking New Possibilities for Creators

Speaker: Gittitat Ekchantawut

Asset workflow

ตอนนี้ Unity 6 มีอะไรใหม่

  • Graphic - Adaptive Probe Volumes (APV) การจัดแสง ง่ายขึ้น และสะดวกขึ้น ในมุมคนเล่น น่าจะการจัดแสง Daylight
  • Multiplayer - เข้าใจว่าใช้หน้าจอ Unity อันเดียวทำหน้าจอสำหรับ Multiplayer
  • Platform - จัดระเบียบของที่ใช้ในตัว Game เราด้วยเจ้า Unity - Manual: Asset workflow
  • WebGPU (Preview Feature) เมื่อก่อนมีตัว WebGL มาช่วยให้เราทำ Canvas แต่มีปัญหาตอนทำเยอะๆ มันจะค้าง ตอนนี้ตีว WebGPU มาช่วยให้ใช้งาน GPU ได้ดีขึ้น เหมาะงานใน Device เล็ก เช่น Mobile หรือ AI

Unity6 Roadmap (Next Gen)

  • Simplicity มันจะชวยให้คนสาย dotnet หรือ คนที่เข้ามาใหม่ เรียนรู้ได้ง่ายขึ้น
  • Iteration - hot reload ไม่ต้องมา full compile run ใหม่ //ถ้า App ปกติยังรอนาน Game Dev จะขนาดไหน
  • Power
    - Unified Renderer
    - พยายามขยับให้ Unity ใช้ Feature ใหม่ๆของ dotnet ได้ เช่น กับปรับ API ให้ใช้ของ CoreCLR ของ .NET
    เพื่อที่จะได้ใช้คุณสมบัติใหม่ หรือ กับปรับปรุงจาก dotnet ได้โดยตรง รวมถึงการใช้ Lib อย่าง NuGet
    - Entity Component System - มาเสริม GameObject ข้อดี Entity รองรับ parallel processing
  • New World Building ทำให้ใช้งานขึ้น

Resource: Slide

Build Your First Augmented Reality Mobile App with Unity

Speaker: Akkapon Somjai + Team

Unity นอกจากทำ Game แล้ว ตอนนี้เอามาทำ AR ได้ด้วยนะ โดยตัวอย่าง App ที่ดังๆ ใช้แล้วครับ Pokemon Go

  • AR Foundation Framework เป็นช่วยทำ AR App / Cross Platform / Csharp ตัว Framework มันจัดการ Low Level ให้ แต่อาจจะต้องลง Lib เพิ่มตาม platform หรือ Simulation / Effective Collaboration มาแก้ Model ได้เลย ไมต้องมาแปลงเป็น Code\

AR Feature + Use Case

  • Face Tracking พวก Feature เอารูปหูกระต่าย มาใส่บนหน้าขอเรา อันนี้ก็ AR เหรอเนี่ย ดูใกล้ตัวมาก โดยมี Component ที่เกี่ยวข้อง
    - AR Face Manager - Detect หน้าเรา
    - AR Prefab เอาของมา Render
  • Image Tracking ทำ Interactive App เช่น ถ่ายรูป แล้วมีภาพ 3D มาขึ้น พวกหนังสือเด็ก หรือ ทำ Marketing Campaign
    -AR Traced Image Manager - จับรูป และ Trace Event และเอา Model มาวาง ในตอน Add / Remove / Update
  • Plane Detection - เอา Object มาวางบนพื้นที่กล้องถ่ายมา ตัวอย่าง App ของ IKEA Place
    - AR Plane Manager จัดการพื้นที่ กำหนด plane prefab บริเวณที่สามารถวาง Model ได้
    - AR Raycast Manager Detect และวาง Model
sample plane detection
sample plane detection add model

นอกจากนี้มีตัว Body Detection ด้วย
Limittation: web support / Limited XR Simulation Environment Support
Resource: Slide

Developing Local AI Models with .NET and AutoGen

Speaker: Charunthon (Boat) Limseelo

- LLM - Large Language Model vs SLM - Small Language Model

- Why Local AI Models

  • ทุกอย่างมี Cost โดยตัว Software / Model AI แบ่งได้
    - Proprietary - Can Make Profit
    - Open-Source - Freely Available
  • ตอนนี้ AI กลุ่ม Generative AI ที่เป็น LLM (ChatGPT / Gemini / Claude) มันใช้ไฟฟ้ามากกว่าบางประเทศแล้ว ตอนนี้ AI Power By Nuclear ก็มาแล้ว
  • ถ้า Model ใช้คนอื่น จะเจอปัญหา ถ้า Internet ไม่มี จะทำยังไง
  • รวมถึงเรื่อง Data Leak / Privacy

- ตอนนี้มี SLM มาช่วย

  • เน้นงานในส่วนเล็กลง อาจจะเป็นส่วน Domain / Industry Specific
  • ปกติตัว Model จะมีหน่วยวัด จำนวนเซลล์สมองอย่าง parameter ยิ่งเยอะยิ่งดี แต่มันกิน Ram เยอะ โดยที่ตัว SLM ปกติจะมีไม่เกิน 7B Parameter
  • การทำ Model ใหญ่ให้ใช้ Parameter น้อยลง มีเทคนิค Quantization
    - เมื่อ Parameter น้อยลง มันใช้ Ram ลงด้วย
    - แม้ว่า Accuracy อาจจะลดลงได้ เรายังสามารถทำ Finetune แก้ได้ อย่าวของ MS จะเป้นตัน Phi-3
  • พอ Model เล็กลง ยังช่วยให้ทำงานบน Mobile ได้ด้วยนะ

- Model SLM เด่นๆ ตามรูป

- Phi3.5 Model

  • จริงมันมีประวัติมานานนะ ตอนนี้มี Phi 3.5 Model แล้ว ที่
    - Support MultiLingual Context รองรับไทยด้วย //จริง Model มันมีเรื่องภาษามาเกี่ยวข้องด้วย
    - และ เอาแนวคิด Mixture of Expert (MoE) เข้ามาใช้ รวมผู้่เชี่ยวชาญหลายตัวเล็กๆ มาทำงานร่วมกัน
  • สำหรับตอนนี้ ถ้าใช้ Phi 3.5 หาได้จากหน้าที่ เช่น Hugguface / Ollama / Azure AI Foundary เป็น โดยเจ้า Phi 3.5 มีแยกย่อยตาม parameter + use case ดังนี้
    - Phi-3.5-mini
    - Phi-3.5-small
    - Phi-3.5-medium
    - Phi-3.5-MoE เป็น Mixture of Expert Model
    - Phi-3.5-vision

- LlaVA

  • เป็น Model อีกตัวที่น้องโบ๊ทมาแนะนำครับ โดย Large Language แล้ว มันรอบรับเรื่องภาพด้วย ตัว Vision ส่งรูปไปให้ AI ได้

นอกจากนี้แล้วการใช้ AI ต้องความรับผิดชอบด้วย MS Principle AI นอกจากนี้ P.R.D Privacy Reponsibility Diversity

- Ollama

  • Local AI Platform อารมณ์แบบ Docker เอา AI มาลงจาก Ollama Repo หรือ Huggy face ก็ได้นะ
  • นอกจากนี้ตัวมันเอง ยังรองรับ API แบบ OpenAI ตัว App ทำเหมือนเดิม แต่ต่อ Ollama ไม่ต้องแก้ App

- Agentic AI

  • AI Agent & Multi AI Agent หลายหัวดีกว่าหัวเดียว เราอาจจะให้ AI ทำ Workflow ช่วยในงานที่แต่ละ Model ถนัด
  • AutoGen เป็น Framework ที่ช่วยทำ Agentic AI (AI Agent & Multi AI Agent)

ถ้าทำ App ฝั่ง MS เองมีตัว Sematic Kernel ที่สามารถใช้ได้ทั้ง SLM / LLM Endpoint ได้นะ ตอนนี้น้องโบ๊ทจะ Demo กับตัว

แต่ถ้าจะใช้ AutoGen Swith NuGet มาเป็น NuGet Gallery | AutoGen

- Next Gen

  • Multimodelity - รับได้หลายแบบ text image
  • นอกจากนี้ยังมีแนวคิดให้ Model
    - Explainability - Why
    - Interpretability - How อารมณ์เหมือน Debug
    - Trustworthness - Safty+Tranparency
  • Model Miniaturization - เก่งตาม Domain + ภาษา ทำให้ Model เล็ก และให้กับ Small Device ได้

Resource: GitHub - chrnthnkmutt/BoatSLM_cs_experiment: This repository is use to make the experiment of using ollama, along with custom small language model, in .NET framework

Tracking usage in Gen AI application with Azure OpenAI Service

Speaker: Teerasej Jiraphatchandej

AI มันต้องลงทุน และใช้เงินนะ แต่ทำยังไงให้คุ้ม เพราะ ถ้าทำ AI App มันไม่ใช้ 20 usd ต่อเดือนแบบพวก ChatGPT นะ

แนวทางการคุม Cost มี 2 มุม Technology / Initiative

📟Technology

  • Right Model - ใช้เครื่องมือให้ถูกกับงาน หรือ ความเก่งตาม use case ที่ model นั้นๆมันทำได้ ซึ่งปกติ
    - ตัว Generative AI มันคิดปริมาณการใช้งานทั้งส่ง และรับ
    - นับจำนวน Token เอาง่ายตามตัวอักษร
  • User Prompt ≠ Total Tokens
    - นอกจากที่เราถาม และตอบแล้ว
    - เราอาจจะต้องส่งข้อมูลเพิ่มไปด้วย เช่น กำหนด prompt ให้มันวิเคราะห์ Sentiment ของ Comment ใช่แล้ว เราต้อง Comment ส่งเข้าไปเพิ่มด้วยนะ
    - ยังไม่พวก Meta Prompt / System Prompt / Safety Prompt ด้วย
    - และพวกการส่ง Context ไปให้ AI มันเข้าใจว่าเป็นเรื่องเดียวกัน
  • Model Deployment Type ใช้ที่ไหน Region / Local หรือ ระดับ Global ราคาก็ต่างกัน
    - Standard
    - Provision เรารู้จำนวน Token เลยซื้อก่อน
    - Batch ไม่ต้องการแบบ Realtime
    - Data Zone

สำหรับ 3 ข้อข้างต้น ใช้Tools Azure Pricing Calculator > OpenAI

  • Caching Response ถ้ารูปแบบ Prompt มันซ้ำๆ
  • Azure Cost Analysis (Service Level / Resource Group) ทำให้เห็น Train หรือ แนวโน้ม
  • Use SDK มันจะมี property ให้เราบอก token ที่ใช้ทั้งหมด เราสามารถเอาข้อมูลตรงนี้ไป Plot เทรนได้ หรือ ไม่ดูจาก Chat Playground ได้นะ

💸Initiative ทำยังให้ AI Transformation ได้ยั่งยืน

  • Microsoft แนะนำให้ลองใช้ Horizon Framework มาช่วยบอกว่า Project AI หรือ อื่นๆ ควรทำ โดย
    - H1 ส่วนใหญ่เป็นการซื้อ มาใช้งาน
    - H2 พัฒนาเอง
    - H3 สร้างเอง
    ตอนแรก เราควรซื้อให้ลองใช้ก่อน จะได้ปรับความเข้าใจ และเห็นปัญหาด้วย เช่น พนักงานไม่ใช่ับ AI มาแทนได้
  • CFO in the room เข้ามามีส่วนร่วม และมาประเมินว่าลงทุนแล้วคุ้มไหม

Resource: https://www.youtube.com/@teerasej

Your Tests Should Be Readable: AI Meets Roslyn to Transform Test Assertions

Speaker: Joel Dickson

เพิ่งรู้ Speaker คุณ Joel Dickson เป็น Contibutor Nunit ด้วย !!!

สำรวจกันก่อน Assertions Lib เขียน Unit Test มีอะไรได้ ก็ตามรูปเลย

MStest ไม่มี 555 ยังดีที่มีตัว Fluent Assertion

และมีการแนะนำ GitHub - agoda-com/Shouldly.FromAssert เป็น Lib ที่ช่วยให้ Migrate Test มาใช้ตัว Shouldly ซึ่งมันอ่านง่ายกว่า

  • เดิม ที่ปกติเขียนกัน
Assert.That(contestant.Points, Is.EqualTo(1337));
contestant.Points.ShouldBe(1337);
🗳️ ต่อจากนี้เป็น Story ที่ทำไมต้อง Shouldly.FromAssert โดยลองมาหลายท่า

- ท่าแรก AI จัดไป

  • AI ลุยเดี๋ยวเลย - ใช้แล้วรู้สึกยังไง
  • ซึ่งตอนนี้มันเจ็บกว่าเดิมอีก

เพราะอะไร ? AI มันมีข้อจำกัดของ Token ถ้าจะให้มันฉลาด ต้องให้มันอ่าน Code ทั้งหมดได้
- ตอนนี้ AI ยังรับได้แต่ 100-300K Token
- แต่ Code ของเรา ถ้าระบบใหญ่ๆ 2M Line of Code อาจจะใช้ Token 10M กระเป๋าฉีกแน่นอน
- เลยเป็นที่มาของการมโน เพราะ AI มันไม่เห็นภาพทั้งหมด

- ท่าถัดไป Abstract Syntax Tree (AST)

  • ใน dotnet AST > Roslyn API ที่ตอน Build มันบอก Warning นั้นแหละ
  • มาดูกันว่ามีคนใช้ Roslyn กันเท่าไหร่
  • ตัวอย่าง Roslyn ที่แจกแจงตัว LINQPad ในมุมของ Tree
  • พอเห็นภาพเตรียมแจกแจง Code ออกมาเป็น Tree จากนัั้นมาดู Keyword ในแต่ละ Node และ Dianoastic ตาม Rule ที่เรากำหนด และเตรียมทำ AST Mutation
  • AST Mutation
    - ใน IDE มันจะแสดงขีดๆ บอกเตือน ใน IDE ให้ Refactor ปรับตามไหม ใน Scope ไหน File > Project > Solution รับความเสี่ยงกันครับ
    - อีกทาง dotnet format มาปรับ Code ของเรา
IDE Warn
IDE Refactor

แต่ Roslyn API คนใช้น้อย + Low Level และปกติเวลาเปลี่ยน Version Framework มันอาจจะเจอ Breaking Change ได้

- ท่าที่สาม ผสมของ AI ทำตาม Scope ของ Roslyn API

มี Workflow ดังนี้เลย

ถ้าอยากฟัง Story เต็มๆ ดูได้จาก

แต่จาก Workflow งานที่ยากเรื่อง Merge และตัว AST ตอนนี้ Roslyn API ยังมีข้อจำกัดถ้าเอาไปมาใช้งานที่ซับซ้อน

⛙ SourceGraph

สำรวจกันก่อนเราเปิด Pull Request / Merge Request กันเท่าไหร่ ?

SourceGraph - Code Search

  • เป็น tools ที่ใช้ Search + Replace ตามเงื่อนไขที่เรากำหนดไว้
  • และทำ Batch Change เปิด Pull Request / Merge Request
How SourceGraph Work

เอามาใช้รวมกัน กับเรื่องที่แล้ว

  • Tools ทำ ASL Mutations ไว้กับหลาย Repo เลย
  • แต่ถ้ามาทยอยไล่ Merge กลับเข้าไปมันยาก SourceGraph - Batch Change เปิด Pull Request / Merge Request และกำหนดอะไรที่ต้องทำซ้ำในทุก Repo เช่น การทำ Bulk Label / Bulk Comment เป็นต้น
  • ที่เหลือขึ้นกับ Flow CI Test ช่วยเปิด PR หรือ ทำใน Local ก่อน

และการใช้ SourceGraph ถ้ากลัวเรื่อง Code หลุดใช้ On-Premise Version นะ

.NET Performance Considerations on Linux

Speaker: Vorapat Nicklamai

Bad Code override you infra

ชอบอันนี้

Why Linux

  • มันลด Cost
  • หลาย Project ทำบน Linux โครงการ CNCF
  • และ Container is Linux (Process)

Common Performance Metric in linux

  • IOPS
  • CPU งานที่ CPU ทำตามคำสั่ง กับ Load งานที่ส่งไปแล้วยังรออยู่
  • MEM
  • Disk
  • Latency

Observability

  • Agent / Lib ของ Opentelemetry
  • LGTM Stack โดยจะเน้น 2 ตัว ถ้าดู Performance Metric มีตัว prometheous (time series db) / grafrana เอามาแสดงผล
  • ภาพของ App เราควรจะเป็นแบบนี้

.NET Container Consideration

  • Multi-Stage
    - Build Use SDK
    - Run minimal Runtime
  • ENV DOTNET_gcServer ต้องไปดูบาง image set มาให้แล้ว
    - true (1) - Server Mode ใช้ให้หมด
    - false (0) - Workstation Mode
# Stage 1: Build
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Stage 2: Runtime
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
WORKDIR /app

# Set the DOTNET_GCServer environment variable
ENV DOTNET_GCServer=1

# Copy the build output from the build stage
COPY --from=build /app/out ./

# Set the entry point for the application
ENTRYPOINT ["dotnet", "YourAppName.dll"]
  • Request Limit พวก Resource ต่างๆ CPU / Mem

VM Performance Profile - เครื่องมืออย่างตัว tuned-adm เลือก Profile ให้เหมาะกับหน้าที่ของ VM App / DB โดยปกตจะ Default ที่ profile throughput-performance

นอกจากนี้แล้ว ทำครั้งแรกใช้ชั่วโคตรก็ไม่ได้ ต้องมา Test / เอาข้อมูลจาก Observability / Infra Tuning

Revolutionizing Industry with .NET and Unity: A Beginner’s Guide to Digital Tw

Speaker: Poonsiri Jailungka + Team

Digital Twin - พวก metaverse เอาโลกจริงมาจำลองโลกเสมือน เหมือน Game นะ เหมือนได้ยินใหม่จากยุค 4.0 ตอนนี้ Industry 5.0 / Society5.0 คำใหม่อีกแล้ว

การทำให้ Digital Twin มัน Sync ระหว่างโลกจริง โลกเสมือนจะเป็นตัว IOT ที่เก็บข้อมูล / Sensor / Data Storage / Compute ขนาดใหญ่ เอามาแสดงผลให้ชัด โดย Use Case ที่มีในตอนนี้

  • Remote training การสอน และมี Model ขึ้นมาให้เห็นภาพชัดเจน หรือ แยก layer zoom ออกไปได้
  • โรงงาน ใช้คุมเครื่องจักรแขนกล คนทำใน Digital Twin แล้วเครื่องมันทำตาม หรืออีกเคสทำเครื่องมีเพิ่มชวยคนพิการมาคุมเครื่องมือทำงานก็ได้นะ
  • การก่อสร้าง การตรวจแบบทางไกล
  • Health Care เอาไฟล์ mri ขึ้นมาเป็น model และวางแผนผ่าตัดได้
  • facility Management ดูพวกข้อมูลในตัวอาคารว่า หลอดไฟ หรือ เครื่องมือต่างๆควรเปลี่ยนไหม
  • Smart City ของ Singapore มีแล้ว ดูการใช้ไฟ จราจร ระดับน้ำ หรือพวก pm 2.5

แล้วจะสร้าง App Digital Twin ยังไงตอนนี้ ตัว Unity + dotnet (C Sharp) ใช้ได้แล้ว

Key Challenge - New Tech / Large Data และข้อจำกัดของ Tools ตอนนี้มีหลายค่าย Holo Len / Apple Vision / Metaquest เป็นต้น

Blog ท่านอื่นๆ

Live

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.