Categories: Camel프레임워크

[Camel in Action] 19-2. Camel과 AI/LLM 통합 – 지능형 통합 파이프라인 구축

Camel + AI의 가능성

Apache Camel의 강점은 다양한 시스템 통합입니다. 여기에 LLM(Large Language Model)을 연결하면 기존 데이터 파이프라인에 자연어 처리, 분류, 요약 기능을 추가할 수 있습니다. 이메일 자동 분류, 문서 요약, 이상 감지 등 다양한 지능형 통합이 가능합니다.

OpenAI API와 Camel 통합

HTTP 컴포넌트로 OpenAI API를 직접 호출하는 방법입니다.

from("activemq:queue:customer-emails")
  .process(exchange -> {
    String emailContent = exchange.getIn().getBody(String.class);
    String prompt = String.format("""
      다음 고객 이메일을 분석해서 카테고리를 분류해줘.
      카테고리: 불만, 문의, 칭찬, 환불요청
      이메일: %s
      답변은 카테고리 이름만 써줘.
      """, emailContent);
    exchange.getIn().setBody(prompt);
  })
  .setHeader(Exchange.CONTENT_TYPE, constant("application/json"))
  .setHeader("Authorization", simple("Bearer ${env.OPENAI_API_KEY}"))
  .process(exchange -> {
    String prompt = exchange.getIn().getBody(String.class);
    exchange.getIn().setBody(Map.of(
      "model", "gpt-4o-mini",
      "messages", List.of(Map.of("role", "user", "content", prompt))
    ));
  })
  .marshal().json()
  .to("https://api.openai.com/v1/chat/completions?bridgeEndpoint=true")
  .unmarshal().json(JsonNode.class)
  .process(exchange -> {
    JsonNode response = exchange.getIn().getBody(JsonNode.class);
    String category = response.at("/choices/0/message/content").asText();
    exchange.getIn().setHeader("emailCategory", category);
  })
  .toD("activemq:queue:${header.emailCategory}-emails");

LangChain4j Camel 컴포넌트 활용

Camel 4.x의 camel-langchain4j 컴포넌트를 사용하면 더 쉽게 LLM을 통합합니다.

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-langchain4j-chat</artifactId>
</dependency>

// 라우트에서 직접 LLM 호출
from("direct:summarize")
  .to("langchain4j-chat:myModel?chatOperation=CHAT_SINGLE_MESSAGE")
  .log("요약: ${body}");

RAG(Retrieval Augmented Generation) 파이프라인

사내 문서를 기반으로 질문에 답하는 RAG 시스템을 Camel으로 구현합니다.

// 1. 문서 인덱싱 파이프라인
from("file:documents?recursive=true")
  .to("tika:parse")          // 텍스트 추출
  .split(body().tokenize("

")) // 청크 분할
  .to("langchain4j-embeddings:vectorDB") // 벡터 DB에 저장

// 2. 질문 답변 파이프라인
from("direct:askQuestion")
  .to("langchain4j-embeddings:vectorDB?operation=search") // 유사 문서 검색
  .process(exchange -> {
    String question = exchange.getIn().getHeader("question", String.class);
    String context = exchange.getIn().getBody(String.class);
    exchange.getIn().setBody(
      "다음 문서를 참고해서 질문에 답해줘.
문서: " + context + "
질문: " + question);
  })
  .to("langchain4j-chat:gpt4");

이상 감지 파이프라인

로그나 메트릭 데이터에서 이상을 LLM으로 감지하는 패턴입니다.

from("kafka:system-logs")
  .aggregate(constant(true), new GroupedBodyAggregationStrategy())
    .completionTimeout(60000) // 1분간 로그 수집
  .process(exchange -> {
    String logs = exchange.getIn().getBody(String.class);
    exchange.getIn().setBody(
      "다음 시스템 로그에서 이상 징후를 찾아줘. " +
      "이상하면 '이상 감지:' 로 시작하는 설명을, 정상이면 '정상'만 답해줘.
" + logs);
  })
  .to("langchain4j-chat:claude")
  .filter(body().startsWith("이상 감지:"))
    .to("activemq:queue:alerts");

zerg96

Share
Published by
zerg96

Recent Posts

재택근무 종말이 온다? AI 감시 소프트웨어가 사무실을 부활시키는 진짜 이유

AI 감시 소프트웨어가 재택근무 시대를 끝내고 있다. 직원의 키스트로크·화면·표정까지 추적하는 기술의 실체와, 한국 직장인이 알아야…

2시간 ago

정보보안기사 실기 합격을 가르는 10문제, 로그 분석부터 RSA 계산까지 풀이 포함

정보보안기사 실기는 개념을 아는 것보다 로그를 읽고, 규칙을 쓰고, 계산하는 힘에서 점수가 갈립니다. 이번 글은…

3시간 ago

호르무즈에서 2주간 선박 24척 피격, 원유 수송은 전쟁 전보다 43% 줄었다

호르무즈 해협 뉴스는 이제 '또 공격이 있었다'보다 '얼마나 늘었나'를 봐야 합니다. 이투데이가 FT와 영국해사무역기구(UKMTO) 등을…

3시간 ago

추석 연휴에 뚫린 은행들, 해외 법인 보안망까지 다시 짜는 이유

이번 추석 연휴, 은행들은 쉬지 못했습니다. 연휴 기간 금융권에서 대규모 개인정보 유출 사고가 터졌기 때문입니다.…

6시간 ago

서울 집값은 11% 올랐는데 거래는 17% 줄었다, 토허제 1년의 역설

"집 못 팔게 막으면 값이 내려가겠지." 서울 전역이 토지거래허가구역으로 묶이던 1년 전, 이런 기대가 있었습니다.…

6시간 ago

코스피 5연속 급락 뒤 2% 반등, 외국인·기관이 받쳤고 코스닥은 제자리

다섯 거래일 연속 밀린 코스피가 오늘 아침 크게 반등했습니다. 오전 9시 12분 기준 6,165.02로 전…

6시간 ago