LangChain - Standard Message Content
TMTTLDR: 우리는 추론, 인용, 서버 사이드 도구 호출, 그리고 기타 최신 LLM 기능을 공급자 전반에 걸쳐 표준화하는 메시지 콘텐츠의 새로운 뷰를 도입했습니다. 이는 각 공급자의 최신 기능을 활용하면서도 추론 제공자에 구애받지 않는 애플리케이션을 더 쉽게 구축하도록 합니다. 이 기능은 기존 메시지 콘텐츠로부터 지연(lazy) 계산될 수 있으므로 완전히 하위 호환됩니다.
동기
LangChain의 핵심 강점 중 하나는 대형 언어 모델을 위한 “한 번 작성, 어디서나 실행” 추상화를 제공하는 것입니다. 이 추상화는 개발자가 코드를 재작성하지 않고도 서로 다른 LLM 공급자 간에 애플리케이션을 원활하게 전환할 수 있게 해줍니다.
OpenAI, Anthropic, Google Gemini 등 주요 추론 제공자가 제공하는 기능의 풍부함과 다양성이 최근 폭발적으로 증가했습니다. LLM은 이제 질의에 응답하기 위해 여러 구별된 단계를 수행할 수 있습니다. 예를 들어, 추론을 전개하고, 웹 검색과 코드 인터프리터를 호출하고, 인용과 잠재적으로 이미지 같은 멀티모달 데이터를 포함하는 최종 응답을 생성하는 것입니다. 각 공급자가 지원하는 기능의 집합은 유사하지만, 그들의 API는 서로 달라졌고, 호환성 레이어(각 공급자가 제공하는 Chat Completions API 등)는 제공자 고유 기능의 전체 집합을 지원하는 데 뒤처지거나 아예 지원하지 않는 경우가 일반적입니다.
LangChain 1.0의 표준 콘텐츠
우리는 최신 LLM 기능을 위한 새로운 표준 타입을 도입하고, 모든 LangChain 메시지 객체에 노출하여, 공급자에 구애받지 않는 애플리케이션을 더 쉽게 구축하면서도 사용 가능한 기능 지원을 포기하지 않도록 했습니다. 이러한 기능은 langchain 1.0에서 제공되며 Python과 JS 모두에서 사용할 수 있습니다.
표준 콘텐츠 블록 은 동일한 능력이 공급자 간에 동일하게 표현되도록 보장합니다. 실제로, 이는 모든 LLM 공급자에 걸쳐 메시지 콘텐츠를 정규화하는 타입 지정된 데이터 구조의 집합입니다. 여기에는 다음이 포함됩니다:
- 모델의 표준 텍스트 출력(인용 포함)
- 모델의 추론 및 체인 오브 소트(chain-of-thought) 출력
- 어떤 소스(URL, base64, 버킷 파일 ID)에서 온 이미지, 오디오, 비디오, 문서
- 도구/함수 호출 및 실행
- 제공자 특화 도구(내장 웹 검색 기능 및 코드 실행 포함)
상세
모든 LangChain 메시지 객체는 이제 기존 메시지 콘텐츠로부터 새로운 표현을 지연 로드하는 .content_blocks 속성을 구현합니다. 다음은 Anthropic의 Claude와 OpenAI의 Responses API의 결과를 고려한 예시입니다. 이 예에서는 그들의 추론 및 웹 검색 기능을 사용합니다. 원시 .content는 제공자 고유 포맷을
그대로 전달합니다:
Anthropic:
from langchain.chat_models import init_chat_model
llm = init_chat_model(
"anthropic:claude-sonnet-4-20250514",
thinking={"type": "enabled", "budget_tokens": 5_000},
).bind_tools([
{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 1,
}
])
response = llm.invoke("When was LangChain created?")
response.content
# [
# {
# "type": "thinking",
# "thinking": "...",
# "signature": "...",
# },
# {
# "type": "server_tool_use",
# "name": "web_search",
# "input": {...},
# "id": "...",
# },
# {
# "type": "web_search_tool_result",
# "content": [...],
# "tool_use_id": "...",
# }
# {
# "type": "text",
# "text": "...",
# "citations": [...],
# }OpenAI:
from langchain.chat_models import init_chat_model
llm = init_chat_model(
"openai:gpt-5-nano",
reasoning={"effort": "low", "summary": "auto"},
).bind_tools([{"type": "web_search_preview"}])
response = llm.invoke("When was LangChain created?")
response.content
# [
# {
# "type": "reasoning",
# "summary": [...],
# "id": "...",
# },
# {
# "type": "web_search_call"
# "action": {...},
# "id": "...",
# ...
# },
# {
# "type": "text",
# "text": "...",
# "annotations": [...],
# "id": "...",
# }이 응답들의 콘텐츠는 유사하지만, API의 작은 차이들이 두 공급자 간 교체 가능한 애플리케이션을 구축하는 데 누적적인 마찰을 더합니다.
새로운 .content_blocks 속성은 두 응답을 일관된 표현으로 파싱합니다:
response.content_blocks
# [
# {
# "type": "reasoning",
# "reasoning": "...",
# },
# {
# "type": "web_search_call",
# "query": "...",
# "id": "...",
# "extras": {...},
# },
# {
# "type": "web_search_result",
# "urls": [...],
# "id": "...",
# "extras": {...},
# },
# {
# "type": "text",
# "text": "...",
# "annotations": [...],
# }.content_blocks의 출력에는 추론, 인용, 웹 검색, 코드 인터프리터 호출을 위한 새로운 타입이 포함되며, 또한 클라이언트 사이드 도구 호출과 이미지, PDF 문서, 오디오 같은 멀티모달 데이터에 대한 LangChain 타입도 포함됩니다.
표준 콘텐츠 블록은 현재 알파로 제공되며 다음을 포함합니다
- 채팅 컴플리션 API를 구현하는 공급자(OpenAI 포함)
- OpenAI Responses API
- Anthropic(Claude)
langchain 1.0은 모든 주요 공급자를 지원할 것입니다.
하위 호환성
- 중단적인 변경 없음; 기존 LangChain 애플리케이션과 100% 호환
.content_blocks는 캐시에 저장된 레거시를 포함한 모든 메시지 타입에서 작동
앞으로의 방향
표준 콘텐츠 블록은 더 신뢰할 수 있고 유지관리 가능한 LLM 애플리케이션을 향한 근본적인 단계입니다.
공급자 간 일관된 인터페이스를 제공함으로써, 다음을 할 수 있습니다:
- 안심하고 구축: 타입 안정성이 프로덕션 이전에 오류를 잡습니다
- 공급자 간 확장: 애플리케이션 로직을 재작성하는 데 시간을 들이지 않고 모델을 교체
- 애플리케이션 미래 대비: 새로운 제공자 기능이 기존 코드를 깨뜨리지 않고 즉시 작동
바로 사용해 보시겠어요? 우리의 마이그레이션 가이드와 기술 문서 를 확인하세요.