Skip to content

๐ŸŒ 2025 ์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ PR-Agent ํ”„๋กœ์ ํŠธ

License

Notifications You must be signed in to change notification settings

TaskerJang/pr-agent

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

๐Ÿš€ PR-Agent: AI ๊ธฐ๋ฐ˜ Pull Request ์ž๋™ํ™” ๋„๊ตฌ

๐ŸŽฏ ์†Œ๊ฐœ

2025 ์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ ์•„์นด๋ฐ๋ฏธ(OSSCA) ์ฒดํ—˜ํ˜• ํ”„๋กœ์ ํŠธ๋กœ, Qodo์—์„œ ๊ฐœ๋ฐœํ•œ AI ๊ธฐ๋ฐ˜ Pull Request ์ž๋™ํ™” ๋„๊ตฌ์— ํ…Œ์ŠคํŠธ ๋ฐ ๋ฌธ์„œํ™” ๊ธฐ์—ฌ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

โฐ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„

  • ์ „์ฒด: 2025.3.6 - 2025.5.27 (6์ฃผ)
  • Git ์‹ฌํ™” ๊ณผ์ •: 2025.4.14 - 2025.4.27
  • ์˜คํ”ˆ์†Œ์Šค ์‹ฌํ™” ๋ฉ˜ํ† ๋ง: 2025.4.28 - 2025.5.27

๐Ÿ’ป ๊ธฐ์ˆ  ์Šคํƒ

Python OpenAI GitHub pytest FastAPI Docker AI

๐Ÿ”ง ๊ตฌํ˜„ ๋‚ด์šฉ

1. PR-Agent ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๋ถ„์„

์ฃผ์š” ๋ช…๋ น์–ด

  • /describe: PR์— ๋Œ€ํ•œ ์ž๋™ ์„ค๋ช… ์ƒ์„ฑ ๋ฐ ๋ผ๋ฒจ๋ง
  • /review: ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ ๋ณด์•ˆ ์ทจ์•ฝ์  ๋ถ„์„
  • /improve: ์ฝ”๋“œ ๊ฐœ์„  ์ œ์•ˆ ๋ฐ ์ตœ์ ํ™” ๋ฐฉ์•ˆ ์ œ์‹œ
  • /ask: ํŠน์ • ์งˆ๋ฌธ์— ๋Œ€ํ•œ AI ๊ธฐ๋ฐ˜ ๋‹ต๋ณ€ ์ œ๊ณต

ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง ๋ถ„์„

# AI ๋ชจ๋ธ์—๊ฒŒ ์ „๋‹ฌ๋˜๋Š” ํ”„๋กฌํ”„ํŠธ ๊ตฌ์กฐ ๋ถ„์„
def analyze_prompt_structure():
    """
    - ํšจ๊ณผ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์œ„ํ•œ ํ”„๋กฌํ”„ํŠธ ์ตœ์ ํ™”
    - ์ปจํ…์ŠคํŠธ ์ œํ•œ๊ณผ ํ† ํฐ ๊ด€๋ฆฌ ์ „๋žต
    - ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ PR์—์„œ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ
    """

2. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ ๋ฌธ์„œํ™” ๊ตฌํ˜„

ํ•ต์‹ฌ ๊ธฐ์—ฌ ์‚ฌํ•ญ

def test_clip_tokens_comprehensive():
    """
    21๊ฐœ์˜ ํฌ๊ด„์ ์ธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ตฌํ˜„:
    - ์—ฃ์ง€ ์ผ€์ด์Šค ๊ฒ€์ฆ
    - ์—๋Ÿฌ ์ผ€์ด์Šค ์ฒ˜๋ฆฌ
    - Unicode ๋ฌธ์ž ์ฒ˜๋ฆฌ
    - ๋งค๊ฐœ๋ณ€์ˆ˜ ์กฐํ•ฉ ํ…Œ์ŠคํŠธ
    """
    
def clip_tokens(text: str, max_tokens: int, factor: float = 0.9) -> str:
    """
    ์™„์ „ํ•œ ํ•จ์ˆ˜ ๋ฌธ์„œํ™”:
    
    Args:
        text (str): ํด๋ฆฌํ•‘ํ•  ํ…์ŠคํŠธ
        max_tokens (int): ์ตœ๋Œ€ ํ† ํฐ ์ˆ˜
        factor (float): ์•ˆ์ „ ๊ณ„์ˆ˜ (๊ธฐ๋ณธ๊ฐ’: 0.9)
        
    Returns:
        str: ํด๋ฆฌํ•‘๋œ ํ…์ŠคํŠธ
        
    Examples:
        >>> clip_tokens("Hello world", 5)
        "Hello"
    """

ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€

  1. ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ

    • ์ •์ƒ์ ์ธ ํ…์ŠคํŠธ ํด๋ฆฌํ•‘
    • ๋นˆ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ
    • None ๊ฐ’ ์ฒ˜๋ฆฌ
  2. ์—ฃ์ง€ ์ผ€์ด์Šค ํ…Œ์ŠคํŠธ

    • ๋งค์šฐ ๊ธด ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ
    • ํŠน์ˆ˜ ๋ฌธ์ž ํฌํ•จ ํ…์ŠคํŠธ
    • Unicode ๋ฌธ์ž ์ฒ˜๋ฆฌ
  3. ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฒ€์ฆ

    • ๋‹ค์–‘ํ•œ factor ๊ฐ’ ํ…Œ์ŠคํŠธ
    • ๊ฒฝ๊ณ„๊ฐ’ ํ…Œ์ŠคํŠธ
    • ์ž˜๋ชป๋œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ

3. ๋ฉ”์ธํ…Œ์ด๋„ˆ์™€์˜ ํ˜‘์—… ๊ฒฝํ—˜

# Python ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค ์ ์šฉ
def test_empty_input_text(self):
    """Test that empty input returns empty string."""
    assert clip_tokens("", 10) == ""
    # ๊ฐœ์„ : == None โ†’ is None
    assert clip_tokens(None, 10) is None  # mrT23๋‹˜ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜

๐Ÿ“ฆ ํ”„๋กœ์ ํŠธ ์„ค์ •

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ•

# ์ €์žฅ์†Œ ํฌํฌ ๋ฐ ํด๋ก 
git clone https://github.com/TaskerJang/pr-agent.git
cd pr-agent

# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# ์˜์กด์„ฑ ์„ค์น˜
pip install -r requirements.txt

ํ…Œ์ŠคํŠธ ์‹คํ–‰

# ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‹คํ–‰
pytest tests/unittest/test_clip_tokens.py -v

# ์ „์ฒด ํ…Œ์ŠคํŠธ ์‹คํ–‰
pytest tests/ -v

# ์ปค๋ฒ„๋ฆฌ์ง€ ํ™•์ธ
pytest --cov=pr_agent tests/

๐Ÿ— ๊ฐœ์ธ ๊ธฐ์—ฌ ์˜์—ญ

์ „๋ฌธ ๋ถ„์•ผ

TaskerJang ๊ธฐ์—ฌ ์˜์—ญ/
โ”œโ”€โ”€ ํ…Œ์ŠคํŠธ ์—”์ง€๋‹ˆ์–ด๋ง/        # 21๊ฐœ ํฌ๊ด„์  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ
โ”œโ”€โ”€ ๊ธฐ์ˆ  ๋ฌธ์„œํ™”/              # ์™„์ „ํ•œ ํ•จ์ˆ˜ ๋ฌธ์„œํ™” ๊ตฌํ˜„  
โ”œโ”€โ”€ ์ฝ”๋“œ ํ’ˆ์งˆ ๊ฐœ์„ /           # Python ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค ์ ์šฉ
โ”œโ”€โ”€ ํ•™์Šต ๊ธฐ๋ก ๋ฐ ๊ณต์œ /        # 10ํŽธ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ…
โ””โ”€โ”€ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ ํ”„๋กœ์„ธ์Šค/   # Fork๋ถ€ํ„ฐ PR๊นŒ์ง€ ์™„์ „ ์ •๋ณต

๐Ÿ“š ๊ธฐ์ˆ  ๋ฌธ์„œ

PR-Agent ๋ถ„์„ ์‹œ๋ฆฌ์ฆˆ
  1. PR-Agent ๊ธฐ๋ณธ ์„ค์ • ๋ฐ ์‚ฌ์šฉ๋ฒ• ๋ถ„์„
  2. PR-Agent์˜ describe ๋ช…๋ น์–ด ๋ถ„์„
  3. PR-Agent์˜ describe ๋ช…๋ น์–ด ํ”„๋กฌํ”„ํŠธ ๋ถ„์„
  4. PR-Agent Review ๊ธฐ๋Šฅ ๋ถ„์„
  5. PR-Agent Improve ๊ธฐ๋Šฅ ๋ถ„์„
  6. PR-Agent ์‹ค์Šต
์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ ๊ฐ€์ด๋“œ
  1. PR-Agent ์˜คํ”ˆ์†Œ์Šค์˜ ์ฃผ์š” ์ด์Šˆ์™€ ๊ฐœ์„  ๋ฐฉํ–ฅ
  2. PR-Agent algo ํด๋” ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•œ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌํ•˜๊ธฐ
  3. ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌํ•˜๊ธฐ Fork๋ถ€ํ„ฐ PR๊นŒ์ง€ ์™„์ „ ์ •๋ณต
์‹ฌ์ธต ๋ถ„์„

๐ŸŽ‰ ํ”„๋กœ์ ํŠธ ์„ฑ๊ณผ

๐Ÿš€ Pull Requests

PR Status

๐Ÿ“‹ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ ๋ฌธ์„œํ™” ๊ตฌํ˜„

utils.py clip_tokens ํ•จ์ˆ˜์— 21๊ฐœ์˜ ํฌ๊ด„์ ์ธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ์™„์ „ํ•œ ๋ฌธ์„œํ™”๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ตฌํ˜„ ์‚ฌํ•ญ

  • โœจ 21๊ฐœ ์ข…ํ•ฉ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค
  • ๐Ÿ“š ์™„์ „ํ•œ ํ•จ์ˆ˜ ๋ฌธ์„œํ™”
  • ๐Ÿ” ์—ฃ์ง€ ์ผ€์ด์Šค ๋ฐ ์—๋Ÿฌ ์ฒ˜๋ฆฌ
  • ๐ŸŒ Unicode ๋ฌธ์ž ์ง€์›
  • โœ… 100% ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ์œ ์ง€

๋ฉ”์ธํ…Œ์ด๋„ˆ ํ”ผ๋“œ๋ฐฑ

  • ๐Ÿ’ฌ "Thanks @TaskerJang" - mrT23๋‹˜
  • ๐Ÿ”ง Python ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค ์ ์šฉ (== None โ†’ is None)
  • โšก ์ฝ”๋“œ ํ’ˆ์งˆ ๊ฐœ์„  ์ œ์•ˆ ์ฆ‰์‹œ ์ˆ˜์šฉ ๋ฐ ๋ฐ˜์˜
  • ๐Ÿค ์‹ค์ œ ์˜คํ”ˆ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ ํ˜‘์—… ๊ฒฝํ—˜

๐Ÿ“Š ๊ฐœ์ธ ๊ธฐ์—ฌ ์„ฑ๊ณผ

๊ธฐ์—ฌ ์˜์—ญ ์„ธ๋ถ€ ๋‚ด์šฉ ์„ฑ๊ณผ
๋‹จ์œ„ ํ…Œ์ŠคํŠธ 21๊ฐœ ํฌ๊ด„์  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค โœ… ์™„๋ฃŒ
ํ•จ์ˆ˜ ๋ฌธ์„œํ™” ์™„์ „ํ•œ docstring ๋ฐ ์‚ฌ์šฉ ์˜ˆ์ œ โœ… ์™„๋ฃŒ
์ฝ”๋“œ ํ’ˆ์งˆ Python ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค ์ ์šฉ โœ… ์™„๋ฃŒ
ํ•™์Šต ๊ธฐ๋ก 10ํŽธ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ… โœ… ์™„๋ฃŒ
PR ์„ฑ๊ณต PR #1816 MERGED โœ… ์„ฑ๊ณต

ํ•ต์‹ฌ ์„ฑ๊ณผ

  • ๐Ÿ”ฅ PR #1816 MERGED: utils.py clip_tokens ํ•จ์ˆ˜ ๊ฐœ์„ 
  • ๐Ÿ“š ์™„์ „ํ•œ ๋ฌธ์„œํ™”: ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ์„ ์œ„ํ•œ ์ƒ์„ธ ๊ฐ€์ด๋“œ
  • ๐Ÿงช 21๊ฐœ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค: ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฒ€์ฆ ๋ฐ ์•ˆ์ •์„ฑ ํ™•๋ณด
  • ๐Ÿ“ 10ํŽธ ๋ธ”๋กœ๊ทธ: ์ฒด๊ณ„์  ํ•™์Šต ๊ณผ์ • ๊ธฐ๋ก ๋ฐ ์ง€์‹ ๊ณต์œ 

๐Ÿ“– ์ „์ฒด ํ™œ๋™ ํ›„๊ธฐ

Velog

6์ฃผ๊ฐ„์˜ ์—ด์ •์ ์ธ AI ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ ์—ฌ์ •์„ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ์—์„œ ํ™•์ธํ•ด๋ณด์„ธ์š”!

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ

๐Ÿค– PR-Agent ์›๋ณธ ์ €์žฅ์†Œ ๐Ÿข Qodo ๊ณต์‹ ์‚ฌ์ดํŠธ ๐Ÿ“š Qodo Merge ๋ฌธ์„œ
๐Ÿ”‘ OpenAI API ๐Ÿงช pytest ๋ฌธ์„œ ๐Ÿ Python ๊ณต์‹ ๋ฌธ์„œ

About

๐ŸŒ 2025 ์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ PR-Agent ํ”„๋กœ์ ํŠธ

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.9%
  • Other 0.1%