AI 어시스턴트 스택
FastRuby.io는 빠르고 쉽게 구축하고 마케팅 팀이 활용할 수 있는 내부 도구를 목표로 다음과 같은 기술 스택을 선택했습니다.
* Sinatra: 마케팅 팀과의 간단한 인터페이스 구축
* pgvector: 아티클 요약의 벡터 임베딩 저장 및 쿼리
* Langchain.rb: 임베딩 모델 및 LLM과의 상호작용, 워크플로우 관리
* OpenAI ada-002
: 고품질 텍스트 임베딩 생성
* OpenAI gpt-40
: 대규모 언어 모델(LLM)
작동 방식
팀원들이 Slack 명령어를 통해 링크를 제안하면 AI 어시스턴트가 다음 단계를 수행합니다.
1. 기사 HTML 콘텐츠 가져오기
2. nokogiri
를 사용하여 제목 및 주요 콘텐츠 추출
3. 불필요한 요소 제거를 위한 콘텐츠 정리
4. ada-002
모델을 사용하여 콘텐츠를 벡터 임베딩으로 변환
5. 제목, 콘텐츠, 벡터를 pgvector
를 통해 PostgreSQL 데이터베이스에 저장
6. 요약 생성 프로세스 트리거
요약 생성 및 검토 전략
기사가 추가되면 gpt-40
모델을 사용하여 즉시 요약을 생성합니다.
1. 예시 검색: pgvector
를 활용한 코사인 유사도 검색으로 데이터베이스에서 이전에 생성된 요약 예시 3개를 검색합니다.
ruby
def fetch_examples(article)
examples = article.nearest_neighbors(:embedding, distance: "cosine").limit(3)
examples.map(:summary)
end
2. 초안 생성: 기사 내용과 검색된 예시를 기반으로 초안 요약을 생성합니다. 이때 특정 JSON 형식의 프롬프트 구조를 사용합니다.
3. 초안 검토: 생성된 초안을 예시 및 지침과 비교하여 FastRuby.io의 스타일과 톤에 부합하는지 검토합니다. 검토 프롬프트는 승인 여부(approved
)와 필요시 피드백(feedback
), 수정된 요약(revised_summary
)을 반환합니다.
4. 반복: generate_summary
함수는 max_attempts
횟수만큼 generate
및 review
단계를 반복하여 최종 요약을 도출합니다.
요약 재생성
마케팅 팀은 생성된 요약이 적합하지 않을 경우, 인터페이스에서 피드백을 제공하고 LLM의 temperature
를 조절하여 요약을 쉽게 재생성할 수 있습니다. 재생성 과정은 초기 생성과 유사하지만, 마케팅 팀의 피드백을 직접 프롬프트에 포함하며, 검토 단계는 생략됩니다.