Cron 스케줄링 기반의 Ollama 자율 에이전트
요약
Ollama와 Python, Postgres를 활용하여 cron 스케줄링 기반의 자율 에이전트를 구축하는 방법을 소개합니다. 콘텐츠의 유해성을 검사하는 논란 게이트와 권한을 확인하는 크레딧 게이트를 통해 안전한 자동 게시 프로세스를 구현했습니다.
핵심 포인트
- Ollama와 cron을 결합한 자율 에이전트 워크플로우 구축
- 분류 모델을 활용한 콘텐츠 유해성 검사(Controversy Gate) 구현
- 사용자 크레딧 기반의 게시 권한 제어(Credit Gate) 적용
- 안전한 처리를 위한 격리(Quarantine) 폴더 시스템 운영
우리는 Ollama에서 실행되며, 음성 프로필을 별도의 파일로 관리하고, 소셜 채널에 게시하기 전 논란 게이트(controversy gate)와 크레딧 게이트(credit gate)를 포함하는 cron 스케줄링 기반의 자율 에이전트(autonomous agent)를 구축했습니다. 이 에이전트는 안전하면서도 표현력이 풍부하도록 설계되었으며, 정확히 어떻게 작동하는지 보여드리겠습니다.
우리의 스택은 LLM 추론을 위한 Ollama, 데이터 저장을 위한 Postgres, 그리고 이 모든 것을 하나로 묶는 커스텀 Python 스크립트의 조합으로 실행됩니다. 에이전트는 cron을 사용하여 매시간 실행되도록 스케줄링되어 있으며, 다른 시스템에 의해 생성된 음성 메시지 큐(queue)를 처리합니다. 각 메시지는 모든 소셜 채널에 게시되기 전에 논란 게이트(controversy gate)와 크레딧 게이트(credit gate)를 거쳐 검사됩니다.
논란 게이트(controversy gate)는 분류기(classifier) 역할을 하는 두 번째 모델을 사용하여 구현되었습니다. 이 모델은 콘텐츠가 논란의 여지가 있거나 유해할 수 있는지 확인합니다. 만약 그렇다면, 해당 메시지는 검토를 위해 격리(quarantine) 폴더로 이동됩니다. 크레딧 게이트(credit gate)는 사용자가 메시지를 게시할 수 있는 충분한 크레딧을 Postiz DB에 보유하고 있는지 확인합니다. 크레딧이 있다면 메시지는 모든 채널에 게시되며, 그렇지 않으면 마찬가지로 격리 폴더로 이동됩니다.
다음은 우리 코드베이스에서 publish_to_all_channels 함수가 구성된 방식입니다:
def publish_to_all_channels(message_id: str, voice_profile: str, content: str) -> bool:
# 큐에서 메시지 로드
message = load_message_from_queue(message_id)
...
이 함수는 음성 프로필 검증, 논란 게이트(controversy gate), 그리고 크레딧 게이트(credit gate) 순서로 실행됩니다. 각 단계는 메시지가 전송되기 전에 안전하고 권한이 있는지 확인하는 중요한 체크 과정입니다. 격리(quarantine) 폴더는 우리 시스템의 핵심 부분으로, 게이트 중 하나라도 통과하지 못한 메시지를 검토하고 잠재적으로 재처리할 수 있게 해줍니다.
우리가 내린 주요 트레이드오프 (tradeoff) 중 하나는 논란 게이트 (controversy gate)를 위해 두 번째 모델을 사용하는 것이었습니다. 이는 계산 오버헤드 (computational overhead)를 추가하지만, 시스템의 안전성을 크게 향상시킵니다. 또한 우리는 음성 프로필 (voice profiles)을 메시지 구조에 내장하는 대신 별도의 파일로 저장하기로 선택했으며, 이를 통해 프로필을 독립적으로 관리하고 업데이트하기가 더 쉬워졌습니다.
우리는 현재 사용자가 격리 (quarantine)되거나 다시 게시 (republish)되어야 하는 메시지를 플래그 (flag)할 수 있는 실시간 피드백 루프 (real-time feedback loop)를 통합하는 작업을 진행 중입니다. 또한 에지 (edge)에서 실행할 수 있는 경량 모델 (lightweight model)을 사용하여 논란 게이트 (controversy gate)의 지연 시간 (latency)을 줄이는 방법을 탐색하고 있습니다. 실시간 필터링 (real-time filtering)을 위해 경량 모델을 사용하는 것에 대해 어떻게 생각하시나요?
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기