🚀 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
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
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_KEYvàSLACK_BOT_TOKENlàm bí mật kho trong cài đặt GitHub.
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.
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!