0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Xây Dựng Bot Đánh Giá Mã Nguồn AI với GitHub và Slack

Đăng vào 6 tháng trước

• 11 phút đọc

🚀 Xây Dựng Bot Đánh Giá Mã Nguồn AI với GitHub, Slack và LLM

Bạn có mệt mỏi với việc đánh giá mã nguồn thủ công? Bạn muốn tăng tốc quy trình làm việc của mình với AI? Trong bài viết này, tôi sẽ hướng dẫn bạn cách tôi xây dựng một hệ thống đánh giá mã nguồn tự động hoàn toàn sử dụng GitHub Actions, Slack và Mô Hình Ngôn Ngữ Lớn (LLM) — và bạn cũng có thể làm điều đó! Đây chỉ là một bản demo, bạn có thể tùy chỉnh theo trường hợp của mình.

🧩 Những Gì Bạn Sẽ Xây Dựng

  • Đánh giá mã nguồn tự động cho mỗi pull request bằng AI
  • Thông báo trên Slack với các nút tương tác Phê duyệt/Yêu cầu Thay đổi (tính năng Phê duyệt đã được thực hiện)
  • Tích hợp liền mạch giữa GitHub Action, Slack và backend của bạn (tôi đã chọn Node.js, rất đơn giản)
  • Mã nguồn mở, có thể mở rộng và thân thiện với đội nhóm!

🛠️ Công Nghệ Sử Dụng

  • GitHub Actions cho tự động hóa
  • Node.js/Express backend cho tương tác với Slack
  • Ứng dụng Slack cho thông báo và hành động (Bạn nên tạo một không gian làm việc thử nghiệm và 2 tài khoản để thử nghiệm)
  • CloudFare
  • OpenAI (hoặc bất kỳ nhà cung cấp LLM nào) cho sự thông minh trong đánh giá mã nguồn (OpenAI, Gemini, v.v.)

Các Điều Kiện Cần Thiết

Trước khi bắt đầu, hãy đảm bảo bạn đã có:

  • Tài khoản GitHub với quyền truy cập vào kho lưu trữ mục tiêu.
  • Một không gian làm việc Slack nơi bạn có thể tạo và quản lý các ứng dụng.
  • Node.js (v18 trở lên) và npm được cài đặt trên máy của bạn.
  • Mã thông báo truy cập cá nhân cho GitHub (với phạm vi repo và pull_requests).
  • Mã thông báo bot Slack với quyền chat:write, commands và interactivity.
  • Mã API OpenAI (hoặc mã của nhà cung cấp LLM khác) cho đánh giá mã nguồn AI.
  • (Tùy chọn) ngrok hoặc CloudFare nếu thử nghiệm tính tương tác của Slack cục bộ.

⚡️ Cách Hoạt Động

Copy
sequenceDiagram
    participant Dev as Developer
    participant GH as GitHub
    participant LLM as LLM Review Service
    participant BE as Backend
    participant Slack as Slack

    Dev->>+GH: Tạo PR mới/yêu cầu
    GH->>+LLM: Gửi mã để đánh giá thông qua GitHub Action
    LLM->>+GH: Trả về phản hồi đánh giá
    GH->>+Slack: Đăng thông điệp đánh giá với các nút Phê duyệt|Bình luận https://slack.com/api/chat.postMessage [Auth Bot Token]
    Slack->>+Senior: Hiển thị đánh giá và các nút
    Senior-->>-Slack: Nhấp Phê duyệt hoặc Bình luận
    Slack->>+BE: Gửi payload tương tác [Cloudfare: 3000]
    alt Phê duyệt
        BE->>GH: Phê duyệt PR/commit qua API
    else Bình luận
        BE->>Senior: Nhắc nhở về bình luận (tùy chọn)
        Senior->>BE: Gửi bình luận
        BE->>GH: Đăng bình luận qua API
    end

Thư Mục Dự Án

Copy
code-review-llm/
├── .github/
│   └── workflows/
│       └── code-review.yml         # Workflow GitHub Actions cho đánh giá mã nguồn AI
├── src/
│   └── services/
│       ├── reviewRunner.js         # Script chính để chạy đánh giá mã nguồn LLM
│       ├── llmService.js           # Tích hợp API LLM
│       ├── reviewService.js        # Logic đánh giá
│       └── ...                     # Các tiện ích/dịch vụ khác
├── public/
│   └── vite.svg                    # Tài sản tĩnh
├── App.jsx, main.jsx, App.css      # Điểm vào frontend và kiểu dáng
├── package.json, README.md         # Siêu dữ liệu và tài liệu dự án
└── slack-backend/
    ├── index.js                    # Backend Express cho tính tương tác của Slack
    ├── package.json                # Các phụ thuộc của backend
    ├── .env                        # Biến môi trường backend (không được cam kết)
    └── README.md                   # Hướng dẫn thiết lập backend

Bắt Đầu Thực Hiện

1. Thiết Lập GitHub Action

  • Mục đích: Kích hoạt trên mỗi pull request và chạy script đánh giá mã nguồn AI, sau đó đăng kết quả lên Slack.
  • Việc cần làm: set OPENAI_API_KEYSLACK_BOT_TOKEN làm bí mật kho trong cài đặt GitHub.
Copy
name: AI Code Review

on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  code-review:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write
      actions: read
      issues: read

    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          token: ${{ secrets.GITHUB_TOKEN }}

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '18'
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Get PR diff
        id: diff
        run: |
          git fetch origin ${{ github.event.pull_request.base.ref }}
          DIFF=$(git diff origin/${{ github.event.pull_request.base.ref }}...HEAD --unified=3)
          echo "diff<<EOF" >> $GITHUB_OUTPUT
          echo "$DIFF" >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT

      - name: Run AI Code Review
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          PR_NUMBER: ${{ github.event.pull_request.number }}
          REPO_OWNER: ${{ github.repository_owner }}
          REPO_NAME: ${{ github.event.repository.name }}
          PR_DIFF: ${{ steps.diff.outputs.diff }}
        run: node src/services/reviewRunner.js

      - name: Send review summary log to Slack
        env:
          SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
        run: |
          SUMMARY=$(cat review-summary.txt 2>/dev/null || echo "Không tìm thấy tệp tóm tắt.")
          curl -X POST https://slack.com/api/chat.postMessage \
            -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
            -H "Content-type: application/json" \
            --data "{\"channel\": \"test-bot\", \"text\": \"$SUMMARY\"}"

      - name: Send LLM review to Slack with buttons
        env:
          SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
        run: |
          curl -X POST https://slack.com/api/chat.postMessage \
            -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
            -H "Content-type: application/json" \
            --data '{
              "channel": "test-bot",
              "text": "Đánh giá mã cho PR #${{ github.event.pull_request.number }}: ${{ github.event.pull_request.title }}",
              "blocks": [
                {
                  "type": "section",
                  "text": {
                    "type": "mrkdwn",
                    "text": "*Yêu cầu Đánh giá Mã*\n*PR #${{ github.event.pull_request.number }}:* ${{ github.event.pull_request.title }}\n\n*Đánh giá LLM:*\nKết quả đánh giá ở đây\n\nVui lòng xem xét và thực hiện hành động bên dưới:"
                  }
                },
                {
                  "type": "actions",
                  "elements": [
                    {
                      "type": "button",
                      "text": { "type": "plain_text", "text": "✅ Phê duyệt" },
                      "value": "approve_${{ github.event.pull_request.number }}",
                      "action_id": "approve_action",
                      "style": "primary"
                    },
                    {
                      "type": "button",
                      "text": { "type": "plain_text", "text": "💬 Yêu cầu Thay đổi" },
                      "value": "comment_${{ github.event.pull_request.number }}",
                      "action_id": "comment_action",
                      "style": "danger"
                    }
                  ]
                }
              ]
            }'

2. Backend cho Tính Tương Tác với Slack

  • Mục đích: Xử lý các nhấp chuột từ Slack và cập nhật PR trên GitHub.
  • Việc cần làm: sử dụng một tài khoản bot GitHub dành riêng cho mã thông báo API để tránh các vấn đề tự phê duyệt.
Copy
app.post('/slack/interactive', async (req, res) => {
  const payload = JSON.parse(req.body.payload);
  const { actions, user, response_url } = payload;
  const action = actions[0];
  const prNumber = action.value.replace(/^(approve|comment)_/, '');

  if (action.action_id === 'approve_action') {
    // Phê duyệt PR qua API GitHub
  } else if (action.action_id === 'comment_action') {
    // Đăng bình luận qua API GitHub
  }
  // Phản hồi về Slack
});

3. Thiết Lập Ứng Dụng Slack

  • Kích hoạt tính tương tác và đặt URL yêu cầu về backend của bạn.
  • Thêm bot của bạn vào kênh mục tiêu.
  • Tạo một kênh mục tiêu và thêm reviewer làm thành viên.

4. Tạo một nhánh mới và đẩy một commit

  • Hãy tạo commit thử nghiệm và yêu cầu hợp nhất, bạn sẽ thấy điều gì xảy ra.

🔗 Thử ngay!
Hãy xem kho GitHub và bắt đầu tự động hóa các đánh giá mã nguồn của bạn ngay hôm nay!

🙌 Những Suy Nghĩ Cuối Cùng

Xây dựng một bot đánh giá mã nguồn AI dễ hơn bạn nghĩ — và nó có thể tiết kiệm cho đội ngũ của bạn hàng giờ mỗi tuần.
Nếu bạn thấy bài viết này hữu ích, hãy chia sẻ, bình luận và theo dõi để nhận thêm nhiều mẹo về DevOps và AI!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào