2024년 2월 27일 화요일

생성AI 기반 코딩 에이전트 개발하기

 이 글은 GitHub Copilot과 같은 생성AI 기반 코딩 에이전트 개발방법을 간단히 정리한다.

CODE LLAMA 개념도

머리말
Code LLAMA는 코드 작업에 특화된 LLAMA2 기반 기술로, 커뮤니티 라이센스로 릴리즈되었다. 코드 라마는 라마2 기반으로 5,000억 토큰 코드 데이터를 학습하였다. 파이썬, 자연어 명령어를 이해할 수 있고, 미세 조정을 통해 성능을 개선했다. 

파이썬, C++, JAVA, PHP. C#, TypeScript, Bash 코드 생성을 지원한다. 7B, 13B 모델을 제공하며, 16k 컨텍스트 길이를 학습하였다. 코드 라마는 위치 임베딩을 을 스케일링할 수 있는 RoPE가 적용되었다. 
코드 학습 예시

라마2를 이용해 인터뷰 프로그래밍 질문 항목을 만들고, 코드 라마를 통해 테스트를 수행해 평가되었다. 

이 글은 다음 개발환경에서 동작되었다. 
  • NVIDIA GPU (Over 28 GB RAM), CUDA 12.1, PyTorch 2.1.2+cu121 (link)
이 글은 학습모델을 최적화하기 위해, 4비트 양자화를 사용해, 크기를 줄인 모델을 사용한다.
4비트 양자화 개념도

코드 라마 사용 방법
4.33 버전부터는 학습 및 추론 예제, 안전한 텐서 포맷(safetensors), 4비트 양자화, 파라메터 미세조정(PEFT), 모델 생성 지원 도우, 배포 등 기능이 트랜스포머 라이브러리에 추가되었다. 다음과 같이 최신 버전을 설치한다.
pip install --upgrade transformers
pip install accelerate peft bitsandbytes transformers trl

다음은 코드 라마 모델을 로딩하고, 트랜스포머 파이프라인을  생성한 후, 기본적인 함수 정의를 생성하는 예제이다. 입력하고 실행해 본다.
from transformers import AutoTokenizer
import transformers
import torch

tokenizer = AutoTokenizer.from_pretrained("codellama/CodeLlama-7b-hf")
pipeline = transformers.pipeline(
    "text-generation",
    model="codellama/CodeLlama-7b-hf",
    torch_dtype=torch.float16,
    device_map="auto",
)

sequences = pipeline(
    'def fibonacci(',
    do_sample=True,
    temperature=0.2,
    top_p=0.9,
    num_return_sequences=1,
    eos_token_id=tokenizer.eos_token_id,
    max_length=100,
)
for seq in sequences:
    print(f"Result: {seq['generated_text']}")

다음은 그 결과를 보여준다.

이 경우 70억 파라메터를 가진 모델이기 때문에, 최소한 28GB이상 GPU RAM이 필요하다(4바이트일경우 = 7 x 10^9 x 4 bytes. 8바이트일 경우 56GB). 

라마2 미세 조정 방법은 다음 링크를 참고한다. 

Langchain과 Langgraph 기반 code assistant
LangGraph는 워크플로우를 정의하고 반복적인 수정을 가능하게 함으로써 역할을 한다. 다음과 같은 구조로 LangGraph를 만든다.
참고로 LangGraph는 다음 서비스에 사용된다. 
  • RAG 파이프라인 개선: LangGraph는 순환 그래프 구조로 RAG를 확장할 수 있다. 피드백 루프를 도입하여 검색된 개체의 품질을 평가할 수 있으며, 필요한 경우 쿼리를 개선하고 프로세스를 반복할 수 있다.
  • 다중 에이전트 워크플로: LangGraph는 다중 에이전트 워크플로를 지원하도록 설계되었다. 이는 더 작은 하위 작업으로 나뉘어진 복잡한 작업을 해결하는 데 중요하다. 공유 상태와 서로 다른 LLM 및 도구를 가진 여러 에이전트가 협업하여 단일 작업을 해결할 수 있다.
  • Human-in-the-loop: LangGraph에는 Human-in-the-loop 워크플로를 기본적으로 지원한다. 즉, 사람이 다음 노드로 이동하기 전에 상태를 검토할 수 있다.
  • 계획 에이전트(Planning Agent): LangGraph는 계획 에이전트를 구축하는 데 적합하며, LLM 플래너는 사용자 요청을 계획 및 분해하고, 실행자는 툴과 함수를 호출하며, LLM은 이전 출력을 기반으로 답변을 합성한다.
  • 멀티모달 에이전트: LangGraph는 비전 지원 웹 내비게이터 와 같은 멀티모달 에이전트를 구축할 수 있다.


마무리
코딩에 대한 생성 AI 모델 테스트는 일반적으로 HumanEval 데이터세트에서 벤치마킹된다. 이 데이터세트는 모델 함수 서명과 스트링이 제공되며, 함수 본문을 작성하는 프로그래밍 과제로 구성된다. 생성된 코드는 미리 정의된 단위 테스트 세트를 실행해 검증한다. 그 결과 얼마나 많은 테스트를 통과했는 지 비율이 리포트된다. 

다음은 그 결과 리더보드 평균 점수를 보여준다. 

레퍼런스
부록. Text to SQL 아키텍처
모델 아키텍처(참고. Text to SQL)




댓글 없음:

댓글 쓰기