본문 바로가기

LangChain&LangGraph

plan & execute agent

# 목적

 

1. 사용자의 질의의도를 파악하여 실행 순서를 작성

2. 실행순서에 맞게 도구 선택하여 실행

3. 실행 결과 최종 취합

4. 하나의 리포트 양식등 템플릿에 맞춰 최종 답변 생성

 

# 구성도



# Flow 

1. 사용자 질의 : 'RAG 개발의 핵심'

2. plan_node : 실행 순서 생성

  • 1. RAG 개발의 핵심 요소를 설명합니다.
  • 2. 각 핵심 요소에 대한 자세한 내용을 설명합니다.
  • 3. RAG 개발의 전반적인 중요성을 강조하며 마무리합니다.

3. agent : 질문과 답변 전달

Q : step 1. RAG 개발의 핵심 요소를 설명합니다.
A : RAG(Retrieval-Augmented Generation) 개발의 핵심 요소는 다음과 같습니다.

**검색(Retrieval)**: 사용자 질문과 가장 관련성이 높은 정보를 외부 데이터베이스에서 효과적으로 찾아내는 과정입니다.
**생성(Generation)**: 검색된 정보를 바탕으로 사용자 질문에 대한 답변을 자연스럽고 정확하게 생성하는 과정입니다.
**통합(Integration)**: 검색된 정보와 생성 모델을 유기적으로 결합하여 RAG 시스템의 성능을 최적화하는 과정입니다.

 

4. replan : agent 답변 판단

 

5. agent : 질문과 답변 전달

Q : step 2. 각 핵심 요소(검색, 생성, 통합)에 대한 자세한 내용을 설명합니다.
A :  Question :각 핵심 요소(검색, 생성, 통합)에 대한 자세한 내용을 설명합니다.
 Response :알겠습니다. RAG 개발의 핵심 요소인 검색, 생성, 통합에 대해 자세히 설명해 드리겠습니다.

 

**1. 검색(Retrieval)** 이란~~~

**2. 생성 (Generation)** 이란 ~~

**3. 통합 (Integration)** 이이란 ~~

 

6. replan : agent 답변 판단

A : RAG 개발의 전반적인 중요성을 강조하며 마무리합니다

 

7. agent : 질문과 답변 전달

Question :RAG 개발의 전반적인 중요성을 강조하며 마무리합니다.
Response :RAG(Retrieval-Augmented Generation) 개발은 방대한 정보 속에서 정확하고 신뢰할 수 있는 답변을 생성하는 데 필수적입니다. RAG는 검색과 생성을 결합하여 최신 정보를 반영하고 환각 현상을 줄여 사용자에게 더 나은 경험을 제공합니다. 따라서 RAG 기술의 지속적인 발전과 적용은 AI 기반 서비스의 미래 경쟁력을 좌우할 중요한 요소입니다.

 

 

8. replan : agent 답변 판단

추가로 궁금한 점이 있으시면 언제든지 질문해 주세요.

 

9. final_generate_node : 최종 답변

~~~

 

# 로그

https://smith.langchain.com/public/fc983b15-8de4-4f50-91fa-d30b08e24530/r

 

LangSmith

 

smith.langchain.com

# 핵심

- 그전까지는 create_tool_calling_agent 활용,  여기서부터 create_react_agent 활요

create_react_agent : reasoning 과정과 act 과정을 노출 시켜 디버깅 및 개발을 효율적 지원

 

- llm 이 도구를 사용하고나 BaseModel의 타입을 사용하는 부분에 있어서  llm 모델의 성능에 영향을 크게 미침

특히 with_structured_output에서 Act class 를 사용하는데 

Act Class는 action 이라는 변수에 Response 객체와  Plan 객체만 사용 가능하다

llm 성능에 따라 Reponse, Plan 타입의 객체에 변수까지 정확하게 생성 가능하다

class Plan(BaseModel):
    """Sorted steps to execute the plan"""
    steps: Annotated[List[str],"Different steps to follow, should be in sorted order"]

class Response(BaseModel):
    """Response to user."""
    # 사용자 응답
    response: str

class Act(BaseModel):
    """Action to perform."""
    # LLM 이 판단하여 Reponse 인지 Plan 인지 선택하는 모델
    # 만약 Response 인경우 response 변수에 답변 생성
    # 그외 Plan 인경우 step 변수에 답변 생성
    action: Union[Response, Plan] = Field(
        description="Action to perform. If you want to respond to user, use Response. "
        "If you need to further use tools to get the answer, use Plan."
    )
 
 
def replan_node(state:State)-> State:
    # 판단 llm
    prompt = get_prompt_replanner()
    chain = prompt | get_gpt().with_structured_output(Act)
    outputs =  chain.invoke({'input':state['question'],'plan':state['plan'],'past_steps':state['past_steps']})
   if isinstance(outputs.action,Response):
        return State({'answer':outputs.action.response})
    else:  # result == Plan
        next_plan = outputs.action.steps
        if len(next_plan) == 0:
            return {"answer": "No more steps needed."}
        else:
            return {"plan": next_plan}

 

https://github.com/baaaaaaaaaaaaamtest/AI_application/blob/master/11.semi_project/6.practice.ipynb

 

AI_application/11.semi_project/6.practice.ipynb at master · baaaaaaaaaaaaamtest/AI_application

Contribute to baaaaaaaaaaaaamtest/AI_application development by creating an account on GitHub.

github.com