티스토리 뷰

개요

  • 우리는 LLM의 시대에 살고 있다. LLM을 응용하여 생산성을 향상시켜주는 방법과 툴이 홍수처럼 공개되고 있다. 이번 글에서는 리눅스 쉘에서 Kotlin Script, LangChain4j를 이용하여 인터넷 글을 광고 필터링 후 한글로 번역하고 요약까지 해주는 스크립트를 작성해본다.

스크립트 기능

  • 아규먼트로 인터넷 URL을 전달한다.
  • 인터넷 URL에서 광고 컨텐츠 및 불필요한 컨텐츠를 제거하고 글의 내용만 한글로 번역하여 Markdown 형식으로 출력한다.
  • 마지막으로 글 요약을 출력한다.

사전 준비물

  • OpenAI API Key

Kotlin 설치

  • SDKMAN을 이용하여 Kotlin을 설치한다.
# SDKMAN 설치
$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"

# Kotlin 설치
$ sdk install kotlin

# 마크다운 콘솔 뷰어 Glow 설치
$ brew install glow

URL to Text 쉘 스크립트 제작

$ nano url2text.main.kts
#!/usr/bin/env kotlin

// LangChain4j 라이브러리를 임포트한다.
@file:DependsOn("dev.langchain4j:langchain4j:0.31.0", "dev.langchain4j:langchain4j-open-ai:0.31.0")

import dev.langchain4j.data.document.Document
import dev.langchain4j.data.document.loader.UrlDocumentLoader
import dev.langchain4j.data.document.parser.TextDocumentParser
import dev.langchain4j.data.document.transformer.HtmlTextExtractor
import dev.langchain4j.data.message.AiMessage
import dev.langchain4j.data.message.SystemMessage
import dev.langchain4j.model.openai.OpenAiChatModel
import dev.langchain4j.model.output.Response
import java.time.Duration
import kotlin.system.exitProcess

// 아규먼트 전달 여부를 확인 후 안내 메시지를 출력하고 종료한다.
val params = args
if (params.isEmpty()) {
    println("""
Internet URL to Text Tool 0.1 by Tae-hyeong Lee

Usage: url2text.main.kts {url}

Description:
  The 'url2text' command fetches the content from a given internet URL, translates it into Korean, and provides a summary of the translated content.

Example:
  url2text.main.kts https://github.com/langchain-ai/langchain

Note:
Ensure the URL is a valid internet address for accurate translation and summarization.
   """.trimIndent())

    exitProcess(1)
}

// LangChain4j를 이용하여 HTML을 Text로 변환한다.
val url = params[0]
val htmlDocument: Document = UrlDocumentLoader.load(url, TextDocumentParser())
val textDocument: Document = HtmlTextExtractor().transform(htmlDocument)

// LangChain4j OpenAI GPT-4o LLM 오브젝트를 생성한다.
val chatModel: OpenAiChatModel = OpenAiChatModel.builder()
    .apiKey("{your-openai-api-key}")
    .timeout(Duration.ofSeconds(120))
    .modelName("gpt-4o-2024-05-13")
    .temperature(0.3)
    .topP(0.3)
    .build()

// LLM에게 글 정제와 번역 및 요약을 요청한다.
val aiMessage: Response<AiMessage> = chatModel.generate(
    SystemMessage(
        """
당신은 인터넷 글을 읽고 한국어로 번역해주는 어시스턴트야. 인터넷 글은 아래 context를 참고해서 대답해주고 아래 내용을 준수해야해.

1. 특정 제품을 홍보하는 등의 광고성 정보 및 헤더, 푸터, 메뉴 정보는 모두 제거하고, 글의 실제 내용만 추출해서 정확히 번역해줘.
2. 번역 결과는 제목과 각 단락을 적절히 판단하여 Markdown 형식으로 변환해줘.
3. 번역이 끝난 후에는 전체 글에서 핵심 내용만 한국어로 요약해줘. 아래 형식을 지켜줘.

# 글 원본
원본 내용

# 글 요약
요약 내용

context: \\\
$textDocument
\\\
    """.trimIndent()
    )
)

// LLM 처리 결과를 출력한다.
println(aiMessage.content().text())
exitProcess(0)

실행 예

  • 이제 작성한 스크립트를 이용하여 실제 일본어로 된 신문 기사를 영어로 번역해보자.
# 일본어 신문 기사 번역 및 요약 실행
$ ./url2text.main.kts https://news.yahoo.co.jp/articles/f2278281e65df486a61d105184fcd4e977c49601 > article.md

# 실행 결과 출력
$ glow article.md

## 전통총연, 기업용 ChatGPT 솔루션 "Know Narrator"에 최신 LLM 모델 "GPT-4o" 적용 시작

  2023년 6월 6일 (목) 8:01 배포

  주식회사 전통총연은 5일, 마이크로소프트가 제공하는 Azure OpenAI Service를 활용해 개발한 기업용 ChatGPT 솔루션 "Know
  Narrator"에 "GPT-4o"를 적용하고 제공을 시작했다고 발표했다. 이를 통해 기존 모델과 비교해 약 2배의 속도로 더 높은
  정확도의 생성 AI를 활용할 수 있게 되었다고 한다.

  Know Narrator는 ChatGPT 환경을 기업 내에 구축하고 그 활용을 촉진하는 솔루션이다. 지금까지 Know Narrator는 최신 LLM
  모델을 탑재해왔으며, 사용자 채팅 기록을 분석해 더 효율적인 이용 방법을 제안하는 "Know Narrator Insight", ChatGPT가
  사내 문서를 참조해 답변을 생성할 수 있게 하는 "Know Narrator Search", API를 통해 다른 시스템과 연계할 수 있는 "Know
  Narrator API"를 독자적으로 개발해왔다.

  이번 GPT-4o의 적용 시작으로, 출력 속도는 질문 후 답변이 돌아오는 시간이 기존 모델과 비교해 절반 이하로 단축되었다.
  또한, 이미지 인식의 정확도가 향상되어 기존 모델에서는 어려웠던 일본어 손글씨 읽기가 가능해졌다.

  더 나아가, GPT-4o는 다국어 데이터 대응이 강화되어 Know Narrator Search에서도 일본어 문서에 대한 읽기 및 답변 성능이
  향상되었다.

  전통총연은 앞으로도 Know Narrator의 기능 확충을 도모하고, 생성 AI의 실업무 적용과 사회적 보급을 추진해 나갈 것이라고
  밝혔다.

## 글 요약

  전통총연은 기업용 ChatGPT 솔루션 "Know Narrator"에 최신 LLM 모델 "GPT-4o"를 적용하여 제공을 시작했다. 이를 통해 기존
  모델보다 약 2배 빠른 속도로 더 높은 정확도의 생성 AI를 활용할 수 있게 되었으며, 이미지 인식과 다국어 데이터 대응
  성능이 향상되었다.
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함