1. Runnable 인터페이스
Runnable은 데이터를 입력받아 특정 작업을 수행한 후 결과를 반환하는 추상적인 인터페이스다.
LangChain의 파이프라인 작업에서 데이터 흐름과 처리를 표준화하기 위해 사용된다.
Chain은 Runnable 객체를 연결하여 작업을 순차적으로 처리한다.
#runnable 구현체들을 연결함
chain = prompt | llm | StrOutputParser()
1-1.RunnablePassthrough()
입력 데이터에 대해 아무런 변경 없이 그대로 출력하는 단순히 데이터를 흐르게 하는 중간 연결점 역할을 수행한다.
from langchain_core.runnables import RunnablePassthrough
# 들어간 데이터를 그대로 반환하는 RunnablePassthrough 클래스
passthrough = RunnablePassthrough()
result = passthrough.invoke({"key": "value"})
print(result)
#결과
{'key': 'value'}
1-2.RunnableParallel
여러 Runnable을 병렬로 실행할 수 있도록 하며, 각 Runnable이 독립적으로 실행되어 그 결과를 동시에 받아올수있다.
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
runnable = RunnableParallel(
passed=RunnablePassthrough(),
extra=RunnablePassthrough.assign(mult=lambda x: x["num"] * 3),
modified=lambda x: x["num"] + 1,
)
print(runnable.invoke({"num": 1}))
#
{'passed': {'num': 1}, 'extra': {'num': 1, 'mult': 3}, 'modified': 2}
Chain을 병합하여 사용할수있다.
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnableParallel
from langchain_core.output_parsers import StrOutputParser
from langchain_ollama import OllamaLLM
llm = OllamaLLM(model="llama3.1")
chain1 = (PromptTemplate.from_template(template="""{country}의 수도는 어디입니까?""")
| llm
| StrOutputParser()
)
chain2 = (PromptTemplate.from_template(template="""{country}는 어느대륙에 있습니까?""")
| llm
| StrOutputParser()
)
combined_chain = RunnableParallel(capital=chain1, Confession=chain2)
while True:
country = input("나라를 입력하세요: ")
result = combined_chain.invoke({"country": country})
print(result)
#결과
나라를 입력하세요: 한국
{'capital': '서울입니다.', 'area': '아시아입니다.'}
1-3.RunnableLambda
람다 함수를 Runnable로 변환하여 사용하는 방법
사용자 정의 함수를 맵핑할수있다.
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnableLambda,RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
from langchain_ollama import OllamaLLM
from datetime import datetime
llm = OllamaLLM(model="llama3.1")
def get_today(a):
# 오늘 날짜를 가져오기
return datetime.today().strftime("%b-%d")
prompt=PromptTemplate.from_template("""{country}의 수도는 어디입니까? {country}의 {today}는 무슨요일인가요?""")
chain1 = (
{"today":RunnableLambda(get_today),"country": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
while True:
country = input("나라를 입력하세요: ")
result = chain1.invoke({"country": country})
print(result)
나라를 입력하세요: 한국
'한국'의 수도는 서울입니다.
한국의 1월 11일은 화요일입니다.
'AI' 카테고리의 다른 글
[LangChain]PromptTemplate, ChatPromptTemplate (0) | 2025.01.11 |
---|---|
[LangChain] LangChain Expression Language(LCEL) (0) | 2025.01.10 |
[LangChain] llama 로컬환경에서 사용하기 (0) | 2025.01.10 |