SW 개발
Kotlin, OpenAI LLM, LangChain4j로 인터넷 URL 자동 번역 및 요약 쉘 스크립트 제작하기
지단로보트
2024. 6. 7. 00:30
개요
- 우리는 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를 활용할 수 있게 되었으며, 이미지 인식과 다국어 데이터 대응
성능이 향상되었다.