"LangChain의 기본 요소(프롬프트, 모델)를 연결하여,
사용자가 입력한 텍스트의 말투(스타일)를 지정된 규칙대로 변환해주는 프로그램을 만들고 실행하는 것."
[ 간단 복습 ]
LangChain은 대형 언어 모델(LLM)을 기반으로 한 애플리케이션을 개발하기 위한 오픈소스 프레임워크이다.
LLM의 기능을 외부 데이터 소스, 도구, 메모리와 연결하여 복잡한 워크플로를 쉽게 구축할 수 있게 한다.
다양한 구성요소를 함께 '체이닝'하여 LLM 기반 애플리케이션을 위한 일관된 워크플로를 만든다.
이 모듈식 접근방식은 복잡한 언어 기반 AI 시스템을 재사용 가능한 부분으로 분해한다.
사용자가 쿼리를 제출하면 LangChain은 일련의 단계를 거쳐 이 입력을 처리할 수 있다.
1단계: 환경 설정 및 API 키 입력
1-1. 라이브러리 설치
Colab 환경에서 실행했고, 우선 명령어를 통해 필요한 라이브러리를 설치.
pip install langchain anthropic
1-2. API 키 설정
api key를 안전하게 사용하기 위해서 보안 비밀 메뉴에 Open API Key를 저장한 후, 호출해서 사용.

1-3. API 키 설정 코드

2단계: 프롬프트 엔지니어링 (Prompt Template)
[ 트러블 ]
처음에는 LLMChain을 활용하려 했으나, 랭체인 버전 업데이트로 인한 모듈 경로 문제와 호환성 이슈를 발생.
이를 해결하기 위해 랭체인에서 가장 권장하는 최신 문법인 LCEL(LangChain Expression Language) 도입.
LCEL(LangChain Expression Language)은 LangChain에서 체인을 선언적으로 구성하는 문법으로,
파이프 연산자 |를 사용해 컴포넌트를 연결한다.
기존 LLMChain을 대체하며, 스트리밍, 비동기, 배치 처리 등을 기본 지원해 프로덕션 배포를 간편하게 한다.
기존 LangChain 방식과 LCEL을 비교했을 때, 가장 큰 차이는 구성의 자유도와 내부 투명성에 있다.
기존 방식은 정해진 매개변수 외에 커스텀이 까다로운 반면, LCEL은 단계별로 기능을 쉽게 끼워넣을 수 있다.
from langchain.chains import LLMChain
legacy_chain = LLMChain(prompt=prompt, llm=llm)
result = legacy_chain.run("질문")
기존방식 : 내부가 캡슐화되어 있어 흐름을 파악하기 힘듦
lcel_chain = prompt | llm | StrOutputParser()
result = lcel_chain.invoke("질문")
LCEL 방식 : 파이프를 통해 프롬프트 → 모델 → 결과 의 흐름을 확인
3단계: 랭체인(LangChain) 구축 및 모델 설정
3.1. 환경 설정 및 보안 (Security)
import os
from google.colab import userdata
os.environ["ANTHROPIC_API_KEY"] = userdata.get("ANTHROPIC_API_KEY")
API 키를 코드를 직접 노출하지 않고 userdata를 통해 안전하게 불러온다.
3.2. 모델 설정 (Model Definition)
from langchain_anthropic import ChatAnthropic
model = ChatAnthropic(model="claude-3-haiku-20240307", temperature=0)
사용자의 요청을 처리할 AI 모델을 설정하고, 모델의 창의성을 0으로 설정해,
매 실행마다 일관되고 정확한 결과를 내도록 설정한다.
3.3. 프롬프트 설계 (Prompt Engineering)
from langchain_core.prompts import PromptTemplate
template = """당신은 문체 변환 전문가입니다. 다음 문장을 1인칭으로, 20대 대학생 문체 스타일로 변환하세요.
예의 바르고 공손하지만 할 말은 하는 성격의 대학생 입니다.
모든 입력값은 변환하는 당사자가 하는 말이라고 생각하고 변환하세요. 입력값 자체가 발화 주체입니다.
한 문장 끝낼 때마다 들여쓰기 하십시오.
문장: {text}"""
prompt = PromptTemplate.from_template(template)
"문체 변환 전문가"라는 페르소나를 부여하고, 추가적으로 제약 조건을 통해 품질을 높인다.
{text}로 나중에 실제 입력값이 들어갈 자리를 비워둔다.
3.4. 체인 연결 (LCEL - LangChain Expression Language)
from langchain_core.output_parsers import StrOutputParser
chain = prompt | model | StrOutputParser()
프롬프트→모델 → 출력 순서로 데이터가 흐를 수 있도록 LCEL를 사용한다.
3.5. 실행 및 결과 처리 (Execution)
result = chain.invoke({"text": input_text})
invoke는 체인을 실제로 가동시키는 명령어.
4단계: 출력 결과

