Show HN: Patchwork – 개발 잡무를 자동화하는 오픈 소스 프레임워크
요약
Patchwork는 셀프 호스팅 CLI 에이전트와 LLM을 활용하여 PR 리뷰, 버그 수정, 보안 패치 등 반복적인 개발 잡무를 자동화하는 오픈 소스 프레임워크입니다. 단계(Steps), 프롬프트 템플릿(Prompt Templates), 패치플로우(Patchflows)라는 세 가지 핵심 구성 요소를 통해 맞춤형 자동화 워크플로우를 구축할 수 있습니다.
핵심 포인트
- CLI, IDE, CI/CD 파이프라인 등 다양한 환경에서 실행 가능한 자동화 도구입니다.
- Steps, Prompt Templates, Patchflows를 조합하여 사용자 정의 자동화 기능을 생성할 수 있습니다.
- 보안 패치(AutoFix), 의존성 업데이트, 이슈 해결(RAG 지원) 등 특화된 기능을 제공합니다.
- PyPI를 통해 쉽게 설치 가능하며, 필요에 따라 보안, RAG, 알림 등의 선택적 의존성을 구성할 수 있습니다.
Patchwork는 셀프 호스팅(self-hosted) CLI 에이전트와 사용자가 선호하는 LLM(Large Language Models)을 사용하여 PR 리뷰, 버그 수정, 보안 패치 등과 같은 개발 잡무(gruntwork)를 자동화합니다. 호스팅 버전을 여기서 사용해 보세요.
Steps (단계): PR 생성, 변경 사항 커밋 또는 LLM 호출과 같이 재사용 가능한 원자적 동작(atomic actions)입니다.
Prompt Templates (프롬프트 템플릿): 라이브러리 업데이트, 코드 생성, 이슈 분석 또는 취약점 해결과 같은 작업에 최적화되어 맞춤 설정이 가능한 LLM 프롬프트입니다.
Patchflows (패치플로우): 단계(steps)와 프롬프트(prompts)를 결합하여 구축된 PR 리뷰, 코드 수정, 문서화 등과 같은 LLM 지원 자동화 기능입니다.
Patchflows는 로컬 CLI 및 IDE에서 실행하거나 CI/CD 파이프라인의 일부로 실행할 수 있습니다. 기본적으로 사용할 수 있는 여러 Patchflows가 제공되며, 언제든지 자신만의 것을 만들 수 있습니다.
Patchwork는 PyPI에서 사용할 수 있으며 pip를 사용하여 설치할 수 있습니다:
pip install 'patchwork-cli[all]' --upgrade
다음과 같은 선택적 의존성 그룹(optional dependency groups)을 사용할 수 있습니다.
security
: pip install 'patchwork-cli[security]'를 통해 semgrep 및 depscan을 설치하며, AutoFix 및 DependencyUpgrade Patchflows에 필요합니다.
rag
: pip install 'patchwork-cli[rag]'를 통해 chromadb를 설치하며, ResolveIssue Patchflow에 필요합니다.
notifications
: Slack 메시지 전송과 같이 알림을 보내는 단계에서 사용됩니다.
all
: 모든 것을 설치합니다.
- 의존성 그룹을 지정하지 않으면 (
pip install patchwork-cli), GenerateDocstring, PRReview 및 GenerateREADME Patchflows를 실행하기에 충분한 핵심 의존성 세트가 설치됩니다.
Poetry를 사용하여 소스에서 빌드하려면 여기의 상세 문서를 참조하세요.
CLI는 다음과 같이 Patchflows를 실행합니다:
patchwork <PatchFlow> <?Arguments>
여기서
Arguments (인자): key=value 형식으로 Patchflow의 기본/선택적 속성을 재정의할 수 있습니다. 만약 key에 값이 없다면, 불리언(boolean) True 플래그로 간주됩니다.
Semgrep 스캔을 기반으로 취약점을 패치하는 AutoFix Patchflow의 경우:
patchwork AutoFix openai_api_key=<YOUR_OPENAI_API_KEY> github_api_key=<YOUR_GITHUB_TOKEN>
위 명령은 Semgrep을 실행하여 취약점을 식별함으로써 현재 디렉토리의 코드를 패치하는 것을 기본값으로 합니다. AutoFix 패치플로우 (patchflow)를 관리하기 위해 설정할 수 있는 구성 목록은 default.yml 파일을 통해 확인할 수 있습니다. CLI에서 GitHub의 개인 액세스 토큰 (personal access token)을 사용하는 방법에 대한 자세한 내용은 이 문서를 읽어보시기 바랍니다.
https://app.patched.codes/signin 에서 로그인하고 통합 (integrations) 탭에서 API 키를 생성하여, OpenAI 키를 당사의 관리형 서비스 키로 교체할 수 있습니다. 그런 다음 다음과 같이 키를 사용하여 패치플로우 (patchflow)를 호출할 수 있습니다:
patchwork AutoFix patched_api_key=<YOUR_PATCHED_API_KEY> github_api_key=<YOUR_GITHUB_TOKEN>
Google의 모델을 사용하려면 google_api_key와 model을 설정할 수 있습니다. 이는 gemini-pro-1.5 모델이 100만 토큰의 입력 컨텍스트 길이 (input context length)를 지원하므로, 대규모 컨텍스트 (large contexts)를 다루고자 할 때 유용합니다.
patchwork-template 저장소에는 모든 패치플로우 (patchflows)에 대한 기본 구성 (configuration) 및 프롬프트 (prompts)가 포함되어 있습니다. 해당 저장소를 클론 (clone)한 뒤 CLI의 플래그 (flag)로 전달할 수 있습니다:
patchwork AutoFix --config /path/to/patchwork-configs/patchflows
Patchwork는 모든 OpenAI 호환 엔드포인트 (endpoint)를 지원하므로, Groq, Together AI 또는 Hugging Face와 같은 다양한 제공업체의 모든 LLM을 사용할 수 있습니다.
예를 들어, Groq.com의 Llama 3.1 405B를 사용하려면 다음을 실행하십시오:
patchwork AutoFix client_base_url=https://api.groq.com/openai/v1 openai_api_key=your_groq_key model=llama-3.1-405b-reasoning
동일한 작업을 위해 설정 파일 (config file)을 사용할 수도 있습니다. Hugging Face의 Llama 3.1 405B를 사용하려면 config.yml 파일을 생성하십시오:
openai_api_key: your_hf_token
client_base_url: https://api-inference.huggingface.co/models/meta-llama/Meta-Llama-3.1-405B-Instruct-FP8/v1
model: Meta-Llama-3.1-405B-Instruct-FP8
그리고 다음과 같이 실행합니다:
patchwork AutoFix --config=/path/to/config.yml
이를 통해 llama.cpp, ollama, vllm 또는 tgi를 사용하여 로컬 모델 (local models)을 실행할 수 있습니다.
예를 들어, llama_cpp.server를 사용하여 Llama 3.1 8B를 로컬에서 실행할 수 있습니다.
python -m llama_cpp.server --hf_model_repo_id bullerwins/Meta-Llama-3.1-8B-Instruct-GGUF --model 'Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf' --chat_format chatml
그 다음 patchflow (patchflow)를 실행합니다:
patchwork AutoFix client_base_url=http://localhost:8080/v1 openai_api_key=no_key_local_model
Patchwork에는 미리 정의된 patchflows가 포함되어 있으며, 시간이 지남에 따라 더 많은 기능이 추가될 예정입니다. 샘플 patchflows는 다음과 같습니다:
GenerateDocstring: 코드 내 메서드(methods)에 대한 docstring (docstring)을 생성합니다.
AutoFix: 저장소(repository) 내 코드 취약점(vulnerabilities)에 대한 수정 사항을 생성하고 적용합니다.
PRReview: PR (Pull Request) 생성 시, 코드 차이(diff)를 추출하고 변경 사항을 요약하여 PR에 댓글을 답니다.
GenerateREADME: 특정 폴더에 대한 README 마크다운(markdown) 파일을 생성하여 저장소에 문서화를 추가합니다.
DependencyUpgrade: 취약한 버전에서 수정된 버전으로 종속성(dependencies)을 업데이트합니다.
ResolveIssue: 이슈(issue) 또는 버그(bug)를 해결하기 위해 업데이트가 필요한 저장소 내 파일을 식별하고, 이를 수정하기 위한 PR을 생성합니다.
프롬프트 템플릿 (Prompt templates)은 patchflows에서 사용되며 LLM (Large Language Models)에 쿼리(queries)로 전달됩니다. 템플릿은 {{}}로 둘러싸인 플레이스홀더 변수(placeholder variables)가 포함된 프롬프트를 포함하며, 이 변수들은 실행될 때마다 각 단계(steps) 또는 입력값(inputs)의 데이터로 교체됩니다.
아래는 샘플 프롬프트 템플릿입니다:
{
"id": "diffreview_summary",
"prompts": [
...
각 patchflow에는 최적화된 기본 프롬프트 템플릿이 포함되어 있습니다. 하지만 prompt_template_file=/path/to/prompt/template/file 옵션을 사용하여 자신만의 템플릿을 지정할 수 있습니다.
새로운 patchflows 및 단계(steps), 또는 핵심 프레임워크(core framework)에 대한 기여(contributions)를 환영합니다. 자세한 내용은 오픈 이슈(open issues)를 확인해 주세요.
- 새로운 patchflow를 만들려면 이 지침을 따르세요.
- 새로운 단계(step)를 만들려면 이 지침을 따르세요.
또한 새로운 단계와 patchflows를 쉽게 만들 수 있도록 도와주는 채팅 어시스턴트(chat assistant)를 제공합니다.
-
HuggingChat의 Patchwork Assistant (Llama-3.1 기반)
-
patchflow 라이브러리 및 통합 옵션 확장
-
Patchflow 디버거(debugger) 및 검증(validation) 모듈
-
버그 수정 및 성능 개선
-
코드 및 문서 리팩터링 (Refactor)
-
patchflow 내 대규모 코드 임베딩 (embeddings) 지원
-
병렬화 (parallelization) 및 브랜칭 (branching) 지원
-
셀프 호스팅 (self-hosted)이 가능한 미세 조정된 (Fine-tuned) 모델들
-
오픈 소스 GUI
Patchwork는 AGPL-3.0 라이선스 조건에 따라 라이선스가 부여됩니다. 하지만 Apache-2.0 라이선스 조건에 따라 라이선스가 부여되는 patchwork 템플릿 저장소(repository)를 사용하여 커스텀 patchflow와 단계(steps)를 생성하고 공유할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 HN Claude Code Search의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기