Xây dựng Agent AI trên .NET: Hướng dẫn từ đầu tạo OpenLum.Console

Giới thiệu OpenLum.Console

OpenLum.Console là dự án .NET Agent Shell hỗ trợ biên dịch Native AOT, kích thước sau phát hành chỉ 7MB. Hệ thống tích hợp sẵn các công cụ cơ bản như thao tác trình duyệt, đọc file Office, đồng thời cho phép mở rộng động thông qua cơ chế Skills.

  • Hỗ trợ các mô hình tương thích OpenAI API (DeepSeek, Ollama, OpenAI...)
  • Không phụ thuộc thư viện NuGet, triển khai dễ dàng trên mạng nội bộ
  • Cơ chế nén hội thoại thông minh để tối ưu token sử dụng

Đặc điểm chính

Tính năngMô tả
Native AOTHỗ trợ biên dịch AOT, tạo file thực thi đơn lẻ với tốc độ khởi động nhanh
Zero DependencyChỉ sử dụng thư viện BCL và System.Text.Json
Tương thích OpenAI APIHỗ trợ cấu hình baseUrl để kết nối đa nền tảng
Cơ chế SkillsTự động phát hiện kỹ năng từ file SKILL.md, tải động khi cần

Kiến trúc hệ thống


Program.Main
├── Application.Run()
│   ├── ConfigLoader.Load() → AppConfig
│   ├── ToolRegistry → Đăng ký công cụ
│   ├── OpenAIModelProvider → Gọi API mô hình
│   ├── AgentLoop → Vòng lặp chính xử lý

Các module cốt lõi

ModuleNhiệm vụ
ConfigLoaderTải cấu hình từ file JSON
ToolRegistryQuản lý đăng ký và lọc công cụ
AgentLoopThực thi vòng lặp xử lý đa bước, giới hạn 50 vòng

Cơ chế Skills

Người dùng mở rộng chức năng thông qua thư mục skills chứa:


skills/
  webbrowser/
    SKILL.md
    browser/openlum-browser.exe
  read/
    SKILL.md
    pdf/read-pdf.exe

Cấu trúc SKILL.md


---
name: webbrowser
description: "Duyệt web thông qua exec gọi exe"
---
## Đường dẫn exe
skills/webbrowser/browser/openlum-browser.exe

## Ví dụ
powershell
& "skills/webbrowser/browser/openlum-browser.exe" --url "https://example.com"

Cài đặt và chạy thử

Cấu hình mẫu (openlum.json):


{
  "model": {
    "baseUrl": "http://localhost:11434/v1",
    "apiKey": "dummy"
  },
  "tools": {
    "profile": "local",
    "allow": ["group:fs", "group:web"]
  }
}

Hướng dẫn biên dịch


# Biên dịch AOT
dotnet publish -r win-x64 -p:PublishAot=true
# File đầu ra: bin/Release/net10.0/win-x64/publish/

Ví dụ mã nguồn

Kiểm tra đường dẫn hợp lệ:


// ExecTool.cs
if (TryExtractSkillExePath(command, out var exePath) && !File.Exists(exePath)) {
    return $"Lỗi: Thiếu file thực thi {exePath}. Vui lòng kiểm tra SKILL.md...";
}

Nén hội thoại:


// SessionCompactor.cs
public async Task CompactIfNeededAsync(ISession session) {
    if (session.MessageCount > MAX_MESSAGES) {
        var summary = await CreateSummaryAsync(session);
        session.ClearOldMessages();
        session.AddSummary(summary);
    }
}

Thẻ: .NET AOT OpenAI CLI Plugin

Đăng vào ngày 16 tháng 6 lúc 20:24