포도가게의 개발일지

바닥부터 LangChain(1) 본문

Tech

바닥부터 LangChain(1)

grape.store 2024. 12. 20. 16:10
반응형

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
Comments