Xây Dựng Module Tự Động Hóa Tùy Chỉnh Cho Qwen3-14B Với OpenClaw

Khi làm việc với các mô hình ngôn ngữ lớn (LLM), việc kết hợp khả năng xử lý ngữ nghĩa với các tác vụ cục bộ thường gặp rào cản về tính linh hoạt. OpenClaw giải quyết vấn đề này bằng kiến trúc plugin mở rộng, cho phép nhà phát triển tạo ra các luồng tự động hóa độc lập. Trong nội dung sau, chúng ta sẽ cùng xây dựng một kỹ năng (skill) kết hợp Qwen3-14B để truy cập dữ liệu khí tượng và tự động soạn thảo email thông báo hàng ngày.

Thiết Lập Môi Trường Phát Triển

Trước khi bắt đầu, cần đảm bảo hệ thống đáp ứng các phiên bản phần mềm tối thiểu. Kiểm tra nhanh thông qua terminal:

node -v
npm -v
openclaw --version

Nếu công cụ chưa được cài đặt, có thể sử dụng script chính thức để thiết lập nhanh:

curl -fsSL https://openclaw.ai/install.sh | bash

Tích Hợp Qwen3-14B Vào OpenClaw

OpenClaw hỗ trợ kết nối với các điểm cuối (endpoint) tương thích OpenAI. Mở tệp cấu hình ~/.openclaw/openclaw.json và bổ sung thông tin nhà cung cấp mô hình:

{
  "models": {
    "providers": {
      "local-llm-provider": {
        "baseUrl": "http://192.168.1.100:5000/v1",
        "apiKey": "token-xac-thuc-cua-ban",
        "api": "openai-completions",
        "models": [
          {
            "id": "qwen3-14b-custom",
            "name": "Qwen 3 14B Local",
            "contextWindow": 32768
          }
        ]
      }
    }
  }
}

Sau khi lưu thay đổi, khởi động lại dịch vụ gateway để áp dụng cấu hình mới:

openclaw gateway restart

Xây Dựng Kỹ Năng Truy Xuất & Gửi Thông Báo

Khởi Tạo Dự Án

Sử dụng CLI để tạo bộ khung chuẩn cho skill:

mkdir meteo-alert-skill && cd meteo-alert-skill
npx @openclaw/cli init-skill

Hệ thống sẽ sinh ra cấu trúc thư mục cơ bản bao gồm package.json, index.js, và config.schema.json. Đặt tên dự án là meteo-alert.

Module Truy Xuất Dữ Liệu Thời Tiết

Thay vì dùng các thư viện bên ngoài nặng nề, chúng ta có thể triển khai module gọi API trực tiếp bằng fetch. Tạo tệp src/api-client.js:

const METEO_API_ENDPOINT = 'https://restapi.amap.com/v3/weather/weatherInfo';

class MeteorologicalFetcher {
  constructor(authKey) {
    this.credentials = authKey;
  }

  async queryLocation(zipCode, detailLevel = 'basic') {
    const url = new URL(METEO_API_ENDPOINT);
    url.searchParams.set('key', this.credentials);
    url.searchParams.set('city', zipCode);
    url.searchParams.set('extensions', detailLevel);

    const res = await fetch(url.toString());
    if (!res.ok) throw new Error(`API request failed: ${res.status}`);
    
    const payload = await res.json();
    return payload.lives?.[0] || null;
  }
}

module.exports = MeteorologicalFetcher;

Triển Khai Logic Chính

Tại tệp index.js, đăng ký skill và khởi tạo các dịch vụ cần thiết:

const MeteorologicalFetcher = require('./src/api-client');

module.exports = (sdk) => {
  sdk.register('meteo-alert', {
    bootstrap(config) {
      this.dataSource = new MeteorologicalFetcher(config.apiToken);
      this.emailService = sdk.useService('smtp-sender');
    },
    actions: {}
  });
};

Thiết Kế Luồng Xử Lý Với LLM

Điểm cốt lõi là định hình prompt để Qwen3-14B chuyển đổi dữ liệu thô thành email chuyên nghiệp. Bổ sung bộ xử lý vào mục actions:

actions: {
  async dispatchDailyDigest({ regionCode, recipientAddress, schedule = '08:00' }) {
    const currentData = await this.dataSource.queryLocation(regionCode, 'all');
    if (!currentData) throw new Error('Unable to retrieve meteorological data');

    const instruction = `Dựa trên các thông số sau, hãy viết nội dung email dạng HTML:
    - Khu vực: ${regionCode}
    - Nhiệt độ: ${currentData.temperature}°C
    - Tình trạng: ${currentData.weather}
    - Hướng gió: ${currentData.winddirection}
    - Cấp gió: ${currentData.windpower}
    - Độ ẩm: ${currentData.humidity}%
    
    Yêu cầu: Trình bày gọn gàng, dùng thẻ table cho dữ liệu số, thêm phần lời khuyên mặc đồ phù hợp.`;

    const aiResponse = await sdk.models.createCompletion({
      provider: 'local-llm-provider',
      model: 'qwen3-14b-custom',
      payload: [{ role: 'user', content: instruction }]
    });

    await this.emailService.transmit({
      target: recipientAddress,
      title: `Báo cáo khí tượng khu vực ${regionCode}`,
      body: aiResponse.content,
      format: 'html'
    });

    return { status: 'completed', nextExecution: this.calcNextTick(schedule) };
  }
}

Kiểm Thử & Tinh Chỉnh

Chế độ phát triển cho phép mô phỏng hoạt động trực tiếp. Chạy lệnh sau tại thư mục gốc:

openclaw serve --local-skill .

Gửi yêu cầu kiểm tra qua HTTP client:

curl -X POST http://localhost:18789/api/v1/skills/meteo-alert/dispatchDailyDigest \
  -H "Content-Type: application/json" \
  -d '{"regionCode":"110101","recipientAddress":"team@company.org"}'

Một số vấn đề thường gặp và cách khắc phục:

  • Ràng buộc định dạng: Qwen đôi khi trả về markdown thay vì HTML. Cần điều chỉnh prompt nhấn mạnh "output strictly in HTML".
  • Quản lý mã vùng: API thời tiết yêu cầu mã hành chính. Nên tạo tệp geo-mapping.json để chuyển đổi tên tỉnh/thành phố sang mã số tự động.
  • Độ ổn định cron: Thay vì dùng vòng lặp thủ công, tích hợp trình lập lịch nội bộ của OpenClaw để đảm bảo tác vụ không bị bỏ sót.

Đóng Gói & Triển Khai

Sau khi hoàn thiện, skill có thể được xuất bản lên kho lưu trữ chính thức:

clawhub publish --token $AUTH_TOKEN

Đảm bảo tệp README.md mô tả rõ cách cấu hình, danh sách biến môi trường, và tuân thủ quy chuẩn SemVer. Đối với môi trường nội bộ, đóng gói trực tiếp thành tệp nén:

clawhub bundle --target meteo-alert-v2.1.0.claw

Người dùng cuối cài đặt thông qua:

clawhub load ./meteo-alert-v2.1.0.claw

Kiến Trúc & Tối Ưu Hiệu Suất

Khi phát triển các module tự động hóa kết hợp LLM, cần lưu ý:

  • Phân tách trách nhiệm: Giữ phần gọi API và xử lý dữ liệu thô ở lớp JS, nhường việc tổng hợp ngôn ngữ và sáng tạo nội dung cho mô hình.
  • Template hóa cấu hình: Tránh hardcode giá trị nhạy cảm hoặc cố định. Đưa chúng vào config.schema.json để dễ dàng điều chỉnh trên nhiều môi trường.
  • Dự phòng lỗi mạng & giới hạn tỷ lệ: Triển khai cơ chế retry với backoff mũ khi API thời tiết hoặc endpoint LLM phản hồi chậm.
  • Theo dõi hoạt động: Tận dụng dịch vụ logging tích hợp để ghi lại token tiêu thụ, thời gian phản hồi, và trạng thái tác vụ, hỗ trợ chẩn đoán sự cố nhanh chóng.

Một hướng mở rộng tiềm năng là tích hợp cảnh báo động: nếu dữ liệu khí tượng vượt ngưỡng an toàn (nhiệt độ cao, mưa lớn), hệ thống tự động kích hoạt kênh thông báo khác hoặc điều chỉnh nội dung email mà không cần can thiệp thủ công.

Thẻ: OpenClaw qwen3-14b nodejs llm-integration automation

Đăng vào ngày 17 tháng 9 lúc 20:49