개발에 가장 시간이 많이 소요되는 부분 (이 부분만이라도 코딩 에이전트가 해결한다면? 생산성이 많이 좋아질 것)

Challenges in Coding Agents:
- Defining the Environment:
- Agent 가 코드를 실행하고, 테스트, 빌드 할 수 있는 공간
- Agent 가 접근할 수 있는 리소스 범위 설정
- 운영체제, 프로그래밍 언어, 의존 라이브러리, 보안, 버전 호환성, 메모리 및 계산 자원 등 기술 스택을 명확히 설정
- Designing an Observations/Actions:
- Actions: 에이전트가 취할 수 있는 행위(코드 작성, 수정, 테스트 실행, 라이브러리 검색 등)
- Observations: 에이전트가 Actions 을 한 후 수집되는 정보(요구사항, 소스 코드, 에러 메시지, 문맥 등)
- Code Generation:
- 에이전트가 주어진 문제 또는 요구사항에 맞춰 코드를 작성(또는 제안)하는 능력
- File Localization:
- 생성된 코드가 어느 위치, 어떤 파일에 저장되어야 하는지, 또 기존 프로젝트 구조 내에서 어떻게 배치되는지 결정하는 과정
- 수정할 파일을 찾을 수 있는 것.
- 파일 경로, 프로젝트 구조를 어떻게 알릴 것인지
- 파일을 생성/수정/삭제할 때 권한 및 보안 이슈
- 대규모 프로젝트에서 수백/수천 개의 파일이 있을 경우, 빠르고 정확한 파일 검색/참조 방법
- Planning and Error Recovery:
- 단순히 한 번의 코드 생성을 넘어, 코드를 “어떻게” 작성해 나갈지 계획을 세우고, 실행 후 생기는 문제(에러, 빌드 실패, 버그)에 대해 복구 또는 수정하는 절차
- 에이전트가 에러 상황에 빠졌을 때, 어디까지 자동으로 복구를 시도하고, 언제 human-in-the-loop를 요청할지 결정
- Safety:
- 코딩 에이전트가 생성하는 코드가 의도치 않은 보안 취약점이나 악성 행위를 유발하지 않도록 통제하는 것
- 회사 정책, 라이선스, 윤리/법적 규제를 위반하지 않도록 모니터링하고 필터링하는 기능
- 생성된 코드의 보안 점검(Static Analysis, 취약점 스캐너, Lint 등)을 에이전트 단계에서 자동화할 수 있는지
- 문맥에서 민감 정보(키, 인증 정보, 개인정보 등)를 무단으로 사용하거나 노출하는지 필터링
- 잘못된 의도로 에이전트를 사용하지 않도록 권한 관리, 로깅 시스템, 모니터링 등 구축
Coding Agent - Enviroment:
- 이 정도 권한과 작업 환경은 받아야 코딩을 할 수 있을 것.

Benchmark dataset:
- Simple Coding 작업을 할 수 있는지 평가 - HumanEval/MBPP 벤치마크:
- HumanEval은 코드 작성 능력을 평가하기 위해 Python 문제와 테스트 케이스를 제공하며, 모델이 얼마나 정확히 문제를 해결하는지 평가함.
- MBPP는 Python 표준 라이브러리를 활용한 문제를 포함하며, 비교적 간단한 코드 생성 작업을 다룸.
- CoNaLa (Code/Natural Language Challenge), ODEX:
- CoNaLa 벤치마크:
- StackOverflow에서 스크래핑한 데이터를 기반으로 만들어졌음.
- AI 모델이 자연어로 기술된 문제를 이해하고 이에 맞는 코드를 생성하는 능력을 평가하는 것.
- ODEX 벤치마크:
- ODEX는 코드 생성 모델을 평가할 때 실행 기반 평가를 추가한 벤치마크
- 단순히 코드 생성뿐 아니라, 생성된 코드가 실제로 실행 가능한지 확인하는 것.
- 만들어진 코드의 정확성과 실행 가능성을 측정하는 것.
- CoNaLa 벤치마크:
- ARCADE:
- 데이터 과학 워크플로우와 관련된 작업을 평가하기 위해 설계된 벤치마크. 주로 Jupyter Notebook과 같은 데이터 과학 노트북 환경에서 작동하며, 코드를 점진적으로 작성하고 실행할 수 있는 환경을 시뮬레이션 하기 위함.
- 기존 벤치마크는 단일 함수나 스니펫 생성에 중점을 두었지만, ARCADE는 전체 워크플로우에서 코드의 연속성과 문맥 이해를 테스트하기 위함.
- SWEBench:
- SWEBench는 소프트웨어 개발 워크플로우에서 문제 해결 및 코드 수정 작업을 중심으로 한 벤치마크임.
- GitHub에서 실제 이슈(issue)와 관련된 코드베이스를 기반으로 설계되었으며, AI 모델이 이를 바탕으로 Pull Request(PR)를 생성하고 해결 여부를 평가한다.
- SWEBench는 소프트웨어 개발 워크플로우에서 문제 해결 및 코드 수정 작업을 중심으로 한 벤치마크임.
- An Aside: Dataset Leakage:
- 모델이 평가 중에 사용하는 테스트 데이터와 동일하거나 유사한 데이터를 훈련 과정에서 이미 접한 경우 벤치마크 데이터셋에는 높은 성능을 내지만 실제로는 그렇지 못한 경우가 있음.
- ARCADE 벤치마크에서 공개된 데이터를 기반으로 한 벤치마크에서는 모델이 높은 성능을 보이는 경우가 많지만, 새롭게 설계된 데이터사이언스 노트북에서는 성능을 내지 못하는 걸 발견함.
- (벤치마크 데이터 셋으로 과도한 학습으로 overfit 을 만들어낸게 문제)
- 그래서 LiveCodeBench 를 제안하기도 함 ( 모델이 실시간 코드 문제를 해결하는 능력을 평가하는 벤치마크)
- Design2Code:
- Design2Code는 웹사이트 디자인을 기반으로 코드를 생성하는 작업을 평가하는 벤치마크
- Visual Embeddings 을 이용해서 고수준의 시각적인 유사도를 평가하고, 개별 요소(element) 수준에서의 정확도를 Low-Level 에서 평가함.
Performance Metric:
- Pass@K:
- AI 모델이 한 문제에 대해 여러 개의 코드(예제)를 생성했을 때, K개의 시도 중 적어도 하나의 코드가 테스트를 통과할 확률을 나타냄.
- “K개의 예제 중 하나라도 단위 테스트(Unit Test)를 통과하는가?“라는 질문에 대한 성능 척도
- Lexical/Semantic Overlap Metrics:
- Lexical:
- 생성된 코드와 레퍼런스 코드(정답 코드) 간의 텍스트적 유사성을 측정
- Semantic;
- 코드의 의미론적 구조(예: 구문 트리, 데이터 흐름 등)를 기반으로 유사성을 측정
- CodeBERTScore:
- BERT 기반의 언어 모델(BERT)의 변형으로, 코드 평가 메트릭:
- 코드의 구문적 유사도와 흐름 그리고 문맥과 의미를 더 잘 이해하여 평가.
- Lexical:
Coding Agent - Designing Observation/Action Spaces:
- SWE Agent:
- 사용가능한 Tools:
- Navigate Repository
- Search Files
- View Files
- Edit Lines
- 사용가능한 Tools:
- 코드 생성에 사용할 수 있는 많은 정보들:
- Current Code Context
- Decription of issure to fix
- Repository Context
- Open tabs
Coding Agent - File Localization:
- 작성/편집 해야할 파일을 찾는 전략:
- (1) Offload to the User (사용자가 수정할 수 있는 파일의 절대 경로를 모두 프롬프트안에 지정하는 것)
- (2) Prompt the Agent w/ Search Tools (파일을 찾을 수 있도록 하는 도구를 주는 것)
- (3) A-priori Map the Repo (Reposistory 의 Map 을 만들어주는 것, CodeGPT 같은 경우는 Knowledge Graph 를 만들었고, 여기서는 tree-structured map 을 제안함)
- (4) RAG (유사한 코드를 찾는 것.)
Coding Agent - Plan and Error Recovery:
- LLM Generated Plan (CodeR, Chen et al., 2024)
- Multi Agent style method
- 작업 흐름(Task Flow):
- (1) Manager가 문제를 분석하고, 해결 전략(Task Graph)을 계획 (Task Graph는 하위 작업(문제 재현, 문제 위치 식별, 코드 수정 등)으로 구성)
- (2) 문제 재현: Reproducer는 문제를 재현하기 위한 스크립트나 테스트를 생성하고 실행
- (3) 문제 원인 식별: Fault Localizer는 코드베이스를 탐색하여 문제의 원인을 찾음.
- (4) 코드 수정: Editor 가 코드를 수정
- (5) 검증: Verifier 가 해결되었는지 검증
- CoAct (Hou et al., 2024, Planning and Revisiting):
- Agent 가 처음 만들어낸 계획은 실수할 수 있을거임. 잘못된 가정이 있기 때문에.
- 그래서 게획대로 실행을 하지만 잘못된 상황을 만났을 경우 그것에 따른 수정을 하는 Replanning 전략이 엄청 중요함. 이걸 강조하고 싶었다고 함.
- InterCode (Yang et al., 2023, Fixing based on Error Messages):
- Intercode 의 코드 생성 전략은 한번에 코드를 쫙 작성하는 방법이 아닌 코드를 생성해보고 실행해보고 결과를 보고 다시 수정하는 식으로 코드를 생성해보는 작업임.
- Intercode 에서는 Plan-and-Solve 와 ReAct 기반으로 해봤는데 ReAct 가 더 높은 성능을 달성했음.
- 그리고 최근 똑똒한 모델인 GPT-4o 같은 경우는 이런 방식에 그렇게 뛰어나진 않았다고 함. 계속 같은 방법으로 문제를 해결하려고 하는 무한 루프에 빠질 수도 있다고. 그래서 이 점을 기억해야할듯.
Coding Agent - Safety:
- Solution (1) - Sandboxing:
- Openhands 같은 경우는 실행 환경을 Docker 로 제한시켰다고 함.
- Solution (2) - The principle of least privilege:
- Example: GitHub access tokens
- Solution (3) - Post-hoc Auditing:
- 만들어진 코드를 검증해서 안정성 정확성 보안성 등을 확인하는 기법임. 이것도 언어 모델을 사용할 것.