Mình vừa học, vừa ghi chú lại những phần đã học trước đó:
- Semantic Kernel là gì? - Part 1
- Semantic Kernel: Từ "Bạch" Cổ Phong Đến AI: Thổi Hồn Cho Agent Với Semantic Kernel Instructions - Part 2
Giới Thiệu: Nâng cấp Agent từ "Tính cách" đến "Logic"
Trong Phần 2, chúng ta đã định hình Persona cho Agent bằng Instruction cơ bản , biến nó thành một nhân vật có vai trò và khí chất. Trong phần này, chúng ta nâng cấp Agent bằng cách thêm logic suy luận và khả năng tự nhận thức vào Instruction để Agent biết cách làm việc và giới hạn hiểu biết của mình.
Các kỹ thuật quan trọng sẽ được triển khai là:
Structured Reasoning thay thế cho Chain-of-Thought (CoT) nội bộ, tạo ra mạch suy luận an toàn và minh bạch.
Self-Scoring: Thêm lớp tự nhận thức để Agent báo cáo độ tin cậy.
Agent Routing qua GetScoreAsync(): Sử dụng Scoring để kích hoạt Agent phù hợp trong hệ thống Multi-Agent.
Structured Reasoning
Kỹ thuật Chain-of-Thought (CoT) rất mạnh mẽ vì nó buộc mô hình phải phân tích từng bước trước khi trả lời. Tuy nhiên, việc yêu cầu mô hình tiết lộ quy trình tư duy nội bộ bằng các thẻ THOUGHT: có thể dẫn đến hallucination trong luồng tư duy hoặc tạo ra định dạng không nhất quán.
Structured Reasoning khắc phục điều này. Chúng ta hướng dẫn Agent sử dụng tư duy logic đó và trình bày nó dưới định dạng cấu trúc, an toàn (ví dụ: Key Points, gạch đầu dòng) thay vì mô tả quá trình tư duy nội bộ của LLM.
Ví dụ
Chúng ta giữ Persona là "chuyên gia phân tích văn học cổ" và bổ sung quy tắc về quy trình làm việc:
var instructions = """
// ROLE: You are an expert in classical literature analysis.
// GOAL:
// - Analyze content, imagery, rhetorical devices, and historical context.
// - Present clear logic without disclosing the model's internal thought process.
// REASONING RULE:
// - Use "Structured Reasoning".
// - Present analysis in 3 structural parts:
// 1) Key Points (bullet points)
// 2) Detailed explanation
// 3) Concise conclusion
// OUTPUT FORMAT:
// ANALYSIS:
// [analysis...]
// CONCLUSION:
// [summary]
""";
Structured Reasoning giúp tăng tính minh bạch, dễ đọc, và kiểm soát được cấu trúc đầu ra mà vẫn giữ được logic suy luận chuyên môn.
Self-Scoring: Lớp Tự Nhận Thức quan trọng
- Giảm Hallucination: Buộc mô hình phải khai báo độ chắc chắn, giảm khuynh hướng "đoán mò".
- Hỗ trợ Router: Trong các hệ thống phức tạp, điểm này có thể được Router sử dụng để đánh giá chất lượng phản hồi.
Chúng ta yêu cầu Agent là "Fact Checker lịch sử" tự đánh giá độ tin cậy:
var instructions = """
// ROLE: Bạn là Fact Checker lịch sử. (You are a historical Fact Checker.)
// REQUIREMENTS:
// - Luôn giải thích bằng structured reasoning. (Always explain using structured reasoning.)
// - Sau câu trả lời, tự đánh giá độ tin cậy theo thang 0.0 → 1.0. (After the answer, self-evaluate confidence on a 0.0 to 1.0 scale.)
// - 0.0 means the answer is based on speculation or non-verifiable sources.
// - 1.0 means the answer is verifiable with multiple reliable sources.
// - Nếu thiếu dữ liệu, phải nêu rõ sự không chắc chắn. (If data is missing, state the uncertainty clearly.)
// OUTPUT:
// ANSWER: ...
// CONFIDENCE: [0.0 - 1.0]
""";
Routing Thông minh với GetScoreAsync()
Trong Semantic Kernel, GetScoreAsync() là một hàm Agent tự triển khai nhằm tính toán mức độ phù hợp của nó đối với một câu hỏi cụ thể.
Lưu ý: GetScoreAsync() không phải Self-Scoring của mô hình (như ở mục 3), mà là Scoring của chính Agent, được sử dụng bởi Router/Planner để xem Agent hoặc Tool nào phù hợp nhất khi có nhiều tùy chọn.
Ví dụ này minh họa cách kết hợp nhiều tiêu chí để tính điểm (Score) cho Agent Lịch sử.
public override Task<double> GetScoreAsync(ChatHistory history, string userMessage)
{
// Initialize score
double score = 0.0;
// 1. Check for core topic relevance (History is primary)
// If the message contains "lịch sử", give a base high score.
if (userMessage.Contains("lịch sử", StringComparison.OrdinalIgnoreCase))
score += 0.60;
// 2. Check for specialization (Việt Nam history is a bonus)
// If the message is specifically about "Việt Nam", add bonus relevance.
if (userMessage.Contains("Việt Nam", StringComparison.OrdinalIgnoreCase))
score += 0.30;
// 3. Apply a minimum threshold logic.
// If the combined score is too low, we set it to 0.0 to signal retreat.
// Ensure the final score does not exceed 1.0.
if (score < 0.5)
return Task.FromResult(0.0);
else
return Task.FromResult(Math.Min(1.0, score));
}
Nhận xét
Đăng nhận xét