0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Hướng Dẫn Cài Đặt PR-Agent với OpenRouter cho Đánh Giá Mã Tự Động

Đăng vào 14 giờ trước

• 9 phút đọc

👋 Giới thiệu

Đánh giá mã là một phần quan trọng trong quy trình phát triển phần mềm, nhưng nó có thể tốn nhiều thời gian, đặc biệt là đối với các đội ngũ lớn. PR-Agent (hiện là Qodo Merge) sử dụng trí tuệ nhân tạo để tự động đánh giá các pull request, tạo mô tả và đề xuất cải tiến. Hướng dẫn này sẽ hướng dẫn bạn cách thiết lập PR-Agent với OpenRouter, cung cấp cách tiếp cận tiết kiệm chi phí để sử dụng nhiều mô hình AI (GPT-4o, Claude, Gemini, v.v.) thông qua một API thống nhất.

📌 Tại sao chọn OpenRouter?

Những thách thức với API OpenAI Trực Tiếp

  • Phụ thuộc vào một nhà cung cấp duy nhất (chỉ mô hình OpenAI)
  • Quản lý phức tạp các API của nhiều nhà cung cấp
  • Khó khăn trong việc so sánh giá cả giữa các mô hình khác nhau

Lợi ích của OpenRouter

  • API Đa Mô Hình Thống Nhất - Truy cập GPT-4o, Claude, Gemini, Llama, v.v. thông qua một giao diện duy nhất
  • Lựa Chọn Mô Hình Linh Hoạt - Chọn mô hình phù hợp cho từng tác vụ, tối ưu hóa hiệu quả chi phí
  • Truy Cập Sớm Các Mô Hình Mới Nhất - Truy cập nhanh đến các mô hình mới như GPT-5
  • Giá Cả Minh Bạch - Giá rõ ràng cho từng mô hình (phí 5.5% cho các giao dịch mua tín dụng)

Các yêu cầu trước khi bắt đầu

  • Kho lưu trữ GitHub (riêng tư hoặc công khai)
  • Tài khoản OpenRouter (miễn phí để tạo)
  • Quyền truy cập GitHub Actions

Bước 1: Thiết lập OpenRouter

1.1 Tạo tài khoản và khóa API

  1. Truy cập OpenRouter và tạo một tài khoản
  2. Mua Tín Dụng (Quan trọng)
    • Vào trang "Tín dụng" trong bảng điều khiển của bạn
    • Mua tối thiểu là $5 (phí 5.5% áp dụng cho các giao dịch mua tín dụng)
    • Tùy chọn tự động nạp tiền có sẵn để tiện lợi
    • ⚠️ Miễn Phí: Tài khoản mới nhận được một số tín dụng miễn phí nhỏ, nhưng cần thêm giao dịch mua cho việc sử dụng sản xuất (Câu hỏi thường gặp: Các tùy chọn miễn phí nào có sẵn?)
  3. Trong bảng điều khiển, vào "Khóa API" và tạo một khóa mới
  4. Sao chép và lưu trữ khóa một cách an toàn

1.2 Các mô hình có sẵn

OpenRouter cung cấp quyền truy cập vào các mô hình như:

Copy
openai/gpt-5           # Mô hình mới nhất (phát hành 2025)
openai/gpt-4o          # Hiệu suất cân bằng
anthropic/claude-3-opus-20240229  # Phân tích chất lượng cao
google/gemini-pro      # Mô hình của Google
meta-llama/llama-2-70b-chat  # Mã nguồn mở

Kiểm tra giá tại OpenRouter Models.

Bước 2: Thiết lập Workflow GitHub Actions

2.1 Cấu hình Bí mật

Trong kho lưu trữ GitHub của bạn:

  1. Vào Cài đặt → Bí mật và biến → Hành động
  2. Nhấp vào "Bí mật kho lưu trữ mới"
  3. Thêm bí mật sau đây:
Copy
Tên: OPENROUTER_API_KEY
Giá trị: or-xxxxxxxx (khóa API OpenRouter của bạn)

2.2 Tạo Tệp Workflow

Tạo tệp .github/workflows/pr_agent.yml

Copy
name: Đánh Giá Mã (OpenRouter)

on:
  pull_request:
  pull_request_review_comment:
    types: [created]

# Kiểm soát độ đồng thời
concurrency:
  group: ${{ github.repository }}-${{ github.event.number || github.head_ref || github.sha }}-${{ github.workflow }}-${{ github.event_name == 'pull_request_review_comment' && 'pr_comment' || 'pr' }}
  cancel-in-progress: ${{ github.event_name != 'pull_request_review_comment' }}

jobs:
  pr_agent_job:
    if: |
      github.event.sender.type != 'Bot' &&
      github.event_name == 'pull_request' &&
      github.event.pull_request.changed_files < 50
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
      contents: write
      id-token: write
    name: Chạy tác vụ PR agent trên mỗi pull request
    steps:
      - name: Bước hành động PR Agent với OpenRouter
        id: pragent
        uses: qodo-ai/pr-agent@main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          OPENROUTER.KEY: ${{ secrets.OPENROUTER_API_KEY }} # Xác thực OpenRouter API
          github_action_config.auto_review: "true" # kích hoạt/tắt đánh giá tự động
          github_action_config.auto_describe: "true" # kích hoạt/tắt mô tả tự động
          github_action_config.auto_improve: "true" # kích hoạt/tắt cải tiến tự động

Bước 3: Tệp Cấu hình

Tạo tệp .pr_agent.toml trong thư mục gốc của kho lưu trữ.

Copy
[config]
model = "openai/gpt-5" # Tôi đã chỉ định gpt-5, nhưng có lỗi xảy ra. Cài đặt đúng là "openai/gpt-5".
fallback_models = ["openai/gpt-4o", "anthropic/claude-opus-4.1"]
ai_timeout = 300
custom_model_max_tokens = 200000 # Quan trọng! Lỗi nếu không có điều này
response_language = "en-US"
ignore_pr_title = ["^\\[Auto\\]", "^Auto"]
ignore_pr_labels = ['invalid']

[ignore]
glob = ['dist/**']

[github_action_config]
# đặt là biến môi trường trong .github/workflows/pr-agent.yaml
#auto_review = true
#auto_improve = true
#auto_describe = true

[pr_reviewer]
extra_instructions = """\
(1) Hành động như một kỹ sư phần mềm có kinh nghiệm cao
(2) Cung cấp đánh giá kỹ lưỡng về mã, tài liệu và bài viết
(3) Đề xuất các đoạn mã cụ thể để cải tiến

(4) **Không bao giờ** bình luận về thụt lề, khoảng trắng, dòng trống hoặc các vấn đề chỉ mang tính chất thẩm mỹ trừ khi chúng thay đổi ngữ nghĩa của chương trình.

(5) **Khu vực đánh giá ưu tiên - Kiểm tra một cách hệ thống:**
- **Bảo mật**: Mật khẩu dạng văn bản, SQL injection, xác thực đầu vào, rò rỉ ngoại lệ
- **Xử lý lỗi**: Các điều khoản except trống, thiếu try-catch, ẩn lỗi im lặng
- **Quản lý tài nguyên**: Thiếu trình quản lý ngữ cảnh (câu lệnh với), kết nối/tệp chưa đóng
- **An toàn kiểu dữ liệu**: Thiếu gợi ý kiểu dữ liệu, sử dụng kiểu dữ liệu không chính xác, kiểu Any không hợp lý
- **Hiệu suất**: Thuật toán không hiệu quả (O(n²) hoặc tệ hơn), vòng lặp không cần thiết, rò rỉ bộ nhớ
- **Chất lượng mã**: Số ma thuật, tên biến không rõ ràng, nhập/xuất biến không sử dụng
- **Thiết kế API**: Thiếu xác thực đầu vào, không có phản hồi lỗi, kiểm tra trường bắt buộc
- **Kiến trúc**: Vi phạm nguyên tắc trách nhiệm đơn, ràng buộc chặt chẽ, sử dụng trạng thái toàn cục

(6) Tập trung vào các vấn đề cụ thể, có thể hành động với các ví dụ mã cụ thể và đề xuất sửa chữa.
"""
num_code_suggestions = 5
inline_code_comments = true
ask_and_reflect = true

[pr_description]
extra_instructions = "Tạo mô tả rõ ràng và toàn diện"
generate_ai_title = true
add_original_user_description = false 
publish_description_as_comment = true

[pr_code_suggestions]
extra_instructions = "Cung cấp các gợi ý mã có thể hành động với ví dụ"
commitable_code_suggestions = true
demand_code_suggestions_self_review=true

Bước 4: Kiểm tra Cài đặt

4.1 Tạo PR thử nghiệm

Tạo một PR với mã có vấn đề cố ý.

Copy
# Thiếu gợi ý kiểu dữ liệu
def fizz_buzz(n):
    for i in range(1, n):
        if i % 15 == 0:
            print("FizzBuzz")
        elif i % 3 == 0:
            print("Fizz") 
        elif i % 5 == 0:
            print("Buzz")
        else:
            printo(i)  # Lỗi cố ý

# Vấn đề bảo mật
def add_user(name, password):
    users = []
    user = {"name": name, "password": password}  # Mật khẩu dạng văn bản
    users.append(user)

4.2 Kết quả dự kiến

PR-Agent sẽ cung cấp.

Mô Tả PR Tự Động Tạo:

  • Tóm tắt các thay đổi
  • Chi tiết thay đổi theo tệp
  • Phân tích tác động

Nhận xét Đánh Giá Mã:

  • Sửa chữa cho printo(i)print(i)
  • Đề xuất gợi ý kiểu dữ liệu
  • Cảnh báo bảo mật về mật khẩu dạng văn bản
  • Đề xuất cải tiến hiệu suất

Bước 5: Cấu hình Nâng Cao

5.1 Tối Ưu Hóa Chi Phí

Sử dụng các mô hình khác nhau cho các tác vụ khác nhau.

Copy
[config]
model = "openai/gpt-4o-mini"  # Đối với các tác vụ nhẹ
model_turbo = "openai/gpt-5"  # Đối với phân tích phức tạp
fallback_models = ["anthropic/claude-3.7-sonnet", "google/gemini-2.5-pro"]

5.2 Quy Tắc Cụ Thể Đội Ngũ

Copy
[pr_reviewer]
extra_instructions = """\
(1) Kiểm tra theo quy tắc công ty:
- Sử dụng ghi nhật ký có cấu trúc cho tất cả đầu ra nhật ký
- Các cuộc gọi API bên ngoài phải có cài đặt thời gian chờ
- Truy cập cơ sở dữ liệu phải sử dụng giao dịch
- Không bao giờ mã hóa cứng các bí mật (khóa API, mật khẩu, v.v.)
"""

5.3 Loại Bỏ Tệp

Copy
[ignore]
glob = ['dist/**', '*.min.js', 'node_modules/**', '__pycache__/**']

[config]
ignore_pr_title = ["^\\[Auto\\]", "^WIP:", "^Draft:"]
ignore_pr_labels = ['work-in-progress', 'do-not-review']

Khắc Phục Sự Cố

Các Vấn Đề Thường Gặp và Giải Pháp

1. Mô hình không được công nhận

Copy
Error: Model openai/gpt-5 is not defined in MAX_TOKENS
Giải pháp: Thêm custom_model_max_tokens = 200000 vào cấu hình

Lỗi này xảy ra khi sử dụng một mô hình mà PR-Agent không công nhận. Các mô hình được hỗ trợ bởi PR-Agent được liệt kê trong tệp này. Nếu mô hình bạn chọn không có trong danh sách này, bạn cần thiết lập cấu hình custom_model_max_tokens.

2. Phản hồi ngôn ngữ không nhất quán

Copy
[config]
response_language = "en-US"  # Nên cụ thể

[pr_reviewer]
extra_instructions = "Luôn phản hồi bằng tiếng Anh và giải thích các thuật ngữ kỹ thuật một cách rõ ràng"

3. Lỗi quyền GitHub Actions

Copy
permissions:
  issues: write
  pull-requests: write
  contents: write  # Thêm dòng này
  id-token: write

4. Thời gian chờ trên các PR lớn

Copy
[config]
ai_timeout = 600  # Mở rộng đến 10 phút
large_patch_policy = "clip"  # Chia nhỏ các PR lớn

Các Thực Hành Tối Ưu Quản Lý Chi Phí

1. Lựa Chọn Mô Hình Phù Hợp

Tác vụ Mô hình Đề xuất Giá (khoảng)
Đánh giá đơn giản gpt-4o-mini $0.15/1M tokens
Phân tích chi tiết gpt-4o $2.5/1M tokens
Chất lượng cao nhất openai/gpt-5 $1.25/1M tokens

2. Giới Hạn Kích Thước PR

Copy
if: github.event.pull_request.changed_files < 50  # Giới hạn số lượng tệp

3. Kiểm Soát Thực Thi Tự Động

Copy
[config]
ignore_pr_labels = ['draft', 'wip', 'skip-ai-review']
ignore_pr_title = ["^\\[WIP\\]", "^Draft:", "^Auto"]

Đo Lường Tác Động

So Sánh Trước/Sau

Chỉ Số Định Lượng:

  • Thời gian đánh giá mã giảm
  • Tăng cường phát hiện lỗi
  • Xác định vấn đề bảo mật sớm hơn
  • Thời gian hợp nhất PR nhanh hơn

Chỉ Số Định Tính:

  • Giảm gánh nặng cho người đánh giá
  • Cải thiện chất lượng mã
  • Hiệu ứng học tập (cải thiện kỹ năng lập trình viên)

Ví Dụ Kết Quả Thực Tế

Copy
Trước: Thời gian đánh giá trung bình 2 giờ/PR
Sau: Thời gian đánh giá trung bình 45 phút/PR (giảm 62%)

Phát hiện vấn đề bảo mật:
- Trước: 2 vấn đề/tháng trung bình
- Sau: 8 vấn đề/tháng trung bình (tăng 4 lần)

📝 Kết luận

Thiết lập PR-Agent với OpenRouter mang lại những lợi ích sau:

Hiệu Suất Chi Phí - Sử dụng nhiều mô hình thông qua OpenRouter để tối ưu hóa chi phí

Cải Thiện Chất Lượng - Tiêu chuẩn đánh giá nhất quán giảm thiểu sai sót

Hiệu Quả - Giảm đáng kể thời gian đánh giá

Hiệu Ứng Học Tập - Các lập trình viên học hỏi các thực hành tốt từ phản hồi AI

Linh Hoạt - Có thể tùy chỉnh cho yêu cầu cụ thể của đội

Chúng tôi khuyên bạn nên bắt đầu với một dự án nhỏ để thử nghiệm và dần mở rộng. Tệp cấu hình cho phép tùy biến rộng rãi để phù hợp với nhu cầu của đội bạn.


📚 Tài nguyên tham khảo

  • Tài liệu Chính thức của PR-Agent
  • OpenRouter
  • Ví dụ về GitHub Actions
  • Các tùy chọn cấu hình

Hy vọng hướng dẫn này giúp cải thiện quy trình đánh giá mã của bạn! Hãy chia sẻ câu hỏi hoặc ý kiến trong phần bình luận.

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