일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- langgraph
- chat_history
- subgraph
- pinecone
- LangChain
- 밑바닥부터시작하는딥러닝 #딥러닝 #머신러닝 #신경망
- rl
- langgrpah
- 밑바닥부터 시작하는 딥러닝
- removemessage
- conditional_edges
- rag
- tool_binding
- update_state
- 강화학습의 수학적 기초와 알고리듬 이해
- conditional_edge
- 강화학습
- human-in-the-loop
- 강화학습의 수학적 기초와 알고리듬의 이해
- humannode
- add_subgraph
- toolnode
- lcel
- Python
- tool_calls
- Ai
- REACT
- 추천시스템
- RecSys
- summarize_chat_history
- Today
- Total
목록분류 전체보기 (41)
타임트리
subgraph를 추가할 때, 메모리를 추가하면 언제든지 subgraph의 state를 확인하고 업데이트할 수 있다. 이를 활용하면 human-in-the-loop 패턴도 다양하게 사용 가능하다.그래프를 중단하고 사용자에게 state를 보여준 뒤, 사용자가 작업 수행 여부 결정subgraph를 rewind 해서 문제 재현 또는 방지사용자가 subgraph 작업 전 state 수정을 통해 제어1. subgraph 정의먼저 특정 도시의 날씨를 가져올 수 있는 간단한 subgraph를 정의하자. 그리고, weather_node 전에 그래프를 중단하도록 compile하자.with_structured_output 메서드는 LLM의 출력을 사전 정의된 pydantic 모델 타입으로 변환(pydantic이 아닌) 함..
LangGraph에서는 하나의 graph를 다른 graph에서 노드로 사용할 수 있다. 모듈화라는 측면에서 보았을 때, 특정 작업이나 기능 단위로 독립적인 graph를 구축하면 이들의 조합으로 하나의 큰 작업을 처리하는 parent graph를 생성 가능하다. 이처럼 subgraph를 사용한다면 다음과 같은 장점이 있다.멀티 에이전트 시스템 구축: 각 에이전트 subgraph가 독립적으로 작동하면서 parent graph에서 유기적으로 결합노드 재사용: 여러 graph에서 동일한 작업이 필요한 경우, 이를 subgraph로 정의해 두면 한 번 작성한 subgraph를 여러 parent graph에서 쉽게 재사용 가능.독립적인 작업 분리: 서로 다른 사람이 graph의 각 부분을 독립적으로 작업해야 할 때..
평소에 WSL(Windows Subsystem for Linux 2)을 자주 사용하다 보니, 매번 수동으로 실행하는 게 번거롭다고 느꼈습니다. 특히 개발 환경을 자주 세팅하거나 반복적인 작업을 할 때 이 과정이 생각보다 불편하더라고요. 그래서 윈도우 부팅 시 WSL을 자동으로 실행하도록 설정하는 방법을 알아보았습니다. 추가로, 만약 SSH 서버 접속을 위해서는 매번 달라지는 ip를 잡아줘야 하고, 이를 반영해서 WSL2의 네트워크 환경과 윈도우 호스트 간 포트 프록시 설정이 필요합니다. (WSL2는 가상 네트워크를 사용하기 때문에 WSL2가 실행될 때마다 동적 IP가 Hyper-V의 NAT(Network Address Translation) 네트워크에 의해 할당됩니다. 따라서 WSL2를 재시작할 때마다 ..
대화 기록 요약 추가멀티턴을 위해 대화 기록을 저장해두고, 모델 호출 시 프롬프트에 삽입하는 것은 채팅 관련 서비스에서 필수적인 기능 중 하나이다. 하지만 대화가 길어질수록 여러 제약이 따르는데, 예를 들면 Context length를 초과하게 되거나, Input token의 증가로 호출 비용이 증가하는 등의 문제가 있다. 그래서 일반적으로 대화 기록을 효과적으로 관리하는 방법을 사용한다.대표적으로 아래와 같은 방법들들이 있다.Vector DB Integration: 대화 이력을 임베딩 벡터로 저장하고, 유사도 검색으로 관련 대화 가져오는 방법. 맥락 검색 정확도가 높으나, 임베딩/검색 과정에서 추가 리소스 필요Sliding Window: 최근 K개의 대화를 저장해 최신 대화에 집중 가능하나, 과거 맥락..
병렬 노드 실행을 위한 브랜치 생성앞서 포스팅까지는 LangGrpah에서 하나의 노드에서 다른 여러 노드로 조건부로 분기하는 conditional_edge까지 다루고 있다. conditional_edge는 여러 노드 중 하나만 선택한다. 그런데, 만약 여러 프로세스를 동시에 처리가 필요한 경우를 생각해보자. 예를 들어, 리포트를 생성하고자 할 때 여러 관점(우호적/중립적/부정적)에서 각 LLM이 특정 주제에 대해 조사하도록 시키는 작업을 만들고자 한다. 이때 주황 박스로 표시한 부분은 순차적으로 처리하기보다는 병렬 처리를 통해 전체 그래프 작업의 속도 향상이 가능하다.다행히도 LangGraph는 Node의 병렬 실행을 기본적으로 지원한다. LangGraph에서 병렬 처리는 fan-out과 fan-in ..
LLM에 Tool을 binding 해서 LLM이 tool_calls를 생성했을 때, 적절한 arguments를 사용해 해당 tool을 실행하도록 하는 ToolNode에 대해 자세히 알아보자. 방금 작성한 그대로 로직을 작성할 수도 있지만(참고 - [LangGrpah] Tool Binding), LangGraph는 ToolNode를 사전 정의(pre-built)해서 제공한다. 내부적으로는 LLM에게 tool의 목록을 전달하고 (bind_tools), LLM이 사용자의 질문을 기반으로 tool 실행이 필요하다고 판단하면 해당 tool의 이름과 arguments를 반환한다. 그러면 해당 tool과 arguments로 함수를 실행하게 된다. 이때 tool list를 갖고, LLM이 반환한 tool_calls를 ..
메세지 삭제 방법일반적으로 State에는 messages라는 키로 리스트에 메세지 이력을 append 해가며 이력을 관리하게 된다.때로는 메세지를 삭제할 필요가 있을 수 있다. config별로 대화 내역을 쌓게 되는데, 내용이 너무 길어지면 컨텍스트가 너무 길어질 수 있다. 이외에도 필요없는 이력은 삭제하고 싶을 수 있다.이를 위해 RemoveMessage라는 reducer를 사용할 수 있다. RemoveMessage에 동일한 ID를 갖는 메세지를 자동으로 삭제해준다.간단한 웹 서치 그래프 정의먼저 간단하게 web search를 모방하는 search 함수를 tool로 정의하고 이를 binding한 LLM을 사용하여 그래프를 만들어보자. # web search graph 구축from typing impor..
기존까지는 graph를 stream 메서드로 실행하며, interrupt_before 혹은 interreupt_after 옵션으로 Tool Node가 호출되는지 여부에 따라 항상 중단시켰다. 그런데 만약 LLM이 직접 판단해서 필요한 경우 사람의 도움을 요청하도록 하고 싶다면 어떻게 해야할까? LLM이 사람의 개입이 필요할지에 대한 판단을 직접 내리도록 하는 방법 중 하나는 human 노드를 정의하고 해당 노드에 방문할 때는 항상 중단시키도록 하는 것이다. 대신, 이전 노드에서 다음 스텝으로 human node 로 갈지말지에 대한 판단은 HumanAssistance 도구를 LLM이 호출하는지로 판단하도록 한다.human 노드를 추가하고, 이 노드에서는 항상 중단LLM이 HumanAssistance too..