Использование PR-Agent с AI Engine от Sakura

В этой статье мы рассмотрим, как построить PR-Agent с использованием «AI Engine от Sakura», предоставляемого компанией Sakura Internet. Для человека, работающего в Sakura Internet, выбор не использовать это в разработке, вероятно, отсутствует.

Что такое AI Engine от Sakura

«AI Engine от Sakura» — это сервис, который позволяет использовать модели генеративного AI, предоставляемые Sakura Internet, на платформе генеративного AI.

«AI Engine от Sakura» — это платформа на основе почасовой оплаты, предлагающая различные модели генеративного AI. 
Все поддерживаемые модели LLM хостятся Sakura Internet, поэтому все данные обрабатываются только между клиентом и 
Sakura Internet, и данные, используемые для таких задач, как дополнение сообщений, не используются для обучения моделей LLM,
что делает сервис высоко безопасным с точки зрения данных.

Таким образом, поскольку это предоставляется отечественной компанией, данные не отправляются за границу, что позволяет использовать его с уверенностью.

Что такое PR-Agent

PR-Agent — это инструмент, который автоматически рецензирует pull-запросы на GitHub, используя LLM (модели большого языка). PR-Agent может понимать изменения в коде и указывать на потенциальные проблемы или улучшения. Это позволяет разработчикам сосредоточиться на повышении качества, снижая нагрузку от код-ревью.

Использование PR-Agent с AI Engine от Sakura

Согласно руководству, получите токен учетной записи для AI Engine от Sakura.

Настройка TOKEN в репозитории для PR-Agent

Перейдите в репозиторий GitHub в раздел Settings > Secrets and variables > Actions и добавьте секрет с названием SAKURA_AI_ENGINE_API_KEY.

secret

secret token

Настройка GitHub Actions

PR-Agent работает с использованием GitHub Actions. Создайте следующий YAML-файл в каталоге .github/workflows вашего репозитория.
В этом случае мы будем использовать модель Qwen3-Coder-480B-A35B-Instruct-FP8.

name: PR-Agent
on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review]
  issue_comment:
    types: [created, edited]
  workflow_dispatch:

permissions:
  issues: write
  pull-requests: write
  contents: write

jobs:
  pr_agent_job:
    runs-on: ubuntu-latest
    name: Запуск pr agent на каждом pull-запросе
    steps:
      - name: Шаг действия PR Agent
        id: pragent
        uses: qodo-ai/pr-agent@main
        env:
          OPENAI_KEY: ${{ secrets.SAKURA_AI_ENGINE_API_KEY }}
          OPENAI__API_BASE: https://api.ai.sakura.ad.jp/v1
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          github_action_config.auto_review: "true"
          github_action_config.auto_describe: "true"
          github_action_config.auto_improve: "true"
          config.model: "openai/Qwen3-Coder-480B-A35B-Instruct-FP8"
          config.custom_model_max_tokens: "100000"
          config.fallback_models: '[ "openai/Qwen3-Coder-480B-A35B-Instruct-FP8" ]'
          pr_reviewer.extra_instructions: >-
            Пожалуйста, отвечайте на японском языке.            
          pr_description.extra_instructions: >-
            Пожалуйста, отвечайте на японском языке.            
          pr_code_suggestions.extra_instructions: >-
            Пожалуйста, отвечайте на японском языке.            
          pr_code_suggestions.num_code_suggestions: "2"

Не забудьте не добавлять префикс openai/ к имени модели, иначе PR-Agent не сможет его распознать.

Попробуем запустить

GitHub Actions для PR-Agent будет запущен, и автоматически добавит комментарии к рецензии к pull-запросу. Теперь давайте создадим файл main.go, который, вероятно, будет подвержен рецензии, и создадим PR.

package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	http.HandleFunc("/", handler)
	http.ListenAndServe(":8080", nil)
}

func handler(w http.ResponseWriter, r *http.Request) {
	name := r.URL.Query().Get("name")
	if name == "" {
		name = "World"
	}
	body, err := ioutil.ReadAll(r.Body)
	if err != nil {
		http.Error(w, "Невозможно прочитать тело", http.StatusBadRequest)
		return
	}
	r.Body.Close()

	fmt.Fprintf(w, "Привет, %s!", name)
	fmt.Fprintf(w, "\nВы отправили: %s", string(body))
}

func calculate(x int, y int) int {
	result := x + y
	return result
}

func processData(data []string) {
	for _, item := range data {
		fmt.Println(item)
	}
}

После создания PR CI PR-Agent будет работать.

pr-agent-ci

Через некоторое время к PR будут добавлены комментарии с описанием и рецензией.

description

review

Резюме

  • Репозиторий для тестирования
  • Автоматизация код-ревью с помощью PR-Agent + AI Engine от Sakura
  • AI Engine от Sakura — это отечественная платформа генеративного AI с высокой безопасностью данных
  • Использование API OpenAI означает, что данные не отправляются за границу, что также усиливает уверенность (психологически)