NestJS로 만드는 AI챗봇 (Feat. warudo)

프로젝트 개요

  • NestJS를 기반으로 한 AI 챗봇 프로젝트
  • Grok AI를 활용한 자연스러운 대화 처리
  • Warudo를 통한 실시간 동작 제어
  • WebSocket을 활용한 양방향 통신

기술 스택

  • NestJS: Node.js 기반의 서버 프레임워크
  • Grok AI: x.ai에서 제공하는 대화형 AI 모델
  • Warudo: WebSocket 기반의 실시간 동작 제어 시스템
  • WebSocket: 실시간 양방향 통신 프로토콜

AI API 설정

constructor(
  private configService: ConfigService,
  private warudoService: WarudoService,
) {
  const grokApiKey = this.configService.get<string>('GROK_API_KEY');
  this.grokClient = new OpenAI({
    apiKey: grokApiKey,
    baseURL: 'https://api.x.ai/v1',
  });
}

 

채팅 시스템 구현

/* chatbot.service.ts - 챗봇 채팅 로직 */
async chat(userMessage: string) {
  this.conversationHistory.push({
    role: 'user',
    content: userMessage,
  });

  const responseLLM = await this.getLLMResponse(this.conversationHistory);
  // 형식에 따른 응답 처리 및 Warudo 메시지 전송
}

/* warudo.service.ts - 와루도 채팅 */
sendMessageToWarudo(message: string) {
  if (this.webSocket && this.webSocket.readyState === WebSocket.OPEN) {
    this.webSocket.send(message);
  }
}

 

테스트

Insomnia?

REST API 및 GraphQL API 테스트를 위한 도구. 쉽게 말해, API 개발 및 디버깅을 도와주는 클라이언트 프로그램이다.

왜 사용하는가?

  1. API 테스트 편리성
    • 백엔드에서 만든 API를 직접 호출해서 요청(Request)과 응답(Response)을 확인 가능.
    • GET, POST, PUT, DELETE 등 다양한 HTTP 메서드를 쉽게 테스트 가능.
  2. 인증(Authentication) 테스트 지원
    • JWT 토큰, OAuth, Basic Auth 등 다양한 인증 방식을 적용해서 API를 호출 가능.
  3. 요청 데이터 저장 및 관리
    • API 요청을 여러 개 저장하고 필요할 때 다시 실행 가능.
    • 프로젝트별로 요청을 정리해서 관리 가능.
  4. GraphQL 지원
    • GraphQL API를 테스트할 때도 사용 가능.
  5. 환경 변수 설정 가능
    • 개발, 스테이징, 운영 등 환경별로 API 엔드포인트(URL)를 쉽게 전환 가능.
  6. 빠른 응답 확인 및 디버깅
    • API 응답을 JSON, XML, HTML 등 다양한 형식으로 볼 수 있어서 디버깅이 쉬움.

Insomnia vs Postman

비슷한 기능을 하는 툴로 Postman도 있지만, Insomnia가 더 가볍고 UI가 단순해서 빠르게 테스트하기 좋다. 반면 Postman은 협업 기능이 강하고 다양한 플러그인을 제공한다.

 

테스트 결과

입력)

{
	"message": "이름이 뭐야?"
}

 

출력)

{
	"message": "나 까먹었어? 나 벨라잖아!",
	"isPaid": false
}

 

warudo 프로그램에서 채팅에 따라 입모양 변화나 포즈 또한 변하지만, 저작권 문제로 이 정도까지만 알아보도록 하자!

 

 

 

 

 

 

etc-image-0