Ontwikkel een OpenAI-integratie voor geautomatiseerde AI-gedreven code review
description
Met deze prompt kun je een geavanceerde OpenAI-integratie creëren die je helpt bij het automatisch beoordelen van code op kwaliteitsaspecten zoals stijl, veiligheid en efficiëntie. Dit bespaart tijd, vermindert menselijke fouten en verbetert de consistentie in je ontwikkelteam. Het is effectiever dan handmatige reviews en ondersteunt integratie in bestaande workflows.
prompt
Help me een OpenAI-integratie te ontwerpen die geautomatiseerde code reviews uitvoert binnen mijn ontwikkelworkflow. Beschrijf de programmeertalen en frameworks die ik gebruik: <voer de programmeertalen en frameworks in>. Welke specifieke codekwaliteitsaspecten wil ik controleren, zoals stijl, beveiliging, efficië ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorstel voor het ontwerpen van een OpenAI-gebaseerde geautomatiseerde code review-integratie in jouw ontwikkelworkflow met JavaScript (Node.js en Express), gericht op beveiliging en best practices, geïntegreerd met Azure en GitHub Actions.
### 1. Architectuur en Workflow
- **Code Submit**: Bij elke pull request (PR) of push naar hoofdbranch wordt een GitHub Action getriggerd.
- **Code Extractie**: De Action haalt de gewijzigde code of volledige bestanden op.
- **API-aanroep**: De code wordt via API naar OpenAI gestuurd voor analyse.
- **Resultaat**: De AI-beoordeling wordt teruggestuurd en weergegeven als commentaar op de PR of als rapport.
### 2. Technische keuzes
- **Programmeertaal en frameworks**:
- Node.js voor scripting en API-integratie.
- Gebruik van `@actions/core` en `@actions/github` voor GitHub Actions integratie.
- `axios` of `node-fetch` voor HTTP-verzoeken naar OpenAI API.
- **OpenAI-modellen**:
- **GPT-4** of **GPT-3.5-turbo**: voor uitgebreide code-analyse en contextbegrip.
- Mogelijk gebruik van de GPT-code-geoptimaliseerde modellen zoals Codex (indien beschikbaar en geschikt).
### 3. OpenAI API-aanroepen
Voor code-review doeleinden kun je een prompt opstellen die de AI instrueert om beveiligings- en best-practices te controleren.
**Voorbeeld API-aanroep:**
```javascript
const axios = require('axios');
async function reviewCode(codeSnippet) {
const prompt = `
Je bent een ervaren software engineer gespecialiseerd in JavaScript, Node.js en beveiliging.
Voer een code review uit op de volgende code, en geef specifiek feedback over beveiligingsproblemen en naleving van best practices:
Code:
${codeSnippet}
Geef een korte samenvatting van de bevindingen, inclusief eventuele beveiligingslekken en verbeterpunten.
`;
const response = await axios.post('https://api.openai.com/v1/chat/completions', {
model: 'gpt-4', // of 'gpt-3.5-turbo'
messages: [{ role: 'user', content: prompt }],
max_tokens: 500,
temperature: 0.2,
}, {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer YOUR_OPENAI_API_KEY`,
},
});
return response.data.choices[0].message.content;
}
```
### 4. Integratie in CI/CD (GitHub Actions)
Een voorbeeld van een GitHub Action workflow:
```yaml
name: Code Review met OpenAI
on:
pull_request:
branches:
- main
jobs:
openai-code-review:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '14'
- name: Install dependencies
run: npm install axios
- name: Extract changed code
run: |
# Script om gewijzigde bestanden te vinden en code te extraheren
git diff origin/main --name-only > changed_files.txt
# Voor elk JavaScript-bestand
while read file; do
if [[ "$file" == *.js ]]; then
echo "Reviewing $file"
code=$(cat "$file")
# Call review script
node review.js "$code" > review_output.txt
# Post comment op PR met review
gh pr comment ${{ github.event.pull_request.number }} --body "$(cat review_output.txt)"
fi
done
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
**review.js** zou de API-aanroep bevatten en de output verwerken.
### 5. Aanvullend advies
- **Context beperken**: Voor grote bestanden is het verstandig om code te fragmenteren of slechts de gewijzigde delen te analyseren.
- **Automatisering**:
- Automatiseer het triggeren van reviews bij PR's.
- Voeg de gegenereerde feedback toe als inline comments of als samenvatting in de PR.
- **Veiligheid**:
- Bewaar API-sleutels veilig in GitHub Secrets.
- Beperk API-verzoeken om kosten te beheersen.
- **Verfijning**:
- Pas prompts aan voor meer specifieke controle (bijvoorbeeld: "controleer op SQL-injectie, XSS, veilige authenticatie").
---
Met deze aanpak krijg je een krachtige, geautomatiseerde code review-tool die beveiligings- en best practice-issues in jouw Node.js/Express code adresseert, geïntegreerd binnen je Azure / GitHub Actions omgeving.
provider: deepseek
model: deepseek-chat
Absoluut. Hier is een gedetailleerd ontwerp voor een geautomatiseerde code review-integratie met OpenAI, afgestemd op jouw technische stack en vereisten.
---
### 1. Overzicht van de Integratie
Het doel is om een stap toe te voegen aan je GitHub Actions CI/CD-pijplijn die, wanneer een Pull Request (PR) wordt geopend of bijgewerkt, de gewijzigde code analyseert met behulp van de OpenAI API. De focus ligt op **beveiliging** en **best practices** voor Node.js/Express.
De workflow ziet er als volgt uit:
1. Ontwikkelaar maakt een PR op GitHub.
2. GitHub Actions trigger wordt geactiveerd.
3. De workflow haalt de gewijzigde bestanden op.
4. Een Node.js script stuurt relevante codefragmenten naar de OpenAI API.
5. Het script parseert het OpenAI-antwoord en genereert feedback.
6. De feedback wordt gepost als een commentaar op de PR (of de build faalt bij kritieke issues).
---
### 2. Aanbevolen OpenAI Modellen en API's
Voor code-analyse is de **GPT-4-turbo** modelreeks (`gpt-4-turbo-preview` of `gpt-4-0125-preview`) momenteel de beste keuze. Het biedt uitstekende nauwkeurigheid, een grote contextwindow (128k tokens) voor het analyseren van meerdere bestanden, en is kostenefficiënter dan zijn voorgangers.
* **Primaire API:** **Chat Completions API**. Dit is de juiste keuze voor een conversatie-achtige interactie waar je de rol en context van de AI duidelijk kunt definiëren.
* **Alternatief:** Je kunt experimenteren met de **Assistants API**, maar voor een geautomatiseerde, scriptgestuurde workflow biedt de Chat Completions API meer controle en voorspelbaarheid.
---
### 3. Specifieke Codekwaliteitsaspecten (Beveiliging & Best Practices)
Je prompt moet de AI specifiek instrueren om te zoeken naar deze aspecten in JavaScript/Express code:
**Beveiliging:**
* **Injectie:** SQL/NoSQL-injectie, Command Injection.
* **Authenticatie & Autoratie:** Onveilige sessiebehandeling, gebrekkige JWT-validatie, missing rate limiting.
* **Input Validatie:** Gebrek aan sanitization van gebruikersinput (bv. met `express-validator`).
* **Configuratie:** Onveilige headers (bv. missende `Helmet.js`), blootstelling van gevoelige data in logs of responses.
* **Afhankelijkheden:** Gebruik van dependencies met bekende vulnerabilities (kan worden gecombineerd met tools zoals `npm audit`).
**Best Practices (Node.js/Express):**
* Foutafhandeling: Gebruik van try/catch blocks of error-handling middleware, in plaats van ongehandelde promises.
* Asynchrone code: Correct gebruik van `async/await` of promises om "Callback Hell" te vermijden.
* Code structuur: Duidelijke scheiding van concerns (bijv. Routers, Controllers, Services).
* Middleware gebruik: Correcte volgorde van middleware.
* Prestatie: Onnodig zware operaties in de request/response loop, gebrek aan caching.
---
### 4. Voorbeeld van API-aanroep (Node.js Script)
Hier is een vereenvoudigd voorbeeld van een script (`openai-code-review.js`) dat je kunt gebruiken.
**Eerst, installeer de officiële OpenAI package:**
```bash
npm install openai
```
**Script voorbeeld:**
```javascript
import OpenAI from "openai";
import { readFileSync } from "fs";
import { execSync } from "child_process";
// Initialiseer de OpenAI client met je API key (via environment variable)
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
// 1. Haal de gewijzigde bestanden op sinds de hoofd branch (bijv. 'main')
// Dit commando geeft een lijst van bestandsnamen terug
const changedFiles = execSync('git diff --name-only origin/main...HEAD')
.toString()
.trim()
.split('\n')
.filter(file => file.endsWith('.js')); // Filter alleen JavaScript bestanden
// 2. Loop door de gewijzigde bestanden en analyseer ze
for (const file of changedFiles) {
try {
const fileContent = readFileSync(file, 'utf8');
// 3. Stel de prompt samen. DIT IS DE KERN VAN JE CONFIGURATIE.
const prompt = `
Jij bent een senior Node.js/Express ontwikkelaar die een automatische code review uitvoert.
Focus strikt op beveiligingsproblemen en best practices.
Analiseer onderstaande code uit het bestand: ${file}
Beoordeel de code op de volgende aspecten:
- Beveiligingsrisico's (injectie, authenticatie, input validatie, configuratie)
- Node.js/Express best practices (foutafhandeling, asynchrone code, structuur)
- Identificeer duidelijk potentiële bugs en prestatieknelpunten.
Geef een bondig, direct antwoord terug in het Nederlands. Structureer je feedback als een lijst met punten.
Begin met een korte samenvatting. Classificeer elk gevonden probleem als "[KRITISCH]", "[WAARSCHUWING]" of "[SUGGESTIE]".
Code om te reviewen:
\`\`\`javascript
${fileContent}
\`\`\`
`;
// 4. Roep de OpenAI API aan
const completion = await openai.chat.completions.create({
model: "gpt-4-turbo-preview", // Gebruik het nieuwste preview model
messages: [
{
role: "system",
content: "Je bent een behulpzame, nauwkeurige automatische code review-assistent gespecialiseerd in JavaScript beveiliging en best practices.",
},
{ role: "user", content: prompt },
],
max_tokens: 1000, // Beperk de lengte van het antwoord voor kostenbeheersing
temperature: 0.2, // Lage temperature voor meer deterministische, feitelijke antwoorden
});
const feedback = completion.choices[0]?.message?.content;
// 5. Toon de feedback (deze wordt later naar GitHub gepost)
if (feedback && !feedback.includes('geen problemen')) {
console.log(`\n=== Feedback voor ${file} ===\n`);
console.log(feedback);
// In een echte workflow, zou je deze feedback verzamelen om naar GitHub te sturen
}
} catch (error) {
console.error(`Fout bij het verwerken van bestand ${file}:`, error.message);
}
}
```
---
### 5. Integratie in GitHub Actions (Azure DevOps)
Maak een nieuw YAML-bestand aan in je repo: `.github/workflows/openai-code-review.yml`.
```yaml
name: OpenAI Code Review
on:
pull_request:
types: [opened, synchronize, reopened] # Voer uit bij nieuwe commits op een PR
jobs:
code-review:
runs-on: ubuntu-latest
if: github.event.pull_request.draft == false # Sla draft PR's over
steps:
# Stap 1: Checkout de code
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Haal alle history op voor correcte git diff
# Stap 2: Stel Node.js omgeving in
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
# Stap 3: Installeer dependencies (o.a. 'openai' package)
- name: Install dependencies
run: npm ci
# Stap 4: Voer het review script uit
- name: Run OpenAI Code Review
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} # JE API KEY ALS GEHEIM
run: node openai-code-review.js >> review_feedback.md
# Stap 5: Post feedback naar de Pull Request
- name: Post review feedback to PR
uses: actions/github-script@v7
if: always() # Voer altijd uit, zelfs als het script faalt
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require('fs');
let feedback;
try {
feedback = fs.readFileSync('review_feedback.md', 'utf8');
} catch (error) {
feedback = "Geen feedback gegenereerd of er trad een fout op.";
}
if (feedback) {
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `### 🤖 OpenAI Code Review Resultaten\n\`\`\`\n${feedback}\n\`\`\``
});
}
```
### 6. Belangrijke Overwegingen en Advies
1. **Kostenbeheer:** OpenAI API-aanroepen kosten geld. Beperk de analyse tot gewijzigde bestanden (`git diff`) en stel een redelijk `max_tokens` in. Monitor je gebruik via het OpenAI dashboard.
2. **Geheimen (Secrets):** **Sla je `OPENAI_API_KEY` nooit hardcoded op.** Gebruik GitHub Repository Secrets (`Settings > Secrets and variables > Actions`).
3. **Nep-positieven:** OpenAI kan soms ongelijk hebben. Positioneer de feedback altijd als **advies** van een AI-assistent, niet als een blokkering voor merging. Laat de uiteindelijke beslissing bij de menselijke ontwikkelaar.
4. **Samenwerking met andere tools:** Deze integratie vervangt **niet** tools zoals `ESLint` (voor stijl), `SonarQube`, of `npm audit` (voor vulnerabilities). Het vult ze aan met contextueel, natuurlijktaalbegrip. Je kunt deze tools naast elkaar laten draaien in je workflow.
5. **Rate Limiting:** Wees je bewust van de rate limits van de OpenAI API. Voor grote PR's, overweeg dan om bestanden sequentieel te verwerken met vertragingen.
Dit ontwerp geeft je een robuuste basis om AI-gestuurde code reviews te integreren in je ontwikkelproces, waardoor de algemene kwaliteit en beveiliging van je Node.js applicaties wordt verbeterd.