2.1.5. MessagesPlaceholder

MessagesPlaceholder는 LangChain에서 대화 기반 애플리케이션을 개발할 때 중요한 구성 요소 중 하나로, 특히 대화 기록(Conversation History)이나 동적으로 생성되는 메시지를 처리할 때 유용합니다.

동적 대화 관리의 핵심

LangChain은 대화형 AI 애플리케이션 개발을 위한 강력한 프레임워크로, 대화 흐름을 자연스럽게 관리할 수 있는 도구들을 제공합니다. 그중 MessagesPlaceholder는 대화 기록이나 동적으로 추가되는 메시지를 처리하는 데 핵심적인 역할을 합니다.

MessagesPlaceholder는 LangChain의 langchain_core.prompts 모듈에 포함된 클래스입니다. 이 클래스는 프롬프트 템플릿(Prompt Template) 내에서 동적으로 삽입되는 메시지 리스트를 예약된 공간으로 정의합니다. 주로 대화형 애플리케이션에서 대화 기록(예: 사용자 입력과 AI 응답의 히스토리)을 처리하거나, 특정 변수에 따라 메시지를 유연하게 추가할 때 사용됩니다.

MessagesPlaceholder의 핵심 기능은 다음과 같습니다:

  • 동적 메시지 관리: 대화 기록이나 특정 메시지를 런타임에 삽입할 수 있도록 플레이스홀더를 제공합니다.
  • 유연한 프롬프트 설계: 정적인 텍스트뿐만 아니라 동적으로 변하는 대화 흐름을 프롬프트에 통합할 수 있습니다.
  • 대화 기록 통합: HumanMessage, AIMessage, SystemMessage 등 다양한 메시지 타입을 체계적으로 관리합니다.

언제 사용해야 할까?

MessagesPlaceholder는 다음과 같은 상황에서 특히 유용합니다:

  • 챗봇에서 사용자와의 대화 기록을 기반으로 응답을 생성할 때.
  • 대화 흐름에 따라 시스템 메시지나 추가적인 맥락을 동적으로 삽입해야 할 때.
  • 여러 사용자 입력을 하나의 프롬프트에 통합해 처리할 때.

MessagesPlaceholder의 기본 구조

MessagesPlaceholder는 PromptTemplate 내에서 특정 변수 이름으로 정의되며, 해당 변수에 메시지 리스트가 런타임에 바인딩됩니다. 기본적인 구조는 다음과 같습니다:

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

prompt = ChatPromptTemplate.from_messages([
    ("system", "당신은 도움이 되는 AI 어시스턴트입니다. 사용자의 질문에 친절하고 정확하게 답변하세요."),
    MessagesPlaceholder(variable_name="chat_history"),
    ("human", "{user_input}")
])

위 코드에서:

  • MessagesPlaceholder(variable_name=”chat_history”)는 chat_history라는 이름의 변수에 대화 기록(메시지 리스트)이 삽입될 공간을 예약합니다.
  • ChatPromptTemplate.from_messages는 시스템 메시지, 대화 기록, 사용자 입력을 순서대로 조합합니다.

주요 파라미터

  • variable_name: 플레이스홀더에 바인딩될 변수의 이름. 이 이름은 나중에 메시지 리스트를 전달할 때 사용됩니다.
  • optional (선택 사항): True로 설정하면 해당 플레이스홀더가 비어 있어도 프롬프트가 정상적으로 동작합니다. 기본값은 False입니다.

MessagesPlaceholder 사용 예제

이제 MessagesPlaceholder를 실제로 사용하는 몇 가지 예제를 살펴보겠습니다.

예제 1: 대화 기록을 포함한 챗봇

사용자와의 대화 기록을 기반으로 응답하는 챗봇을 구현한다고 가정해 보겠습니다. 아래는 MessagesPlaceholder를 활용한 간단한 구현입니다.

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessage, AIMessage
from langchain_ollama import ChatOllama

# 프롬프트 템플릿 정의
prompt = ChatPromptTemplate.from_messages([
    ("system", "당신은 친절한 여행 가이드입니다. 사용자의 질문에 맞춰 여행 정보를 제공하세요."),
    MessagesPlaceholder(variable_name="chat_history"),
    ("human", "{user_input}")
])

# LLM 모델 초기화
llm = ChatOllama(model="exaone3.5", temperature=0.7)

# 대화 기록 초기화
chat_history = [
    HumanMessage(content="서울에서 가볼 만한 곳을 추천해 주세요."),
    AIMessage(content="서울에는 경복궁, 북촌 한옥마을, 남산타워 등이 인기 있습니다. 어떤 분위기를 원하시나요?"),
]

# 사용자 입력
user_input = "역사적인 장소가 좋습니다."

# 프롬프트에 변수 바인딩
chain = prompt | llm
response = chain.invoke({
    "chat_history": chat_history,
    "user_input": user_input
})

print(response.content)
역사 애호가님을 위한 서울 여행 추천지 몇 군데를 소개해 드릴게요!

경복궁: 조선시대 왕궁으로, 웅장한 건축물과 아름다운 정원을 자랑합니다. 궁궐 안을 둘러보며 역사 속으로 시간 여행을 떠나보세요! 특히 경복궁 야간 개장 기간에는 특별한 야경을 감상할 수 있어요.
창덕궁: 경복궁과 함께 조선시대 왕궁 중 하나로, 자연과 조화를 이룬 아름다운 정원이 특징입니다. 후원은 꼭 방문해야 할 곳으로, 조선시대 왕들의 휴식처였던 곳입니다.
남산 한옥마을: 전통 한옥들이 모여 있는 곳으로, 고즈넉한 분위기 속에서 역사를 느낄 수 있습니다. 한복 대여도 가능하니, 전통 의상을 입고 사진도 남겨보세요!
세종대왕릉: 조선시대 넷째 왕 세종대왕의 무덤으로, 역사적 의미가 매우 깊습니다. 웅장한 무덤 양식과 주변 자연환경을 함께 감상할 수 있습니다.
국립중앙박물관: 한국 역사와 문화를 한눈에 담을 수 있는 곳입니다. 다양한 유물 전시와 특별전시를 통해 깊이 있는 역사 여행을 경험해보세요!

어떤 장소에 가장 관심이 있으신가요? 좀 더 자세히 알려주시면 맞춤 추천을 해드릴 수 있습니다! 😊

이 예제에서 MessagesPlaceholder는 chat_history 변수에 저장된 대화 기록을 프롬프트에 동적으로 삽입하여, LLM이 이전 대화 맥락을 고려한 응답을 생성하도록 합니다.

예제 2: 동적으로 시스템 메시지 추가

MessagesPlaceholder는 대화 기록뿐만 아니라 특정 조건에 따라 시스템 메시지를 추가하는 데도 사용할 수 있습니다. 예를 들어, 사용자의 언어 설정에 따라 시스템 메시지를 동적으로 변경하는 경우를 살펴보겠습니다.

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import SystemMessage
from langchain_ollama import ChatOllama

# 언어별 시스템 메시지
def get_system_message(language):
    if language == "ko":
        return SystemMessage(content="당신은 한국어로 대화하는 AI입니다. 자연스럽고 친절하게 답변하세요.")
    elif language == "en":
        return SystemMessage(content="You are an AI that communicates in English. Respond naturally and kindly.")
    return SystemMessage(content="You are a helpful AI assistant.")

# 프롬프트 템플릿 정의
prompt = ChatPromptTemplate.from_messages([
    MessagesPlaceholder(variable_name="system_message"),
    MessagesPlaceholder(variable_name="chat_history"),
    ("human", "{user_input}")
])

# LLM 모델 초기화
llm = ChatOllama(model="exaone3.5")

# 대화 기록 및 입력
chat_history = []
user_input = "안녕하세요! 오늘 기분이 어때요?"
system_message = [get_system_message("ko")]

# 프롬프트 실행
chain = prompt | llm
response = chain.invoke({
    "system_message": system_message,
    "chat_history": chat_history,
    "user_input": user_input
})

print(response.content)
안녕하세요! 저는 인공지능이기 때문에 감정을 직접 느끼지는 않지만, 오늘 당신과 대화할 수 있어서 정말 기쁩니다. 어떻게 도와드릴까요? 기분이 좋으시다면 더욱 재미있는 이야기나 도움이 필요한 정보를 함께 나누는 것도 좋을 것 같아요! 어떤 활동을 원하시나요?

이 예제에서는 MessagesPlaceholder를 사용해 시스템 메시지를 동적으로 삽입했습니다. 이를 통해 언어 설정이나 사용자 선호도에 따라 프롬프트를 유연하게 조정할 수 있습니다.

MessagesPlaceholder 활용 시 고려 사항

MessagesPlaceholder는 강력하지만, 올바르게 사용하기 위해 몇 가지 주의할 점이 있습니다.

대화 기록의 크기 관리

대화 기록이 길어질수록 LLM의 토큰 제한에 영향을 미칩니다. 따라서 다음과 같은 전략을 고려하세요:

  • 최근 대화만 유지: 예를 들어, 최근 5개의 메시지만 chat_history에 포함.
  • 요약 사용: LangChain의 ConversationSummaryMemory를 활용해 긴 대화 기록을 요약.
  • 토큰 모니터링: LLM 호출 시 사용된 토큰 수를 모니터링해 제한을 초과하지 않도록 관리.

메시지 타입 일관성

MessagesPlaceholder에 삽입되는 메시지는 HumanMessage, AIMessage, SystemMessage 등 LangChain의 메시지 클래스 인스턴스여야 합니다. 일반 문자열 리스트를 직접 삽입하면 오류가 발생할 수 있으니 주의하세요.

프롬프트 최적화

MessagesPlaceholder를 사용할 때는 프롬프트의 구조가 복잡해질 수 있습니다. 따라서:

  • 프롬프트 디버깅 도구(예: LangChain의 PromptTemplate.format 메서드)를 활용해 예상 출력 확인.
  • 시스템 메시지와 사용자 입력의 역할이 명확히 구분되도록 설계.

실제 애플리케이션 사례

MessagesPlaceholder는 다양한 실세계 애플리케이션에서 활용됩니다. 몇 가지 대표적인 사례를 소개합니다:

  • 고객 지원 챗봇: 고객과의 대화 기록을 기반으로 문맥을 유지하며 응답. 예: “이전에 말씀하신 주문 번호에 대해 추가 정보를 드리겠습니다.”
  • 교육용 AI 튜터: 학생의 질문과 이전 답변을 참조해 맞춤형 학습 가이드를 제공.
  • 다국어 지원 챗봇: 사용자의 언어 설정에 따라 시스템 메시지를 동적으로 변경해 자연스러운 대화 제공.

MessagesPlaceholder는 LangChain에서 대화형 애플리케이션의 유연성과 확장성을 높여주는 강력한 도구입니다. 이를 통해 대화 기록을 체계적으로 관리하고, 동적으로 변하는 메시지를 프롬프트에 통합할 수 있습니다. 이 챕터에서 다룬 개념과 예제를 바탕으로, 여러분만의 대화형 AI 애플리케이션에서 MessagesPlaceholder를 효과적으로 활용해 보세요.

카테고리: 랭체인 (LangChain) | 댓글 남기기

2.1.4. ChatPromptTemplate

LangChain에서 ChatPromptTemplate는 대화형 AI 애플리케이션을 구축할 때 매우 중요한 도구입니다. LangChain은 대규모 언어 모델(LLM)을 활용한 애플리케이션 개발을 간소화하는 프레임워크로, 그 중심에는 프롬프트 템플릿이 있습니다. 특히 ChatPromptTemplate는 대화 형식의 프롬프트를 구조화하고 동적으로 관리할 수 있게 해주는 강력한 도구입니다. 

ChatPromptTemplate는 LangChain에서 제공하는 프롬프트 템플릿 클래스로, 대화 흐름을 반영한 프롬프트를 생성하는 데 특화되어 있습니다. 일반적인 PromptTemplate가 단일 텍스트 입력을 기반으로 프롬프트를 생성한다면, ChatPromptTemplate는 시스템 메시지, 사용자 메시지, AI 응답 등 다중 메시지 형식을 지원합니다. 이는 특히 채팅 기반 애플리케이션에서 LLM과 자연스럽고 맥락적인 대화를 구현할 때 유용합니다.

ChatPromptTemplate의 주요 특징은 다음과 같습니다:

  • 역할 기반 메시지 정의: 시스템, 인간(Human), AI 등의 역할을 구분하여 메시지를 구성할 수 있습니다.
  • 동적 변수 삽입: 템플릿에 변수를 추가해 입력값에 따라 프롬프트가 유연하게 변형됩니다.
  • 대화 히스토리 통합: 이전 대화 내용을 반영하여 맥락을 유지할 수 있습니다.

ChatPromptTemplate의 구조

ChatPromptTemplate는 langchain.prompts 모듈에서 가져올 수 있으며, 메시지 리스트로 구성됩니다. 각 메시지는 SystemMessage, HumanMessage, AIMessage와 같은 객체로 표현됩니다. 예를 들어:

  • AIMessage: AI의 응답을 나타냅니다(템플릿에서는 예상 응답을 설계할 수 있음)
  • SystemMessage: AI의 동작 방식이나 대화의 기본 규칙을 정의합니다.
  • HumanMessage: 사용자가 입력한 질문을 나타냅니다.

기본적인 사용법은 다음과 같습니다:

from langchain.prompts import ChatPromptTemplate

# ChatPromptTemplate 생성
prompt = ChatPromptTemplate.from_messages([
    ("system", "당신은 도움이 되는 AI 비서입니다."),
    ("human", "안녕하세요, {topic}에 대해 알려주세요."),
])

# 변수 삽입
formatted_prompt = prompt.format(topic="LangChain")
print(formatted_prompt)
System: 당신은 도움이 되는 AI 비서입니다.
Human: 안녕하세요, LangChain에 대해 알려주세요.

주요 메서드와 활용법

  1. from_messages: 메시지 리스트를 기반으로 템플릿을 생성합니다.
    • 사용 예: 위 코드처럼 시스템과 인간 메시지를 조합.
  2. format: 변수 값을 삽입하여 최종 프롬프트를 생성합니다.
    • 입력값에 따라 동적으로 변형 가능.
  3. format_prompt: ChatPromptValue 객체를 반환하며, LLM 호출에 직접 사용할 수 있습니다.

실제 예제: FAQ 봇 구축

ChatPromptTemplate를 활용해 간단한 FAQ 봇을 만들어 보겠습니다. 이 봇은 사용자가 특정 주제에 대해 질문하면 사전 정의된 형식으로 답변을 제공합니다.

from langchain.prompts import ChatPromptTemplate
from langchain_ollama import ChatOllama

# ChatPromptTemplate 정의
faq_template = ChatPromptTemplate.from_messages([
    ("system", "당신은 {company}의 고객 지원 AI입니다. 간결하고 정확하게 답변하세요."),
    ("human", "{question}에 대해 알려주세요."),
])

# LLM 모델 설정
llm = ChatOllama(model="exaone3.5", temperature=0.7)

# 프롬프트 포맷팅
prompt = faq_template.format(company="우주그룹", question="스마트폰의 기능")

# LLM 호출
response = llm.invoke(prompt)
print(response.content)
스마트폰의 주요 기능은 다음과 같습니다:
1. **통신**: 전화 및 텍스트 메시지 전송
2. **인터넷 연결**: 웹 브라우징, 이메일, 소셜 미디어
3. **앱 실행**: 다양한 유틸리티, 엔터테인먼트 앱 사용
4. **사진 및 비디오**: 촬영, 편집, 공유
5. **음악 및 비디오 재생**: 미디어 플레이백
6. **GPS 및 네비게이션**: 위치 추적, 길 안내
7. **건강 관리**: 운동량 추적, 건강 모니터링 앱
8. **페이먼트**: 모바일 결제 시스템
궁금한 특정 기능이 있으시면 말씀해 주세요!
카테고리: 랭체인 (LangChain) | 댓글 남기기

2.1.3. 파일로부터 template 읽어오기

LangChain에서 템플릿(Template)은 프롬프트(Prompt)를 체계적으로 관리하고 재사용하기 위한 강력한 도구입니다. 특히, 애플리케이션 규모가 커질수록 프롬프트를 코드 내에 하드코딩하는 대신 외부 파일로 분리해 관리하는 것이 효율적입니다. 이 챕터에서는 파일로 저장된 템플릿을 읽어오는 방법을 배우고, 이를 LangChain에서 활용하는 과정을 단계별로 살펴보겠습니다.

템플릿 파일의 필요성:

프롬프트 템플릿을 외부 파일로 저장하면 다음과 같은 이점이 있습니다:

  • 유지보수성: 코드와 템플릿을 분리해 수정이 용이해집니다.
  • 재사용성: 여러 프로젝트나 모듈에서 동일한 템플릿을 공유할 수 있습니다.
  • 가독성: 복잡한 프롬프트가 코드 안에 섞이지 않아 가독성이 향상됩니다.

예를 들어, 고객 지원 챗봇을 위한 프롬프트 템플릿을 별도 파일로 저장하고 필요할 때 불러오는 방식은 실무에서 매우 유용합니다.

1) 템플릿 파일 준비하기:

먼저, 템플릿을 저장할 파일을 만들어야 합니다. 텍스트 파일(.txt)이나 JSON 파일(.json) 형식을 주로 사용합니다. 여기서는 간단한 텍스트 파일을 예로 들겠습니다.

예제 템플릿 파일: prompt_template.txt

안녕하세요, {name}님!저는 {role} 역할을 맡고 있는 AI입니다.
오늘 {topic}에 대해 도움을 드릴게요.
어떤 도움을 드릴까요?

이 템플릿에는 {name}, {role}, {topic}과 같은 변수가 포함되어 있으며, 나중에 LangChain에서 동적으로 채워질 예정입니다.

LangChain에서 파일 읽기:

LangChain에서 파일로 저장된 템플릿을 읽어오려면 Python의 파일 입출력 기능을 활용한 뒤, PromptTemplate 클래스를 사용해 템플릿을 정의합니다. 아래는 단계별 코드입니다.

– 필요한 모듈 임포트

from langchain.prompts import PromptTemplate

– 텍스트 파일 읽기

Python의 기본 파일 읽기 기능을 사용해 템플릿을 불러옵니다.

# 템플릿 파일 읽기
with open("./resources/prompt_template.txt", "r", encoding="utf-8") as file:
    template_content = file.read()

여기서 encoding=”utf-8″은 한글 등 다양한 언어를 지원하기 위해 필수적입니다.

– PromptTemplate 생성

읽어온 템플릿 내용을 PromptTemplate 객체로 변환합니다.

# PromptTemplate 객체 생성
prompt = PromptTemplate(
    input_variables=["name", "role", "topic"],
    template=template_content
)
  • input_variables: 템플릿에 포함된 변수 목록을 지정합니다.
  • template: 파일에서 읽어온 템플릿 문자열을 사용합니다.

– 템플릿 사용하기

이제 템플릿에 값을 채워 프롬프트를 생성할 수 있습니다.

# 템플릿에 값 채우기
formatted_prompt = prompt.format(
    name="오스틴",
    role="고객 지원",
    topic="제품 문의"
)
print(formatted_prompt)
안녕하세요, 오스틴님!
저는 고객 지원 역할을 맡고 있는 AI입니다.
오늘 제품 문의에 대해 도움을 드릴게요. 어떤 도움을 드릴까요?

2) 고급 활용: JSON 파일 사용

더 복잡한 템플릿을 관리하려면 JSON 형식을 사용할 수도 있습니다. JSON은 구조화된 데이터를 저장하기에 적합하며, 여러 템플릿을 한 파일에 저장할 수 있습니다.

예제 JSON 파일: prompts.json

{
  "greeting": "안녕하세요, {name}님! 저는 {role} 역할을 맡고 있는 AI입니다.",
  "support": "오늘 {topic}에 대해 도움을 드릴게요. 어떤 도움을 드릴까요?"
}

– JSON 파일 읽기 및 사용

import json

# JSON 파일 읽기
with open("./resources/prompts.json", "r", encoding="utf-8") as file:
    prompts_data = json.load(file)

# 템플릿 선택 및 PromptTemplate 생성
greeting_template = PromptTemplate(
    input_variables=["name", "role"],
    template=prompts_data["greeting"]
)

support_template = PromptTemplate(
    input_variables=["topic"],
    template=prompts_data["support"]
)

# 템플릿 조합
full_prompt = (
    greeting_template.format(name="오스틴", role="기술 지원") + "\n" +
    support_template.format(topic="소프트웨어 설치")
)

print(full_prompt)
안녕하세요, 오스틴님! 저는 기술 지원 역할을 맡고 있는 AI입니다.
오늘 소프트웨어 설치에 대해 도움을 드릴게요. 어떤 도움을 드릴까요?

2) 고급 활용: yaml 파일 사용

speed_info.yaml와 capital.yaml의 내용은 각각 다음과 같습니다.

[speed_info.yaml]

_type: “prompt”
template: “{object}의 속도는?”
input_variables: [“object”]

[capital.yaml]

_type: “prompt”
template: |
{country}의 수도에 대해서 알려주세요.
수도의 특징을 다음의 양식에 맞게 정리해 주세요.
300자 내외로 작성해 주세요.
한글로 작성해 주세요.
—-
[양식]
1. 면적
2. 인구
3. 역사적 장소
4. 특산품

#Answer:
input_variables: [“country”]

yaml 파일로 기작성된 프롬프트를 읽어들입니다.

from langchain_core.prompts import load_prompt

prompt = load_prompt("resources/speed_info.yaml")
print(prompt)
input_variables=[‘object’] input_types={} partial_variables={} template='{object}의 속도는?’

Window 사용자 중 이전의 코드가 오류가 나는 경우 아래의 코드로 실행하세요 (인코딩 설정)

import yaml
from langchain_core.prompts import loading
from langchain_core.prompts.base import BasePromptTemplate
def load_prompt(file_path, encoding="utf8") -> BasePromptTemplate:
  with open(file_path, "r", encoding=encoding) as f:
      config = yaml.safe_load(f)
  return loading.load_prompt_from_config(config)

prompt = load_prompt("resources/speed_info.yaml", encoding="cp949")
print(prompt)
input_variables=[‘object’] input_types={} partial_variables={} template='{object}의 속도는?’
prompt = prompt.format(object="치타")
print(prompt)
input_variables=[‘object’] input_types={} partial_variables={} template='{object}의 속도는?’
prompt2 = load_prompt("resources/capital.yaml")
print(prompt2.format(country="대한민국"))
대한민국의 수도에 대해서 알려주세요.
수도의 특징을 다음의 양식에 맞게 정리해 주세요.
300자 내외로 작성해 주세요.
한글로 작성해 주세요.
[양식]
면적
인구
역사적 장소
특산품
Answer:

파일로 저장된 템플릿을 읽어오는 방법은 LangChain을 보다 유연하고 확장 가능하게 만드는 핵심 기술입니다. 텍스트 파일을 사용한 간단한 방식부터 JSON을 활용한 구조화된 접근까지, 프로젝트 요구사항에 맞게 선택할 수 있습니다.

카테고리: 랭체인 (LangChain) | 댓글 남기기

2025년 4월 10일 AI 트렌드

‘반복 증류’로 성능 극대화한 오픈 소스 LLM 등장…”라마 4·딥시크 증류 모델보다 우수”

‘반복 증류’를 통해 성능을 극대화한 오픈 소스 LLM인 ‘코기토 v1’에 대해 다룹니다. 이번에 공개된 코기토 v1은 메타의 ‘라마’와 알리바바의 ‘큐원’을 미세조정한 것이다.

  • 딥 코기토에서 개발한 코기토 v1은 라마 4와 딥시크 증류 모델보다 우수한 성능을 보입니다.
  • 코기토 v1은 ‘반복 증류 및 증폭(IDA)’이라는 독자적인 학습 기법을 사용하여 모델 성능을 향상시켰습니다.
  • IDA 기법은 LLM이 생성한 응답을 훈련에 활용하여 모델 자체를 개선하는 방식입니다.
  • 코기토 v1은 3B에서 70B까지 다양한 매개변수 크기로 제공되며, 하이브리드 모델로 일반 LLM의 반응성과 추론 모델의 정밀성을 모두 갖추고 있습니다.
  • 벤치마크 테스트에서 코기토 70B는 추론 기능을 활성화했을 때 수학 및 언어 평가에서 딥시크-R1이나 큐원 증류 버전보다 뛰어난 성능을 보였습니다.

유튜브 보고 레시피 추출하는 LLM 프레임워크 등장

오사카대학교와 일본 산업기술종합연구소(AIST) 연구진은 요리 영상에서 로봇이 수행 가능한 요리 계획을 생성하는 AI 프레임워크를 개발했습니다. 이 프레임워크는 LLM과 FOON을 결합하여 계획의 타당성을 검증하고, 실행 불가능한 단계를 수정합니다. 실제 요리 영상 실험에서 80%의 성공률을 기록하며 기존 LLM 방식(20%)보다 우수한 성능을 보였습니다. 이 기술은 로봇이 복잡한 요리 작업을 수행하는 데 중요한 역할을 할 것으로 기대됩니다.

LLM 개발사 인기 시들해졌나…글로벌 VC 투자, 산업 특화 AI로

이 기사는 글로벌 벤처 캐피털(VC) 투자가 대규모 언어 모델(LLM) 개발자에서 업계 특화 AI 스타트업으로 이동하고 있음을 논의합니다.

  • 2025년 1분기에 특정 산업이나 기술 문제에 초점을 맞춘 초기 단계 AI 스타트업에 대한 투자가 일반적인 AI 모델 개발자에 대한 투자를 넘어섰습니다.
  • 2022년부터 2024년까지 OpenAI, Anthropic, xAI와 같은 LLM 개발사들이 글로벌 투자의 대부분을 유치했습니다. 그러나 최근 AI 에이전트 개발자AI 로봇 기업들이 더 많은 주목을 받고 있습니다.
  • 예를 들어, Google DeepMind의 데미스 하사비스가 설립한 Isomorphic Labs는 2025년 1분기 초기 AI 스타트업 중 가장 많은 투자를 받았습니다 (6억 달러). 이 회사는 AI ‘AlphaFold’를 사용하여 단백질 구조를 예측하는 새로운 약물 설계 엔진을 개발하고 있습니다.
  • Lightspeed Venture Partners와 Sequoia Capital과 같은 주요 VC 회사들도 로봇 공학AI 에이전트와 같은 산업에서 구체적인 문제를 해결하는 회사들에 초점을 맞추고 있습니다.
카테고리: AI 트렌드 | 댓글 남기기

2025년 4월 9일 AI 트렌드

“세계는 지금, 인공지능과 함께 재편된다”…스탠퍼드 ‘AI 인덱스 2025’가 살펴본 AI 비전은?

스탠퍼드대학교 인간중심 인공지능연구소(HAI)가 발표한 ‘AI 인덱스 2025’ 보고서의 주요 내용을 다루고 있습니다. 보고서는 인공지능(AI)이 기술을 넘어 사회, 경제, 정책 전반에 걸쳐 세계를 어떻게 재편하고 있는지를 상세하게 분석하고 있습니다.

  • AI 기술의 급격한 발전과 함께 기업들의 AI 도입 및 투자가 크게 증가하고 있으며, AI 활용의 대중화는 기술 비용 감소에 기인합니다.
  • 미국이 여전히 AI 모델 생산을 주도하고 있지만, 중국이 빠르게 성능 격차를 좁히고 있습니다.
  • AI 오용 및 편향 사례가 증가함에 따라 책임 있는 AI 개발에 대한 관심이 높아지고 있으며, AI 기술은 과학 및 의학 영역에서도 중요한 역할을 하고 있습니다.
  • 글로벌 차원에서 AI에 대한 긍정적 인식이 확산되고 있지만, 데이터 프라이버시 및 알고리즘 편향 문제로 인해 신중한 태도를 유지하는 지역도 있습니다.
  • 교육 분야에서도 AI 관련 내용이 통합되고 있지만, 이를 가르칠 역량을 갖춘 교사 부족 문제가 제기되고 있습니다.

이 보고서는 AI가 더 이상 상상의 대상이 아닌 현재 우리의 삶을 실질적으로 변화시키고 있는 기술임을 강조하며, AI의 잠재력과 위험성을 모두 이해하고 대비할 수 있는 사회적 기반 마련의 필요성을 제시합니다.

AI의 윤리적 문제와 관련하여, 책임 있는 AI 개발의 필요성을 강조하고 있습니다. 또한, AI 기술의 발전에 따라 교육 시스템의 변화가 필요해 보이네요.

“클로드에 o1 결합했더니”..최강 성능 AI 코딩 어시스턴트 등장

AI 코딩 도구가 소프트웨어 개발을 혁신할 수 있는 잠재력을 보여줍니다. Augment Agent는 대규모 프로젝트에서 개발자를 지원하고 생산성을 향상시킬 수 있는 강력한 도구로 입증되었습니다.

  • 새로운 AI 코딩 어시스턴트인 Augment Agent는 Anthropic의 Claude와 OpenAI의 o1 추론 모델을 결합하여 SWE-bench에서 65.4%의 성공률을 달성했습니다.
  • 다른 AI 코딩 도구가 단순한 코드 생성에 초점을 맞추는 반면, Augment Agent는 대규모 소프트웨어 엔지니어링 프로젝트의 복잡성을 처리하고 개발자가 방대한 코드베이스를 탐색하고 수정하는 데 도움을 주도록 설계되었습니다.
  • Augment Code는 방대한 코드베이스 내에서 맥락을 이해하는 에이전트의 능력을 강조하며, 200,000개의 토큰 컨텍스트 창과 실시간 팀 협업 동기화를 자랑합니다.
  • 에이전트는 또한 ‘메모리’ 기능을 통합하여 개발자와의 상호 작용을 통해 시간이 지남에 따라 개별 코딩 스타일과 선호도를 더 잘 반영합니다.

바이오·인공지능에 집중투자···작년 딥테크 벤처투자 3조6천억 ‘최대’

2024년 국내 벤처투자 중 딥테크 10대 분야에 대한 투자는 3조 6천억원에 달하며, 이는 전년 대비 약 33.7% 증가한 수치입니다. 특히 바이오헬스케어와 인공지능 분야가 투자를 주도했으며, 인공지능 분야는 전년 대비 가장 큰 폭으로 증가했습니다.

  • 2024년 딥테크 10대 분야 벤처투자 규모는 3조 6천억원으로, 최근 5년 중 최대 규모입니다.
  • 분야별 투자 규모는 바이오헬스케어(1조 2140억원), 인공지능(9694억원) 순입니다.
  • 인공지능 분야 투자는 전년 대비 75.1% 증가하며, 가장 큰 폭의 증가세를 보였습니다.
  • 인공지능 세부 분야 중에서는 ‘인공지능 연산 및 처리 부품·장치 제조·설계’ 분야의 증가율이 가장 높았습니다.
  • 벤처투자를 유치한 딥테크 기업 중 75.1%가 모태 자펀드 투자 또는 창업지원사업 참여 이력이 있습니다.

딥테크 분야에 대한 투자가 지속적으로 증가하는 것은 매우 긍정적인 신호입니다. 특히 인공지능 분야의 급성장은 앞으로 우리 사회와 산업 전반에 큰 변화를 가져올 것으로 예상됩니다. 정부의 적극적인 지원과 투자를 통해 국내 딥테크 기업들이 글로벌 시장에서 경쟁력을 확보하고, 미래 성장 동력을 창출할 수 있기를 기대합니다.


‘도구 사용 중심’ AI 에이전트 프레임워크 등장…”처음 보는 도구도 적절하게 활용”

서울대학교병원이 한국 최초로 대규모 언어 모델(LLM)을 사용한 AI 기반 의료 기록 시스템을 도입할 것이라는 소식을 전합니다.

  • AI 시스템인 HIS.AI1은 CD 등의 소스에서 정보를 자동으로 전자 의료 기록으로 변환하여 의사의 시간을 절약합니다.
  • 서울대학교병원은 한국 의료 언어와 관행을 더 잘 이해할 수 있도록 3800만 건의 의료 기록으로 학습된 한국 LLM을 개발했습니다.
  • HIS.AI1 외에도 병원은 행정 및 보험 청구 프로세스를 간소화하는 CLAIM.AI와 연구원에게 최신 연구 논문에 대한 맞춤형 액세스를 제공하는 RESEARCH.AI를 도입하고 있습니다.
  • 병원은 올해 안에 이 기술을 다른 병원 및 기관과 공유하여 한국 의료 시스템 전체의 효율성을 높일 계획입니다.

중국, 세계 최초 양자컴퓨터로 10억 이상 매개변수의 AI 대형 모델 미세조정 성공… LLM 경량화 돌파구 마련

중국이 세계 최초로 양자컴퓨터 ‘오리진 위쿵’을 이용하여 10억 개 이상의 매개변수를 가진 AI 대형 모델의 미세 조정에 성공했다는 내용을 다루고 있습니다.

  • 오리진 위쿵은 72큐비트로 구성된 국산 초전도 양자칩을 기반으로 하며, 대형언어모델(LLM)의 경량화를 가능케 하는 핵심 연산을 수행했습니다.
  • 실험 결과, 학습 손실률을 15% 줄이고, 수학적 추론 정확도를 기존 68%에서 82%로 향상시켰으며, 모델의 전체 매개변수 중 76%를 줄이는 과정에서도 학습 효율이 8.4% 향상되었습니다.
  • 전문가들은 이번 사례가 양자컴퓨터가 실제 산업에 적용될 수 있는 가능성을 처음으로 실증한 전환점이라고 평가하며, 의료 진단, 금융 리스크 분석, 법률 자문 등 다양한 영역에서의 활용 가능성을 제시했습니다.
  • 오리진 위쿵은 상용화 이후 35만 건 이상의 양자 연산 작업을 완료했으며, 전 세계 139개 국가와 지역의 사용자가 원격으로 접속하여 활용하고 있습니다.

이러한 결과는 양자컴퓨팅이 인공지능의 성능을 향상시키고, 연산 자원의 한계를 극복할 수 있는 새로운 해법을 제시할 수 있음을 시사합니다.

앞으로 양자컴퓨팅이 보급이 된다면 현재 용량이 매우 큰 LLM 모델들이 매우 경량화 될 수 있을 것으로 기대가 되네요.

카테고리: AI 트렌드 | 댓글 남기기

2025년 4월 8일 AI 트렌드

인공지능, ‘튜링 테스트’에서 인간에 압승했다

인공지능이 사람과 얼마나 비슷하게 사고하는지를 평가하는 ‘튜링 테스트’에서 인공지능이 인간을 압도했다는 내용을 다루고 있습니다. 샌디에이고 캘리포니아대(UCSD) 연구진은 4가지 인공지능 모델을 대상으로 튜링 테스트를 진행한 결과, 오픈에이아이의 생성형 거대언어모델(LLM) 지피티4.5(GPT 4.5)가 사람보다 훨씬 더 높은 비율로 ‘사람 같다’는 평가를 받았다고 발표했습니다. 이번 시험에 사용한 인공지능 모델은 엘리자(ELIZA), 지피티포오(GPT-4o), 지피티4.5(GPT4.5), 라마3.1(LLaMa-3.1-405B)입니다.

연구진은 300명의 참가자를 대상으로 온라인을 통해 8라운드 1023회에 걸쳐 5분씩 대화하는 실험을 진행했습니다. 인공지능에겐 몰인격형과 인격형 두 가지 유형의 지시가 주어졌는데, 지피티4.5 모델은 인격형 대화에서 73%의 비율로 ‘사람 같다’는 평가를 받아 경쟁자인 사람을 압도했습니다.

튜링 테스트가 지능에 대한 테스트가 아니라 인간과 비슷한지에 대한 테스트이며, 인공지능이 튜링 테스트를 통과했다는 것은 짧고 일상적인 대화에서 사람 흉내를 내는 능력이 더 좋아졌다는 것을 의미한다고 설명합니다. 또한, 지피티4.5가 보여준 높은 수준의 소통 능력은 심리 상담이나 교육 등의 분야에서 유용하게 활용될 수 있지만, 인공지능의 답변 생성 과정이 불투명한 상태에서 사람들이 인간과 기계를 확실하게 구별할 수 없게 되면 새로운 사회적 문제가 발생할 수도 있다고 지적합니다.

인공지능의 발전이 인간과의 상호작용에 어떤 영향을 미칠지에 대한 논의를 제시합니다. 인공지능이 사람과 더욱 유사하게 대화할 수 있게 되면서, 인간과 기계의 경계가 모호해지고 새로운 사회적 문제가 발생할 수 있다는 점을 시사합니다. 또한, 인공지능이 사람과 유사한 대화 능력을 갖게 되면서, 심리 상담이나 교육 등의 분야에서 유용하게 활용될 수 있다는 점도 시사합니다.

[김호광 칼럼] 인공지능은 자살이 우려되는 사람을 어떻게 찾고 살릴 수 있을까?

이 기사는 인공지능이 자살 위험이 있는 사람들을 어떻게 찾고 도울 수 있는지에 대한 김호광 대표의 칼럼입니다.

  • SNS 기업들이 사회적 책임을 가지고 우울증, 자살 우려 등에 대해 적극적으로 개입해야 함을 강조합니다.
  • 최근 미스코리아 출신의 청년의 자살 사례를 언급하며, 유명인의 자살이 또래 집단에 미치는 영향에 대해 이야기합니다.
  • SNS의 발달로 인해 사람들이 사회적 압력을 느끼고 우울증이 증가하는 현상에 대해 설명합니다.
  • 인공지능 기술을 활용하여 자살 관련 포스팅을 사전에 탐지하고 차단하거나, 심리적으로 불안한 상태의 영상이나 사진을 감지하여 지인에게 알리는 시스템을 제안합니다.
  • 블록체인 기술을 활용하여 악의적인 메시지를 올리는 사람들을 제재하고, SNS 내에서 개인의 존엄을 훼손하는 사람들을 배제하는 방안을 제시합니다.

SNS는 사람들에게 사회적 압력과 우울증을 유발할 수 있으며, 이는 자살로 이어질 수 있습니다. 인공지능 기술은 자살 위험이 있는 사람들을 식별하고 돕는 데 유용하게 사용될 수 있습니다. SNS 기업들은 사회적 책임을 가지고 자사 플랫폼에서 발생하는 문제에 대해 적극적으로 대처해야 합니다.

AI가 모든 걸 한다면, 디자이너는 왜 존재해야 할까?

이 기사는 “AI가 모든 걸 한다면, 디자이너는 왜 존재해야 할까?”라는 질문을 던지며, AI시대에 디자이너의 역할에 대해 논하고 있습니다.

AI가 디자인 작업의 많은 부분을 자동화할 수 있지만, 디자이너의 창의성, 문제 해결 능력, 그리고 인간적인 감성은 여전히 중요하다고 강조합니다. 또한, 디자이너는 AI를 도구로 활용하여 더욱 효율적이고 혁신적인 디자인을 할 수 있다고 이야기합니다.


‘도구 사용 중심’ AI 에이전트 프레임워크 등장…”처음 보는 도구도 적절하게 활용”

AI 에이전트의 LLM 외부 도구 사용 능력에 초점을 맞춘 새로운 프레임워크인 ‘도구의 사슬(CoTools)’에 대해 다룹니다.

  • 새로운 프레임워크의 등장: LLM이 훈련되지 않은 도구도 사용할 수 있도록 지원하는 ‘도구의 사슬’이 개발되었습니다.
  • 핵심 기술: ‘맥락 내 학습(ICL)’을 활용하여 LLM이 다양한 도구를 추론 프로세스 내에서 직접 활용하도록 합니다.
  • 프레임워크 구성: 도구 판단기, 도구 검색기, 도구 호출의 세 가지 모듈로 구성되어 LLM의 핵심 기능을 보존하면서 새로운 도구를 유연하게 사용할 수 있습니다.
  • 벤치마크 결과: ‘라마 2-7B’에 적용한 결과, 챗GPT와 비슷한 성능을 보였으며, 복잡한 함수 사용 능력과 도구 선택 정확도에서 뛰어난 결과를 나타냈습니다.
  • 활용 가능성: ‘모델 컨텍스트 프로토콜(MCP)’을 통해 외부 도구와 리소스를 애플리케이션에 쉽게 통합할 수 있어 AI 에이전트 개발 및 배포에 유용할 것으로 기대됩니다.

이 프레임워크는 LLM이 외부 도구를 사용하는 데 있어 유연성과 효율성을 높여 AI 에이전트의 활용 범위를 넓힐 수 있음을 보여줍니다. 특히, 훈련되지 않은 도구도 사용할 수 있다는 점은 AI 에이전트가 다양한 실제 환경에서 더욱 효과적으로 작동할 수 있도록 합니다.

카테고리: AI 트렌드 | 댓글 남기기

n8n이 뭐예요?

n8n은 워크플로우 자동화 도구입니다. 쉽게 말해, 우리가 매일 반복하는 일을 컴퓨터가 알아서 해주게 만드는 마법 같은 프로그램입니다. 예를 들어, 이메일이 오면 자동으로 슬랙(Slack)에 알림을 보내거나, 구글 시트에 데이터를 정리하거나, 심지어 인스타그램에 올라온 사진을 자동으로 저장하게 할 수도 있습니다. 이 모든 걸 코드를 전혀 몰라도 할 수 있다는 게 핵심입니다!

이름은 “nodemation(노드+자동화)”에서 따왔습니다. 여기서 “노드”는 작은 작업 블록을 뜻하는데, 이 블록들을 레고처럼 연결해서 나만의 자동화 시스템을 만드는 것입니다.


n8n의 특징: 왜 좋을까?

  1. 코딩 없이 가능: 시각적인 화면에서 마우스로 클릭하고 연결만 하면 됩니다. 드래그 앤 드롭 방식이라 직관적입니다.
  2. 오픈 소스: 무료로 사용할 수 있고, 내가 원하면 직접 수정도 가능합니다. 서버에 설치해서 쓰면 비용이 거의 들지 않습니다!
  3. 수백 가지 앱과 연결: 구글, 슬랙, 트위터, 노션 등 200개 이상의 앱과 바로 연동할 수 있습니다. 만약 원하는 앱이 없어도 API라는 걸 이용하면 거의 뭐든 연결 가능합니다.
  4. 셀프 호스팅 가능: 데이터를 내 컴퓨터나 서버에 보관할 수 있어서 보안 걱정도 줄어듭니다. (클라우드 서비스도 있지만, 이건 유료 옵션입니다.)

n8n의 사용예시: 뭘 할 수 있나요?

쉽게 상상할 수 있게 예를 들면 다음과 같습니다

  • 상황: 매일 아침 날씨를 확인하고 팀원들에게 알려주고 싶어.
  • n8n 해결책:
    1. 아침 7시에 자동으로 시작하는 “트리거 노드”를 설정합니다.
    2. 날씨 정보를 가져오는 “날씨 API 노드”를 연결합니다.
    3. 그 정보를 슬랙으로 보내는 “슬랙 노드”를 붙이면 끝!
      → 이제 매일 아침 n8n이 날씨를 체크해서 팀 채널에 “오늘 서울 날씨: 맑음, 20도”라고 올려줍니다.

또 다른 예로는, 고객이 웹사이트에서 문의를 남기면 자동으로 구글 시트에 기록하고, 담당자에게 이메일을 보내는 워크플로우를 만들 수도 있습니다. 이런 식으로 반복적인 일을 없애줍니다.


n8n 시작: 어떻게 시작하나요?

  1. 설치:
    • 간단하게 하려면 n8n 공식 사이트에서 클라우드 버전을 사용해 볼 수 있습니다. (무료 trial이 있음).
    • 무료로 쓰고 싶다면 도커(Docker)라는 걸 이용해서 내 컴퓨터나 서버에 설치할 수도 있습니다. 명령어 하나면 끝입니다:
      docker run -it –rm –name n8n -p 5678:5678 n8nio/n8n
    • 설치 후 브라우저에서 http://localhost:5678에 접속하면 바로 시작!
  2. 사용:
    • 화면에 빈 캔버스가 나오는데, 여기서 노드를 추가하고 연결합니다. 마치 그림 그리듯이…
    • 공식 사이트에 템플릿도 많으니 처음엔 따라 해보는 것도 좋습니다.

n8n은 “노코드(No-Code)”와 “자동화”라는 키워드와 딱 맞아 떨어집니다. 요즘 기업이나 개인 모두 시간 절약과 효율성을 중요하게 여기니까, n8n 같은 도구가 점점 인기를 끌고 있습니다. 게다가 AI 기능 (LangChain 같은 걸 연동 가능)도 추가되면서 더 똑똑한 자동화가 가능해 졌습니다.


출처

  • n8n 공식 웹사이트: https://n8n.io – 기본 개념과 기능 설명.
  • n8n 문서: https://docs.n8n.io – 설치 방법과 사용법.
  • 웹 자료: “n8n 이란? – TILNOTE” (tilnote.io)와 “n8n 완벽가이드” (magicaiprompts.com)

카테고리: AI 현황 | 댓글 남기기

2.1.2. partial_variables

partial_variables는 LangChain에서 프롬프트 템플릿(Prompt Template)을 다룰 때 사용되는 개념으로, 템플릿에 포함된 변수 중 일부를 미리 채워넣는 데 사용됩니다. LangChain의 ChatPromptTemplate이나 PromptTemplate과 같은 클래스에서 프롬프트 템플릿을 정의할 때, 동적으로 값을 삽입할 수 있는 placeholder(변수)를 설정합니다. partial_variables는 이 변수들 중 일부를 사전에 고정된 값으로 지정하여 템플릿의 유연성을 유지하면서도 반복적인 입력을 줄이는 데 유용합니다.

쉽게 말해, partial_variables를 사용하면 템플릿의 일부 변수를 미리 정의해 놓고, 나중에 다른 변수들만 동적으로 채워 넣을 수 있습니다. 이는 특히 반복적인 작업이나 특정 값이 고정된 상황에서 코드를 간결하게 만들어줍니다.

LangChain에서 partial_variables의 역할

LangChain의 프롬프트 템플릿은 주로 대화형 AI 모델(예: EXAONE 3.5나 Ollama에서 실행되는 모델)과 상호작용할 때 사용됩니다. 템플릿은 사용자가 모델에 전달할 질문이나 지시사항을 구조화하는 데 사용되며, partial_variables는 이 구조화 과정에서 일부 변수를 “부분적으로(partial)” 채워 넣는 역할을 합니다.

예를 들어, 시스템 메시지나 특정 역할을 고정하고 싶을 때 partial_variables를 활용할 수 있습니다. 이렇게 하면 나중에 invoke나 format 메서드를 호출할 때 나머지 변수만 제공하면 됩니다.

코드 예시

다음은 partial_variables를 사용한 간단한 예시입니다. 여기서는 EXAONE 3.5 모델을 Ollama에서 실행한다고 가정하고, LangChain의 ChatPromptTemplate을 사용합니다.

from langchain_core.prompts import PromptTemplate
from langchain_ollama import ChatOllama
from datetime import datetime

# 날짜를 반환하는 함수 정의
def get_today():
 return datetime.now().strftime("%m-%d")

prompt = PromptTemplate(
 template="오늘의 날짜는 {today} 입니다. 생일이 정확히 오늘인 유명인 {n}명을 나열해 주세요. 생년월일을 표기해주세요.",
 input_variables=["n"],
 partial_variables={
     "today": get_today  # dictionary 형태로 partial_variables를 전달
 },
)

prompt.format(n=3)

llm_model = ChatOllama(model='exaone3.5', temperature=0)
# chain 을 생성합니다.
chain = prompt | llm_model

# chain 을 실행 후 결과를 확인합니다.
result = chain.invoke(3).content
print (result)
오늘 날짜가 3월 22일이시군요! 정확히 오늘 생일인 유명인 3분을 소개해 드리겠습니다:
1. **브래드 피트 (Brad Pitt)**
   – 생년월일: 1963년 3월 22일
2. **크리스티나 아길레라 (Christina Aguilera)**
   – 생년월일: 1980년 3월 22일
3. **존 말코비치 (John Malkovich)**
   – 생년월일: 1953년 3월 22일
이 분들 모두 오늘 생일을 맞이하고 계시네요! 🎉
# chain 을 실행 후 결과를 확인합니다.
print(chain.invoke({"today": "Jan 02", "n": 3}).content)
1월 2일에 태어난 유명인 세 분을 소개합니다:

1. **브래드 피트 (Brad Pitt)**  
   – 생년월일: 1963년 1월 2일

2. **케이트 윈슬렛 (Kate Winslet)**  
   – 생년월일: 1975년 1월 2일

3. **크리스티나 아길레라 (Christina Aguilera)**  
   – 생년월일: 1980년 1월 2일

이들 모두 오늘의 생일을 맞이하고 있습니다!

언제 유용한가?

  1. 고정된 컨텍스트: 시스템 메시지나 역할이 자주 변하지 않을 때.
  2. 코드 간소화: 반복적으로 동일한 값을 입력해야 하는 상황에서 중복을 줄임.
  3. 다양한 입력 처리: 일부 변수는 고정하고, 나머지는 사용자 입력에 따라 유연하게 변경할 때.

partial_variables는 LangChain에서 프롬프트 템플릿을 보다 효율적으로 다룰 수 있게 해주는 도구입니다. 로컬 모델과 Ollama를 활용한 환경에서는 모델의 역할, 언어 설정, 또는 기타 고정된 컨텍스트를 미리 정의하여 작업 흐름을 간소화하는 데 특히 유용합니다.

카테고리: 랭체인 (LangChain) | 태그: | 댓글 남기기

2.1.1. PromptTemplate

PromptTemplate는 LangChain에서 제공하는 도구로, 대규모 언어 모델(LLM)에 전달할 프롬프트(prompt)를 체계적으로 구성하고 관리하기 위한 템플릿입니다. LLM은 사용자가 제공하는 프롬프트에 따라 응답을 생성하기 때문에, 일관성 있고 재사용 가능한 프롬프트를 만드는 것이 중요합니다. PromptTemplate는 이러한 요구를 충족하기 위해 설계되었습니다.

LangChain은 LLM을 활용한 애플리케이션 개발을 지원하는 프레임워크로, PromptTemplate는 그 핵심 구성 요소 중 하나입니다. 이를 통해 사용자는 동적인 값을 삽입하거나 특정 형식으로 프롬프트를 구조화할 수 있습니다.

주요 특징

  1. 템플릿 기반 구조
    PromptTemplate는 문자열 기반의 템플릿을 정의합니다. 이 템플릿에는 변수(placeholder)가 포함될 수 있으며, 나중에 실제 값으로 대체됩니다. 예를 들어, “안녕하세요, {name}님!”이라는 템플릿을 만들고, {name}에 “홍길동”이라는 값을 넣어 “안녕하세요, 홍길동님!”이라는 완성된 프롬프트를 생성할 수 있습니다.
  2. 동적 변수 삽입
    사용자가 입력한 데이터나 외부 데이터를 기반으로 프롬프트를 동적으로 생성할 수 있습니다. 이를 통해 동일한 템플릿을 다양한 상황에 맞춰 재사용할 수 있습니다.
  3. LLM과의 통합
    PromptTemplate는 LangChain에서 LLM 호출 시 사용되며, 템플릿에 따라 모델이 일관된 형식의 입력을 받도록 보장합니다. 이는 특히 복잡한 작업(예: 질문 답변, 요약, 번역 등)에서 유용합니다.
  4. 재사용성과 유지보수성
    프롬프트가 애플리케이션 곳곳에서 사용될 때, PromptTemplate를 사용하면 코드를 깔끔하게 유지하고 필요 시 템플릿만 수정하면 됩니다.

기본 사용법

LangChain에서 PromptTemplate는 Python 클래스로 구현되어 있습니다. 아래는 간단한 예제입니다:

from langchain.prompts import PromptTemplate

# 템플릿 정의
template = "당신의 이름은 {name}이고, 나이는 {age}세입니다. 자기소개를 해 주세요."
prompt = PromptTemplate(
   input_variables=["name", "age"],
   template=template
)

# 변수 값을 채워 프롬프트 생성
filled_prompt = prompt.format(name="오스틴", age=25)
print(filled_prompt)
당신의 이름은 오스틴이고, 나이는 25세입니다. 자기소개를 해 주세요.
  • input_variables: 템플릿에서 사용할 변수 목록을 지정합니다.
  • template: 실제 템플릿 문자열입니다.
  • format(): 변수에 값을 채워 완성된 프롬프트를 반환합니다.

고급 기능

  1. 조건문과 반복문
    LangChain의 PromptTemplate는 단순한 문자열 치환 외에도 복잡한 로직을 포함할 수 있습니다. 예를 들어, 특정 조건에 따라 템플릿의 일부를 포함하거나 제외할 수 있습니다.
  2. 다중 템플릿 결합
    여러 PromptTemplate을 결합해 더 복잡한 프롬프트를 만들 수 있습니다. 이를 통해 작업 흐름(workflow)을 세분화할 수 있습니다.
  3. 외부 데이터 통합
    PromptTemplate는 외부 컨텍스트(예: 문서, 데이터베이스 쿼리 결과 등)를 변수로 삽입해 LLM이 이를 기반으로 응답하도록 설정할 수 있습니다.
  4. ChatPromptTemplate와의 차이
    LangChain에는 ChatPromptTemplate라는 변형도 존재합니다. 이는 대화형 모델(예: ChatGPT 같은 모델)에 특화된 템플릿으로, 시스템 메시지, 사용자 메시지, AI 메시지 등을 구분해 정의할 수 있습니다.

실제 활용 예시

1) 질문 생성기

from langchain.prompts import PromptTemplate

template = "주제: {topic}\n질문: {topic}에 대해 설명해 주세요."
prompt = PromptTemplate(
   input_variables=["topic"],
   template=template
)

print(prompt.format(topic="인공지능"))
주제: 인공지능
질문: 인공지능에 대해 설명해 주세요.

2) LLM 호출과 연계

from langchain_ollama import OllamaLLM
from langchain.prompts import PromptTemplate

llm = OllamaLLM(model="exaone3.5")
template = "{item}의 가격은 얼마인가요?"
prompt = PromptTemplate(input_variables=["item"], template=template)

# LLM에 프롬프트 전달
response = llm.invoke(prompt.format(item="아이폰"))
print(response)
아이폰의 정확한 가격은 모델과 사양에 따라 다르며, 국가, 통신사, 그리고 판매점에 따라 변동될 수 있습니다. 최신 모델의 경우, 예를 들어 아이폰 14 시리즈의 가격은 대략적으로 다음과 같습니다 (가격은 국가 및 판매처에 따라 다를 수 있음):

– **아이폰 14**: 약 $799 (약 1,000,000원)
– **아이폰 14 Plus**: 약 $899 (약 1,200,000원)
– **아이폰 14 Pro**: 약 $999 (약 1,300,000원)
– **아이폰 14 Pro Max**: 약 $1,099 (약 1,400,000원)

최신 모델의 정확한 가격을 확인하려면 해당 국가의 애플 공식 웹사이트나 현지 판매점을 참조하시는 것이 가장 정확합니다.

장점

  • 유연성: 변수와 템플릿을 조합해 다양한 상황에 대응 가능.
  • 일관성: 동일한 작업에 대해 항상 같은 형식의 프롬프트 제공.
  • 확장성: 복잡한 애플리케이션에서도 쉽게 통합 가능.

한계

  • 복잡성 증가: 너무 많은 변수나 조건이 들어가면 관리하기 어려울 수 있음.
  • 모델 의존성: 프롬프트의 효과는 사용하는 LLM의 성능에 따라 달라질 수 있음.

PromptTemplate는 LangChain에서 프롬프트 엔지니어링을 효율적으로 수행하기 위한 강력한 도구입니다. 특히 ollama 같은 모델과 결합해 사용할 때, 작업의 목적에 맞는 프롬프트를 체계적으로 구성할 수 있어 생산성을 크게 높일 수 있습니다. 사용자는 템플릿을 설계할 때 명확성과 간결성을 유지하며, LLM의 응답 품질을 최적화하는 방향으로 활용하면 좋습니다.

카테고리: 랭체인 (LangChain) | 태그: | 댓글 남기기

2.1. 기본 프롬프트(Prompt)

2.1절에서는 다음과 같은 항목에 대해서 설명합니다.

  • PromptTemplate
  • partial_variables
  • 파일로부터 template 읽어오는 방법
  • ChatPromptTemplate
  • MessagePlaceholder
카테고리: 랭체인 (LangChain) | 태그: | 댓글 남기기