git clone https://github.com/LOGIC-10/RepoAgent.git
cd RepoAgentPDM으로 설정
파이썬 가상 환경을 초기화하십시오. 아래 CMD In /RepoAgent 디렉토리를 실행하십시오.
pdm venv create --name repoagent가상 환경을 활성화합니다
PDM을 사용하여 종속성을 설치하십시오
pdm installrepoagent의 특정 매개 변수를 구성하기 전에 OpenAI API가 명령 행의 환경 변수로 구성되어 있는지 확인하십시오.
export OPENAI_API_KEY=YOUR_API_KEY # on Linux/Mac
set OPENAI_API_KEY=YOUR_API_KEY # on Windows
$Env :OPENAI_API_KEY = " YOUR_API_KEY " # on Windows (PowerShell) repoagent의 루트 디렉토리를 입력하고 터미널에서 다음 명령을 시도하십시오.
repoagent run # this command will generate doc, or update docs(pre-commit-hook will automatically call this)
repoagent run --print-hierarchy # Print how repo-agent parse the target repoRUN 명령은 다음 옵션 플래그를 지원합니다 (SET, CONFIG DEFAULTS를 무시합니다).
-m , --model 텍스트 : 완료에 사용할 모델을 지정합니다. 기본값 : gpt-3.5-turbo-t , --temperature 플로트 : 모델의 생성 온도를 설정합니다. 낮은 값은 모델을보다 결정적으로 만듭니다. 기본값 : 0.2-r , --request-timeout integer : API 요청에 대한 시간 초과를 초로 정의합니다. 기본값 : 60-b , --base-url 텍스트 : API 호출의 기본 URL. 기본값 : https://api.openai.com/v1-tp , --target-repo-path path : 대상 저장소에 대한 파일 시스템 경로. 문서 생성의 근본으로 사용됩니다. 기본값 : path/to/your/target/repository-hp , --hierarchy-path 텍스트 : 문서 구조를 구성하는 데 사용되는 프로젝트 계층 파일의 이름 또는 경로. 기본값 : .project_doc_record-mdp , --markdown-docs-path 텍스트 : Markdown 문서가 저장 또는 생성되는 폴더 경로. 기본값 : markdown_docs-i , --ignore-list 텍스트 : 문서 생성 중에 무시할 파일 또는 디렉토리 목록은 쉼표로 분리됩니다.-l , --language 텍스트 : 문서의 ISO 639 코드 또는 언어 이름. 기본값 : Chinese-ll , --log-level [debug | info | 경고 | 오류 | 중요] : 응용 프로그램의 로깅 레벨을 설정합니다. 기본값 : INFO다음 기능을 시도 할 수도 있습니다
repoagent clean # Remove repoagent-related cache
repoagent diff # Check what docs will be updated/generated based on current code change대상 리포지토리에 대한 문서를 처음 생성 한 경우 Repoagent는 문서 저장을위한 대상 저장소의 루트 디렉토리에있는 글로벌 구조 정보를 유지 관리하는 JSON 파일과 폴더를 자동으로 생성합니다.
대상 저장소에 대한 글로벌 문서를 처음 생성 한 후에 또는 클로닝 된 프로젝트에 이미 글로벌 문서 정보가 포함 된 경우 대상 리포지토리에서 사전 커밋 후크를 구성하여 팀과 함께 내부 프로젝트 문서를 원활하게 자동으로 유지할 수 있습니다!
pre-commit 사용하십시오Repoagent는 현재 프로젝트에 대한 문서 생성을 지원하며 대상 저장소에 일부 구성이 필요합니다.
먼저 대상 저장소가 GIT 저장소이고 초기화되었는지 확인하십시오.
git init대상 저장소에 사전 커밋을 설치하여 GIT 저장소의 변경 사항을 감지하십시오.
pip install pre-commit 대상 저장소의 루트 디렉토리에서 .pre-commit-config.yaml 이라는 파일을 만듭니다. 예는 다음과 같습니다.
repos :
- repo : local
hooks :
- id : repo-agent
name : RepoAgent
entry : repoagent
language : system
pass_filenames : false # prevent from passing filenames to the hook
# You can specify the file types that trigger the hook, but currently only python is supported.
types : [python]후크의 특정 구성 메소드는 사전 커밋을 참조하십시오. Yaml 파일을 구성한 후 다음 명령을 실행하여 후크를 설치하십시오.
pre-commit install이러한 방식으로, 각 GIT 커밋은 Repoagent의 후크를 트리거하여 대상 리포지토리의 변경 사항을 자동으로 감지하고 해당 문서를 생성합니다. 다음으로 대상 리포지토리에 새 파일을 추가하거나 기존 파일을 수정하는 등 대상 리포지토리를 수정할 수 있습니다. 정상적인 git 워크 플로우 : git add, git commit -m "commit message", git 푸시 repoagent hook은 git commit에서 자동으로 트리거되고 이전 단계에서 추가 된 파일을 감지하고 해당 문서를 생성해야합니다.
실행 후 Repoagent는 대상 리포지토리에서 스테이지 파일을 자동으로 수정하고 공식적으로 커밋을 제출합니다. 실행이 완료되면 아래 그림과 같이 녹색 "통과"가 표시됩니다.
생성 된 문서는 대상 창고의 루트 디렉토리의 지정된 폴더에 저장됩니다. 생성 된 문서의 렌더링은 다음과 같습니다.
우리는 기본 모델 GPT-3.5-Turbo를 사용하여 약 270,000 줄 의 코드로 구성된 Xagent 프로젝트에 대한 문서를 생성했습니다. GitHub의 Xagent 프로젝트의 Markdown_docs 디렉토리 에서이 세대의 결과를 볼 수 있습니다. 강화 된 문서화 품질을 위해 GPT-4-1106 또는 GPT-4-0125-PREVIEW 와 같은 고급 모델을 고려하는 것이 좋습니다.
결국, 프롬프트를 사용자 정의하여 문서의 출력 형식, 템플릿 및 기타 측면을 유연하게 조정할 수 있습니다. 자동화 된 기술 작문에 대한보다 과학적 접근 방식과 지역 사회에 대한 기여에 대한 귀하의 탐구에 대해 기쁘게 생각합니다.
우리는 이러한 다운 스트림 애플리케이션을위한 통합 게이트웨이로서 Repo와의 채팅을 개념화하여 Repoagent를 인간 사용자 및 기타 AI 에이전트에 연결하는 커넥터 역할을합니다. 우리의 향후 연구는 인터페이스를 다양한 다운 스트림 애플리케이션에 적용하고 고유 한 특성 및 구현 요구 사항을 충족하도록 사용자 정의하는 데 중점을 둘 것입니다.
여기서 우리는 다운 스트림 작업 중 하나의 예비 프로토 타입을 보여줍니다 : 문제 및 코드 설명을위한 자동 Q & A. 다음 코드를 실행하여 서버를 시작할 수 있습니다.
pip install repoagent[chat-with-repo]
repoagent chat-with-reporepoagent를 채택한 특집 사례는 다음과 같습니다.
@misc { luo2024repoagent ,
title = { RepoAgent: An LLM-Powered Open-Source Framework for Repository-level Code Documentation Generation } ,
author = { Qinyu Luo and Yining Ye and Shihao Liang and Zhong Zhang and Yujia Qin and Yaxi Lu and Yesai Wu and Xin Cong and Yankai Lin and Yingli Zhang and Xiaoyin Che and Zhiyuan Liu and Maosong Sun } ,
year = { 2024 } ,
eprint = { 2402.16667 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CL }
}