본문 바로가기

LangChain&LangGraph

langGraph 의 라우팅

 

# 목적

사용자의 질의를 풍성하게 하기위하여 Rewrite를 수행한다

Rewrite 된 내용을 기반으로 일반 대화인지, 내부 retreiver 를 활용할지, 웹에서 검색할지를 llm 이 판단한다

이때 판단하기위하여 baseModel을 활용한다

baseModel 은 본래 파이썬에서 클래스나 API 개발시 데이터 모델링에 사용되는 라이브러리로 타입을 정형화하여 타입 검사를 수행함

 

이를 활용하여 llm 의 with_structured_output 과 같이 활용하면 원하는 답변을 얻을 수 있음

 

 

 

# 구성도

 

 

Retriever 활용 로그

https://smith.langchain.com/public/3652730b-7b3a-4c62-9e2a-41f883356fe8/r

 

LangSmith

 

smith.langchain.com

 

일상 대화 활용 로그

 

https://smith.langchain.com/public/5aab4319-476b-4c13-8edb-6a3225c66ccf/r

 

LangSmith

 

smith.langchain.com

 

 

웹 검색 활용 로그

https://smith.langchain.com/public/34d0ed2d-3034-4ed4-8615-020019e3a716/r

 

LangSmith

 

smith.langchain.com

 

 

 

# 핵심

prompt 설명

 

# 예시 코드
from pydantic import BaseModel, Field
from typing import Any, Literal, Union

class RouteModel(BaseModel):   
"""        
model is possible one of choice about 'generate', 'web_search','vectorstore'   
"""   
              datasource : Literal['generate','web_search','vectorstore'] = Field(
                 ...,
                  description = 'Given a user "query" or "question", you choose to route web_search or a vectorstore or                      generate'   
)


llm = get_gemini()
structure_rotuer = llm.with_structured_output(RouteQuery)
prompt = get_routing_pt()
chain = prompt | structure_rotuer
question = '안녕?'
==> generate 


 

사용자가 " 안녕?" 이라는 질의를 할경우 generate 로 라우팅하도록 답변하는 역할을 수행한다

또한 프롬프트에서 어떤 상황에 어떤 routing을 선택할지 자세히 설명하면 설명할수록 성능이 향상된다.

 

agent 를 사용하여 tool 을 사용하게도 가능하지만 이런식으로 개발자의 의도를 담아 설계도 가능하다

 

 


 

 

# 앞으로..

 

State 설계가 생각보다 어렵다.. 

아직도 디버깅이 어색함

좀 더 개발을 하면서 디버깅 수행 능력을 향상시킬 필요가있음..