git clone https://github.com/LOGIC-10/RepoAgent.git
cd RepoAgentPDMでセットアップ
Python仮想環境を初期化します。以下の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 repo実行コマンドは、次のオプションフラグをサポートします(設定されている場合、設定のデフォルトをオーバーライドします):
-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/to/your/target/repository-hp 、 --hierarchy-pathテキスト:ドキュメント構造の整理に使用されるプロジェクト階層ファイルの名前またはパス。デフォルト: .project_doc_record-mdp 、 --markdown-docs-pathテキスト:マークダウンドキュメントが保存または生成されるフォルダーパス。デフォルト: 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は、ドキュメントを保存するためのターゲットリポジトリのルートディレクトリにグローバル構造情報とMarkDown_Docsという名前のフォルダーを維持する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コミットはレポジントのフックをトリガーし、ターゲットリポジトリの変更を自動的に検出し、対応するドキュメントを生成します。次に、ターゲットリポジトリに新しいファイルを追加したり、既存のファイルを変更したりするなど、ターゲットリポジトリを変更することができます。通常のgitワークフロー:git add、git commit -m "your commit message"、gitプッシュレポジントフックはGitコミットで自動的にトリガーされ、前のステップで追加されたファイルを検出し、対応するドキュメントを生成する必要があります。
実行後、Repoagentはターゲットリポジトリ内の段階的ファイルを自動的に変更し、正式にコミットを送信します。下の図に示すように、実行が完了すると、緑の「渡された」が表示されます。
生成されたドキュメントは、ターゲットウェアハウスのルートディレクトリの指定されたフォルダーに保存されます。生成されたドキュメントのレンダリングは、以下に示されています。
デフォルトのモデルGPT-3.5-ターボを利用して、約270,000行のコードで構成されるXagentプロジェクトのドキュメントを生成しました。 GitHubのXagentプロジェクトのMarkDown_Docsディレクトリで、この世代の結果を表示できます。ドキュメントの品質を強化するには、 GPT-4-1106やGPT-4-0125-PREVIEWなどのより高度なモデルを検討することをお勧めします。
最後に、プロンプトをカスタマイズすることにより、ドキュメントの出力形式、テンプレート、その他の側面を柔軟に調整できます。私たちは、自動化されたテクニカルライティングに対するより科学的なアプローチとコミュニティへの貢献についてのあなたの探求に興奮しています。
これらのダウンストリームアプリケーションの統一ゲートウェイとして、レポジットとのチャットを概念化し、レポージメントを人間のユーザーや他のAIエージェントにリンクするコネクタとして機能します。将来の研究では、インターフェイスをさまざまなダウンストリームアプリケーションに適応させ、独自の特性と実装要件を満たすためにカスタマイズすることに焦点を当てます。
ここでは、下流タスクの1つの予備プロトタイプを示します。問題とコードの説明のための自動Q&Aです。次のコードを実行してサーバーを開始できます。
pip install repoagent[chat-with-repo]
repoagent chat-with-repoレポジントを採用した特集ケースを以下に示します。
@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 }
}