Skip to content

jpitapeva/extensao-devops-pull-request

Repository files navigation

Use modelos da Azure OpenAI ou da Microsoft Foundry para revisar solicitacoes de PullRequest dentro do Azure Devops

Task do Azure DevOps que adiciona comentarios em portugues nas solicitacoes de PullRequest com a ajuda da IA.

Instalacao

https://marketplace.visualstudio.com/publishers/jpcompcombr

Servico Azure OpenAI

Para o parametro 'aoi_endpoint' informar o endpoint como no exemplo: https://{XXXXXXXX}.openai.azure.com/openai/deployments/{MODEL_NAME}/chat/completions?api-version={API_VERSION}

Documentacao API REST.


Servico Microsoft Foundry

Observar dentro do Microsoft Foundry se o modelo é compatível com o chat-completions e/ou responses

Exemplo: image

Documentacao create a model response
Microsoft foundry model catalog


De permissao ao agent de servico de build

Antes de usar esta task, certifique-se de que o servico de build tenha permissões para contribuir em seu REPOSITORIO:

contribute_to_pr

Encontrar o Agent de Servico de Build

  1. Acesse o Azure DevOps
  2. Va até Project Settings
  3. Abra Permissions
  4. Clique na aba Users
  5. Procure por: <ProjectName> Build Service (<OrganizationName>)

Este é o identity usado pelos pipelines YAML e Classic.

Permitir que a tarefa acesse o token do sistema

Adicione uma secao de checkout com persistCredentials definido como true.

Release notes

  • Versão 27.0.2: corrigimos vulnerabilidades em bibliotecas de terceiros e atualizamos o Node.js da versão 16 para 20.1. ATENCAO: essa mudanca pode exigir ajustes em ambientes que ainda utilizam Node.js 16.
  • Versão 28: adicionamos o campo opcional 'build_service_name'. Detalhe: o parametro 'build_service_name' deve ser informado quando houver um build service especifico configurado no repositório do Azure DevOps. Necessario para situacoes em que comentarios antigos dentro do PR e gerado pela IA nao sao excluidos.
  • Versão 29: adequamos as novas especificacoes da API da OpenAI: o parametro do body mudou de 'max_tokens' para 'max_completion_tokens', e o valor padrao de 'temperature' mudou de 0 para 1.
  • Versão 30: corrigimos instabilidades e incluimos novas validacoes.
  • Versão 31: passou a ser obrigatorio informar o nome correto do modelo configurado no Microsoft Foundry (ex.: gpt-5.4-nano, gpt-35-turbo, gpt-4-32k, gpt-4-0613, gpt-4-32k-0613). Mais detalhes: https://learn.microsoft.com/en-us/azure/foundry/foundry-models/concepts/models-sold-directly-by-azure?tabs=global-standard-aoai%2Cglobal-standard&pivots=azure-openai
  • Versão 32: disponibilizamos a integracao com agents do Microsoft Foundry.

Pipelines Yaml

jobs:
- job:
  displayName: "JPCompcombr code review"
  pool:
    vmImage: ubuntu-latest 
 
  steps:
  - checkout: self
    persistCredentials: true

  - task: JPCompcombr@32
    displayName: GPTPullRequestReview
    inputs:
      api_key: 'api-key'
      aoi_endpoint: 'https://{XXXXXXXX}.azure.com/openai/deployments/{MODEL_NAME}/chat/completions?api-version={API_VERSION} OU https://XXXXX.openai.azure.com/openai/v1/chat/completions OU PARA MODO AGENT https://XXXXXX.services.ai.azure.com/api/projects/XXXXXX/openai/v1/responses'
      aoi_tokenMax: 1000
      aoi_temperature: 1 
      use_https: true
      prompt: 'Opcional. Se desejar agora voce pode criar o seu proprio prompt, exemplo. Atue como revisor de codigo de uma solicitação de pull, fornecendo feedback sobre possíveis bugs e problemas de codigo limpo.\nVoce recebe as alteracoes da solicitacao de pull em um formato de patch.\nCada entrada de patch tem a mensagem de confirmacao na linha de assunto, seguida pelas alteracoes de codigo (diffs) em um formato unidiff.\n\nComo revisor de codigo, sua tarefa é:\n- Revisar apenas as linhas adicionadas, editadas ou excluídas.\n- Se não houver bugs e as alterações estiverem corretas, escreva apenas 'Sem feedback'.\n- Se houver bugs ou alterações de codigo incorretas.'
      file_excludes: 'file1.js,file2.py,secret.txt,*.csproj,src/**/*.csproj'
      additional_prompts: 'Opcional. Prompt adicional separado por virgula, exemplo: corrija a nomenclatura de variaveis, garanta identacao consistente, revise a abordagem de tratamento de erros'
      build_service_name: 'Opcional. O 'build_service_name' é um campo opcional e deve ser informado quando existir um build service especifico configurado dentro do repositorio do Azure Devops. Necessario para situacoes em que comentarios antigos dentro do PR e gerado pela IA nao sao excluidos.'
      model_name: A partir da versão 31 é obrigatorio informar o nome correto do modelo configurado no Microsoft Foundry. Exemplo: gpt-5.4-nano, gpt-35-turbo, gpt-4-32k, gpt-4-0613, gpt-4-32k-0613
      agent_foundry_mode: 'bool. Informar 'true' se o agent foi construido por deploy dentro do Microsoft Foundry, endpoint por exemplo: https://XXXXXX.services.ai.azure.com/api/projects/XXXXXX/openai/v1/responses'
      agent_name: Obrigatorio informar o nome do correto do agent se o parametro 'agent_foundry_mode' for configurado como true
      agent_version: Obrigatorio informar a versao correta do agent se o parametro 'agent_foundry_mode' for configurado como true

License

MIT

Developer plugin Steps

Into folder project, run command: npm run build
Bump version in vss-extension.json and task.json
Run command for generate new package: npx tfx-cli extension create
Upload extension to marketplace: https://marketplace.visualstudio.com/manage

GPT (transformador pré-treinado gerativo)

O que é a engenharia de prompts

Os modelos de IA generativa sao treinados em grandes quantidades de dados e podem gerar texto, imagens, codigo e conteúdo criativo com base na continuação mais provável do prompt.

Engenharia de prompt é o processo de criação e otimização de prompts para utilizar melhor os modelos de IA. A criação de prompts eficazes é fundamental para o sucesso da engenharia de prompt e pode aprimorar significativamente o desempenho do modelo de IA em tarefas específicas. Fornecer prompts relevantes, específicos, inequívocos e bem estruturados pode ajudar o modelo a entender melhor o contexto e gerar respostas mais precisas.

Por exemplo, se quisermos que um modelo de OpenAI gere descrições de produto, poderemos fornecer uma descrição detalhada que descreve os recursos e os benefícios do produto. Quando esse contexto é fornecido, o modelo pode gerar descrições de produto mais precisas e relevantes.

A engenharia de prompt também pode ajudar a reduzir o viés e a aumentar a imparcialidade em modelos de IA. Ao criar prompts diversos e inclusivos, podemos garantir que o modelo não seja tendencioso em relação a um determinado grupo ou perspectiva.

Curl

1- Curl para IA NAO construida via deploy do Microsoft Foundry

postman request POST 'https://RESOURCE_NAME.openai.azure.com/openai/v1/chat/completions' \
  --header 'api-key: API_TOKEN' \
  --header 'Content-Type: application/json' \
  --body '{    
    "max_completion_tokens": 10000,
    "model": "gpt-5.4-nano",
    "top_p": 1.0,
     "messages": [
            {"role": "system", "content": "Voce e um assistente especializado em engenharia de software, atuando como revisor de codigo para Pull Requests (PRs)"},          
            {"role": "system","content": "TESTE"
          }
    ]
}'

2- Curl para agent construido via deploy do Microsoft Foundry

postman request POST 'https://RESOURCE_NAME.services.ai.azure.com/api/projects/XXXXXXX/openai/v1/responses' \
  --header 'api-key: API_TOKEN' \
  --header 'Content-Type: application/json' \
  --body '{
    "model": "gpt-5.4-nano",
    "max_output_tokens": 1000,
    "agent_reference":
         {
            "name": "XXXXX",
            "version": "X",
            "type": "agent_reference"
          },
    "input":
    [
         {"role": "system", "content": "Voce e um assistente especializado em engenharia de software, atuando como revisor de codigo para Pull Requests (PRs)"},
         {"role": "system","content": "TESTE"}
     ]
}'

Author: Joao Paulo Moreira Antunes

Site

JPCOMP

About

extensao-devops-pull-request

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors