포도가게의 개발일지
바닥부터 LangChain(1) 본문
LangChain Core
- langchain-core는 LangChain 생태계에서 사용하는 기본 추상화와 LangChain 표현 언어를 포함하는 패키지입니다.
LangGraph
- langgraph는 상태 기반의 다중 행위자 애플리케이션을 구축하는 라이브러리로, LangChain과 원활하게 통합되지만 독립적으로 사용할 수도 있습니다.
LangServe
- LangServe는 LangChain 실행 가능 함수와 체인을 REST API로 배포할 수 있도록 도와줍니다.
Runnable
- Runnable은 LCEL로 생성된 체인을 의미하며, 이는 Runnable 인터페이스를 구현한 객체입니다.
• 단일 LLM 호출: LCEL을 사용하지 않고 모델을 직접 호출하는 것이 좋습니다.
• 간단한 체인(예: 프롬프트 + LLM + 파서 등): LCEL은 적합합니다.
• 복잡한 체인(예: 분기, 사이클, 여러 에이전트 등): LangGraph를 사용하는 것이 좋습니다. 하지만 LangGraph의 개별 노드에서 LCEL을 사용할 수 있습니다.
from langchain_core.messages import AIMessage, HumanMessage, ToolMessage
examples = [
HumanMessage("Tell me a joke about planes", name="example_user"),
AIMessage(
"",
name="example_assistant",
tool_calls=[
{
"name": "joke",
"args": {
"setup": "Why don't planes ever get tired?",
"punchline": "Because they have rest wings!",
"rating": 2,
},
"id": "1",
}
],
),
# Most tool-calling models expect a ToolMessage(s) to follow an AIMessage with tool calls.
ToolMessage("", tool_call_id="1"),
# Some models also expect an AIMessage to follow any ToolMessages,
# so you may need to add an AIMessage here.
HumanMessage("Tell me another joke about planes", name="example_user"),
AIMessage(
"",
name="example_assistant",
tool_calls=[
{
"name": "joke",
"args": {
"setup": "Cargo",
"punchline": "Cargo 'vroom vroom', but planes go 'zoom zoom'!",
"rating": 10,
},
"id": "2",
}
],
),
ToolMessage("", tool_call_id="2"),
HumanMessage("Now about caterpillars", name="example_user"),
AIMessage(
"",
tool_calls=[
{
"name": "joke",
"args": {
"setup": "Caterpillar",
"punchline": "Caterpillar really slow, but watch me turn into a butterfly and steal the show!",
"rating": 5,
},
"id": "3",
}
],
),
ToolMessage("", tool_call_id="3"),
]
system = """You are a hilarious comedian. Your specialty is knock-knock jokes. \
Return a joke which has the setup (the response to "Who's there?") \
and the final punchline (the response to "<setup> who?")."""
prompt = ChatPromptTemplate.from_messages(
[("system", system), ("placeholder", "{examples}"), ("human", "{input}")]
)
few_shot_structured_llm = prompt | structured_llm
few_shot_structured_llm.invoke({"input": "crocodiles", "examples": examples})
예시 데이터 (Examples)
examples는 모델에게 입력-출력 쌍의 예시를 제공하여, 특정 주제에 대해 어떤 형식으로 응답할지 학습시키는 데 사용됩니다. 이러한 예시는 모델이 더 좋은 출력을 생성하도록 유도하는 데 중요한 역할을 합니다.
• HumanMessage는 사용자가 실제로 요청하는 입력입니다.
• AIMessage는 그에 대한 예상 응답을 정의한 것입니다. 모델이 이 예시를 통해 어떤 방식으로 응답해야 하는지를 학습하게 됩니다.
• ToolMessage는 해당 도구 호출을 추적하는 메시지로, AIMessage에서 설정한 도구 호출이 실제로 이루어졌음을 나타냅니다.
'Tech' 카테고리의 다른 글
바닥부터 LangFlow(3) (0) | 2024.12.24 |
---|---|
바닥부터 LangGraph(2) (0) | 2024.12.24 |
바닥부터 LangChain(0) (3) | 2024.12.20 |
[k8s] Strategy for Gitops (0) | 2024.04.27 |
[K8S] AWS EKS IRSA 동작 (0) | 2024.04.23 |