철학
모든 코드 기여에 대해 다음 핵심 원칙을 따르는 것을 목표로 합니다:하위 호환성
안정적인 public interface를 유지하고 breaking change를 피합니다
테스트 우선
모든 변경사항은 정확성을 검증하고 회귀를 방지하기 위한 포괄적인 테스트를 포함해야 합니다
코드 품질
일관된 스타일, 문서화 및 아키텍처 패턴을 따릅니다
보안 중심
안전한 코딩 관행과 취약점 예방을 우선시합니다
시작하기
빠른 수정: 버그 수정 제출하기
간단한 버그 수정의 경우 즉시 시작할 수 있습니다:2
Clone 및 설정
3
branch 생성
4
변경사항 작성
코드 품질 표준을 따르면서 버그를 수정하세요
5
테스트 추가
수정 없이는 실패하는 unit test를 포함하세요. 이를 통해 버그가 해결되었는지 확인하고 회귀를 방지할 수 있습니다
6
테스트 실행
PR을 제출하기 전에 모든 테스트가 로컬에서 통과하는지 확인하세요
7
pull request 제출
제공된 PR 템플릿을 따르세요. 해당되는 경우 closing keyword를 사용하여 수정하는 이슈를 참조하세요 (예:
Fixes #123).전체 개발 설정
지속적인 개발이나 대규모 기여의 경우:1
개발 환경
아래의 설정 가이드를 따라 환경을 설정하세요
2
Repository 구조
repository 구조와 패키지 구성을 이해하세요
3
개발 워크플로우
테스트 및 linting을 포함한 개발 워크플로우를 학습하세요
4
기여 가이드라인
기능, 버그 수정 및 통합에 대한 기여 가이드라인을 검토하세요
개발 환경
Python 프로젝트는 의존성 관리를 위해
uv를 사용합니다. 최신 버전이 설치되어 있는지 확인하세요.- LangChain
- LangGraph
Core abstractions
Core abstractions
langchain-core 변경의 경우:Main package
Main package
langchain 변경의 경우:Partner packages
Partner packages
partner 통합 변경의 경우:
Community packages
Community packages
community 통합 (별도 repo에 위치) 변경의 경우:
Repository 구조
- LangChain
- LangGraph
LangChain은 여러 패키지가 있는 monorepo로 구성되어 있습니다:
Core packages
Core packages
langchain(libs/langchain/에 위치): chain, agent 및 retrieval 로직이 포함된 메인 패키지langchain-core(libs/core/에 위치): 기본 interface 및 핵심 abstraction
Partner packages
Partner packages
libs/partners/에 위치하며, 특정 통합을 위한 독립적으로 버전 관리되는 패키지입니다. 예를 들어:langchain-openai: OpenAI 통합langchain-anthropic: Anthropic 통합langchain-google-genai: Google Generative AI 통합
Supporting packages
Supporting packages
langchain-text-splitters: 텍스트 분할 유틸리티langchain-standard-tests: 통합을 위한 표준 테스트 suitelangchain-cli: Command line interfacelangchain-community: 커뮤니티가 유지 관리하는 통합 (별도 repo에 위치)
개발 워크플로우
테스트 요구사항
디렉토리는 작업 중인 패키지를 기준으로 합니다.
1
Unit test
위치:
tests/unit_tests/요구사항:- 네트워크 호출 금지
- edge case를 포함한 모든 코드 경로 테스트
- 외부 의존성에 대해 mock 사용
2
Integration test
Integration test는 외부 서비스/provider API에 대한 액세스가 필요하며 (비용이 발생할 수 있음) 따라서 기본적으로 실행되지 않습니다.모든 코드 변경사항이 integration test를 필요로 하는 것은 아니지만, 검토 프로세스의 일부로 integration test를 별도로 요구/실행할 것임을 유념하세요.위치:
tests/integration_tests/요구사항:- 외부 서비스와의 실제 통합 테스트
- API key에 환경 변수 사용
- 자격 증명을 사용할 수 없는 경우 gracefully skip
3
테스트 품질 체크리스트
- 코드가 손상되면 테스트가 실패함
- Edge case 및 오류 조건이 테스트됨
- fixture 및 mock의 적절한 사용
코드 품질 표준
품질 요구사항:- Type hint
- 문서화
- 코드 스타일
필수: 모든 함수에 대한 완전한 type annotation
수동 formatting 및 linting
코드 formatting 및 linting은 CI/CD를 통해 강제됩니다. 코드가 검사를 통과하도록 커밋하기 전에 이러한 명령을 실행하세요.
1
코드 format
2
Linting 검사 실행
3
변경사항 확인
두 명령 모두 커밋하기 전에 해결해야 할 formatting 또는 linting 문제를 표시합니다.
기여 가이드라인
하위 호환성
중요한 보안 수정을 제외하고 public API에 대한 breaking change는 허용되지 않습니다.major 버전 릴리스에 대한 자세한 내용은 버전 관리 정책을 참조하세요.
안정적인 interface
안정적인 interface
항상 보존:
- 함수 signature 및 parameter 이름
- Class interface 및 method 이름
- Return value 구조 및 type
- Public API의 import 경로
안전한 변경
안전한 변경
허용되는 수정:
- 새로운 optional parameter 추가
- class에 새로운 method 추가
- 동작을 변경하지 않고 성능 개선
- 새로운 module 또는 함수 추가
변경하기 전에
변경하기 전에
- 기존 사용자 코드가 손상될까요?
- 대상이 public인지 확인
-
필요한 경우
__init__.py에서 export되는지 확인 - 테스트에 기존 사용 패턴이 있는지 확인
버그 수정
버그 수정 기여의 경우:1
이슈 재현
버그를 보여주는 최소한의 테스트 케이스를 생성하세요. 관리자 및 다른 기여자가 추가 설정이나 수정 없이 이 테스트를 실행하고 실패를 확인할 수 있어야 합니다
2
실패하는 테스트 작성
수정 없이는 실패할 unit test를 추가하세요
3
수정 구현
문제를 해결하는 데 필요한 최소한의 변경을 수행하세요
4
수정 확인
테스트가 통과하고 회귀가 발생하지 않는지 확인하세요
5
변경사항 문서화
동작이 변경되면 docstring을 업데이트하고, 복잡한 로직에 주석을 추가하세요
새로운 기능
새로운 기능에 대해 높은 기준을 유지하는 것을 목표로 합니다. 일반적으로 새로운 core abstraction, infra 변경, 의존성 변경 또는 새로운 agent/chain에 대한 외부 기여자의 기여는 이에 대한 명확한 필요성을 보여주는 기존 이슈 없이는 수락하지 않습니다. 일반적으로 기능 기여 요구사항은 다음과 같습니다:1
설계 논의
다음을 설명하는 이슈를 열어주세요:
- 해결하려는 문제
- 제안된 API 설계
- 예상 사용 패턴
2
구현
- 기존 코드 패턴 따르기
- 포괄적인 테스트 및 문서 포함
- 보안 영향 고려
3
통합 고려사항
- 기존 기능과 어떻게 상호작용하나요?
- 성능에 영향이 있나요?
- 새로운 의존성이 도입되나요?
보안 가이드라인
보안이 가장 중요합니다. 취약점이나 안전하지 않은 패턴을 절대 도입하지 마세요.
입력 검증
입력 검증
- 모든 사용자 입력 검증 및 sanitize
- template 및 query의 데이터를 적절히 escape
- 사용자 데이터에
eval(),exec()또는pickle을 절대 사용하지 마세요. 이는 임의 코드 실행 취약점으로 이어질 수 있습니다
오류 처리
오류 처리
- 특정 exception type 사용
- 오류 메시지에 민감한 정보 노출 금지
- 적절한 리소스 정리 구현
의존성
의존성
- hard dependency 추가 피하기
- Optional dependency를 최소화
- 보안 문제에 대해 third-party 패키지 검토
테스트 및 검증
로컬에서 테스트 실행
PR을 제출하기 전에 다음 단계를 완료했는지 확인하세요. LangChain과 LangGraph 간에 요구사항이 약간 다릅니다.- LangChain
- LangGraph
1
Unit test
2
Integration test
3
Formatting
4
Type checking
5
PR 제출
branch를 push하고 pull request를 여세요. 제공된 양식 템플릿을 따르세요. closing keyword를 사용하여 관련 이슈를 기록하세요. 제출 후 CI 검사가 통과하는지 기다리고 확인하세요. 검사가 실패하면 즉시 문제를 해결하세요 - 관리자는 합리적인 기간 내에 CI를 통과하지 못하는 PR을 닫을 수 있습니다.
테스트 작성 가이드라인
효과적인 테스트를 작성하기 위해 따라야 할 몇 가지 좋은 관행이 있습니다:- Docstring에서 자연어를 사용하여 테스트 설명
- 설명적인 변수명 사용
- assertion을 철저히 작성
- Unit test
- Integration test
- Mock 사용
도움 받기
가능한 한 접근하기 쉬운 개발자 설정을 갖추는 것이 우리의 목표입니다. 설정하는 데 어려움이 있으면 커뮤니티 slack에서 문의하거나 포럼 게시물을 여세요.이제 LangChain에 고품질 코드를 기여할 준비가 되었습니다!
Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.