LLM을 쉽게 다룰 수 있게 해주는 프레임워크
마치 tensorflow를 쓰듯이 LLM을 사용하는 일련의 과정을 정의하여 파이프라인으로 실행하는 형태로 정의하면 우리가 원하는 LLM 어플리케이션을 쉽게 만들고 배포할 수 있다.
pip install langchain
pip install langchain-openai
원하는 모델을 정의하고 invoke() 메서드를 통해 메세지를 전달한다.
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.messages import HumanMessage, SystemMessage
import os
os.environ['OPENAI_API_KEY'] = 'API-Key'
# model
model = ChatOpenAI(model="gpt-4o-mini")
messages = [
SystemMessage(content="Translate the following from English into Korean"),
HumanMessage(content="Love")
]
model.invoke(messages)
application logic usually takes the raw user input and transforms it into a list of messages ready to pass to the language model
일반적으로 application logic에서 user input을 받고 변환을 하는 등 다양한 작업을 한 뒤의 메세지를 llm에 던짐.
https://python.langchain.com/docs/tutorials/llm_chain/
prompt와 LLM 모델을 연결하여 chain을 구성
pipe operator ‘|’ 를 이용한다.
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.messages import HumanMessage, SystemMessage
import os
os.environ['OPENAI_API_KEY'] = 'API-Key'
# model
model = ChatOpenAI(model="gpt-4o-mini")
system_template = "Translate the following from English into {language}"
prompt_template = ChatPromptTemplate.from_messages(
[("system", system_template), ("user", "{text}")]
)
chain = prompt_template | model
result = chain.invoke({"language": "German", "text": "Good Morning"})
print(result)
chain1에서 출력한 값을 입력값으로 받아서, 이 번역된 단어를 english_word 변수에 저장한다.
다음으로, 이 변수를 사용하여 두 번째 체인의 입력으로 제공하고, 영어 단어의 뜻을 설명하는 작업을 수행한다.
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser
import os
os.environ['OPENAI_API_KEY'] = 'API-Key'
# model
model = ChatOpenAI(model="gpt-4o-mini")
prompt1 = ChatPromptTemplate.from_template("translates {korean_word} to English.")
prompt2 = ChatPromptTemplate.from_template(
"explain {english_word} using oxford dictionary to me in Korean."
)
chain1 = prompt1 | model | StrOutputParser()
chain2 = (
{"english_word": chain1}
| prompt2
| model
| StrOutputParser()
)
# result1 = chain1.invoke({"korean_word" : "사과"})
# print("chain 1 result >> ", result1)
result2 = chain2.invoke({"korean_word":"사과"})
print("chain 2 result >> ", result2)
langchain에서 사용자 정의 체인을 쉽게 생성하고 관리할 수 있도록 정의한 프로토콜
마치 REST API에서 CRUD, GET Post GetData 처럼
ainvoke, abatch, astream 등의 메소드는 각각의 동기 버전에 대한 비동기 실행을 지원. 비동기 프로그래밍 패러다임을 사용하여 더 높은 처리 성능과 효율을 달성