박정기
박정기
🗡️ AI 레전드
🎖️ 마스터 파트너

일은 AI가, 나는 월급 루팡! 나만의 AI 에이전트 개발기 (feat. langgraph & cursor)

이번 프로젝트에서는 LangGraph와 LangStudio를 활용하여 나만의 AI 에이전트를 만들어보았습니다. 코드 작성부터 테스트까지 Cursor를 사용해 단 2시간 만에 모두 완료할 수 있었는데, 그 과정과 결과를 간단히 공유하고자 합니다.

일단 영상 부터 보시죠! (feat. screen studio)

https://youtu.be/N7DhhV6XDJQ

# 소개

이 프로젝트의 목표는 AI 에이전트를 설계하고 구현하여 특정 사용자 질문에 따라 적절한 에이전트를 선택하고, 필요한 정보를 제공하는 것입니다. OpenAI의 GPT-4 모델을 활용해 다양한 문서를 기반으로 유연한 답변을 제공하는 기능을 만들었고, 랭그래프를 통해 그 흐름을 설계했습니다. 이 모든 과정을 Cursor의 도움으로 빠르게 진행할 수 있었습니다.

[ 랭그래프 전체 구조 ]

일단 Cursor에서도 이렇게 코드 설명을 MD 파일로 만들어달라고 가능합니다

검은 화면에 있는 챗봇의 스크린샷
# AI Agent System Documentation

## 시스템 개요

이 시스템은 다목적 AI 에이전트 시스템으로, API 문서와 프로젝트 문서를 기반으로 질문에 답변할 수 있는 지능형 챗봇입니다.

## 주요 컴포넌트

### 1. 에이전트 종류

- **API Agent**: Swagger 문서를 기반으로 API 관련 질문 답변
- **Project Docs Agent**: 프로젝트 문서(.md)를 기반으로 프로젝트 관련 질문 답변
- **General Agent**: 일반적인 대화 및 다른 에이전트들의 협력이 필요한 경우 처리

### 2. 핵심 기능

- **에이전트 선택 메커니즘**: 질문 내용을 분석하여 최적의 에이전트 자동 선택
- **문서 컨텍스트 관리**: Swagger 및 마크다운 문서 자동 로드 및 관리
- **대화 요약**: 6개 이상의 메시지가 쌓이면 자동으로 대화 내용 요약
- **상태 관리**: EnhancedState 클래스를 통한 효율적인 상태 관리

### 3. 워크플로우

```mermaid
graph TD
    A[시작] --> B[에이전트 선택]
    B --> C{선택된 에이전트}
    C -->|API 질문| D[API Agent]
    C -->|프로젝트 질문| E[Project Docs Agent]
    C -->|일반 질문| F[General Agent]
    D --> G{계속?}
    E --> G
    F --> G
    G -->|Yes| H[대화 요약]
    G -->|No| I[종료]
    H --> B
```

## 설정 방법

### 1. 환경 설정

```env
OPENAI_API_KEY=your_api_key
SWAGGER_PATH=./swagger/api-docs.yaml
DOCS_DIRECTORY=./docs
```

### 2. 필요한 패키지

```text
langchain>=0.1.0
langchain-core>=0.2.38,<0.4.0
langgraph>=0.0.10
langchain-openai>=0.0.2
pyyaml>=6.0.1
python-dotenv>=1.0.0
openai>=1.10.0
```

## 사용 예시

```python
# 챗봇 초기화
response = chat("API에서 궁금한게 있습니다...!")

# 프로젝트 문서 질문
response = chat("ZOOM 영상을 유튜브에 업로드하는 방법을 알려주세요.")

# 일반적인 질문
response = chat("이 프로젝트의 목적이 무엇인가요?")
```

## 폴더 구조

```
studio/
├── chatbot.py        # 메인 에이전트 시스템
├── requirements.txt  # 의존성 패키지
├── .env             # 환경 변수
├── swagger/         # API 문서
│   └── api-docs.yaml
├── docs/           # 프로젝트 문서
│   └── *.md
└── langgraph.json  # 그래프 설정
```

## 특징 및 장점

1. **모듈화된 설계**

   - 각 에이전트가 독립적으로 작동
   - 새로운 에이전트 추가가 용이한 구조

2. **컨텍스트 인식**

   - 대화 이력 유지 및 요약
   - 문서 기반 답변으로 정확성 확보

3. **확장성**

   - 새로운 문서 추가 시 자동 로드
   - 다양한 형태의 질문 처리 가능

4. **유지보수성**
   - 명확한 코드 구조
   - 문서화된 설정 및 환경 변수

진행 방법

1. 코드 작성

- LangGraph와 LangStudio 사용: 프로젝트에는 LangGraph의 메시지 상태와 상태 그래프를 활용해 AI 에이전트의 흐름을 설계했습니다. 이를 통해 각 질문에 대해 최적의 에이전트를 선택하고 그에 맞는 답변을 제공하도록 했습니다.

- Cursor로 빠르게 개발: 전체 코드를 작성하는 데에 Cursor를 사용했습니다. 코드 자동 완성 기능 덕분에 코드를 효율적으로 작성하고, 오류를 바로잡을 수 있었습니다.

2. 주요 기능 구현

- 에이전트 선택 기능: 사용자가 질문을 했을 때, API 관련 질문, 프로젝트 문서 관련 질문, 일반적인 질문에 따라 적합한 에이전트를 선택하도록 설계했습니다.

- API 및 프로젝트 문서 연동: Swagger API 문서와 프로젝트 문서를 로드하여 이를 기반으로 답변을 제공할 수 있게 했습니다.

- 대화 요약 기능: 대화가 길어질 경우, 요약하여 이전 대화 내용을 간결하게 관리할 수 있도록 했습니다.

3. 테스트 및 완료

- 각 에이전트가 올바르게 선택되고, API와 프로젝트 문서를 잘 활용해 답변을 제공하는지 테스트했습니다. 모든 테스트를 2시간 내에 마칠 수 있었고, 예상한 대로 잘 작동했습니다.

중간 중간 에러가 나면 Cursor Compose를 통해 에러를 수정했습니다.

또한 가입된 렝스미스에 접속하여 왜 이렇게 결과가 나오는지 확인 가능합니다.

한국어 텍스트 편집기의 스크린샷

추가적으로 렝스미스에서는 토큰을 얼마나 썼고, 얼마나 시간이 걸렸는지도 쉽게 확인해볼 수 있습니다.

한국어 웹사이트 스크린샷

또한 랭스튜디오에서 가장 좋은 기능인 Interrupt 기능은 한 단계마다 멈추어, 어느 노드로 움직이는지 천천히 확인 가능합니다.

에이전트와 프로젝트 간의 대화 스크린샷

# 결과와 배운 점

이번 프로젝트를 통해 LangGraph의 상태 관리LLM을 활용한 에이전트 선택 로직을 깊이 이해할 수 있었습니다. 특히, Cursor를 사용하여 개발 시간을 크게 단축할 수 있었고, 자동 완성 기능이 코드 작성의 정확도와 속도를 높이는 데 큰 도움을 주었습니다.

또한, Swagger와 프로젝트 문서를 자동으로 로드하고 AI 모델이 이를 활용해 답변할 수 있도록 한 점이 사용자 경험을 크게 개선하는 데 기여했습니다.

# 개선할 점

앞으로는 더 많은 문서를 연동하고, 다양한 에이전트를 추가하여 더 복잡한 질문도 처리할 수 있도록 개선할 예정입니다. 또한, LangStudio의 시각적인 디버깅 기능을 활용해 워크플로우를 더욱 최적화할 계획입니다.

추가로, 각 에이전트 간 협업이 필요할 때 효율적인 다중 에이전트 협력 로직을 구현해보고 싶습니다. 이를 통해 다양한 도구와의 연계를 강화하여 사용자에게 더욱 유용한 답변을 제공할 수 있을 것입니다.

# 도움 받은 글

- LangGraph 공식 문서: 상태 그래프 설계와 메시지 상태 관리에 대한 큰 도움을 받았습니다.

- OpenAI Chat Model: GPT-4 모델을 이용해 사용자 질문에 대한 적절한 답변을 생성했습니다.

- Swagger와 프로젝트 문서: API 문서와 프로젝트 관련 정보를 자동으로 로드하고, 이를 바탕으로 답변할 수 있는 기능을 구현하는 데 중요한 역할을 했습니다.

# 마무리

Cursor를 사용해 짧은 시간 안에 프로젝트를 구현하고 테스트까지 완료할 수 있었습니다. 앞으로도 이 AI 에이전트를 더 발전시켜서 실제 업무에 유용하게 활용할 수 있도록 개선해 나가겠습니다.

여러분의 의견이 궁금합니다! 추가 기능이나 개선 아이디어가 있다면 언제든지 공유 부탁드립니다. 😊

11
4개의 답글

👉 이 게시글도 읽어보세요