강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

pwk0408님의 프로필 이미지
pwk0408

작성한 질문수

LangGraph를 활용한 AI Agent 개발 (feat. MCP)

2.3 공식문서 따라하면 실패하는 Agentic RAG

2.3강 18분 initial_state에서 오류가 납니다

작성

·

23

0

안녕하세요 langchain강의를 듣고 도움이 되어 langgraph 강의도 열심히 수강하고 있습니다!

 

2.2강의에서 알려주신 langsmith의 hub가 공식문서에는 client로 변경이 되어 그에 맞게 수정을 했습니다.

from langsmith import Client
from langchain_openai import ChatOpenAI
LANGSMITH_API_KEY = os.getenv("LANGSMITH_API_KEY")
client = Client(api_key=LANGSMITH_API_KEY)
prompt = client.pull_prompt("rlm/rag-prompt", include_model=True)
llm = ChatOpenAI(model = 'gpt-4o')

같은 방법으로 2.3 강에서도

# Create a LANGSMITH_API_KEY in Settings > API Keys
from langsmith import Client
from typing import Literal
from langchain_core.output_parsers import JsonOutputParser 

client = Client(api_key=LANGSMITH_API_KEY)
doc_relevance_prompt = client.pull_prompt("langchain-ai/rag-document-relevance", include_model=True)

def check_doc_relevance(state: AgentState) -> Literal['generate', 'rewrite']:
    query = state['query']
    context = state['context']
    print(f'context == {context}')
    doc_relevance_chain = doc_relevance_prompt | llm   #prompt를 활용해서 llm을 호출한다.
    response = doc_relevance_prompt.invoke({'question': query, 'documents': context})
    print(f'doc relevance response: {response}')
    if response['Score'] == 1:
        return 'generate'
    
    return 'rewrite'

이런 식으로 진행하고 있습니다.

그래서 그런지 graph.invoke(initial_state)를 하면

image.png

이런 오류가 나는데 langsmith의 client 때문일까요? 아니면 다른 부분에 있는 걸까요?

답변 2

0

강병진님의 프로필 이미지
강병진
지식공유자

안녕하세요! 좋은 질문 감사합니다. 코드에 오타가 있어서 에러가 발생하는 것 같은데요, 제공해주신 코드에서

def check_doc_relevance(state: AgentState) -> Literal['generate', 'rewrite']:
    query = state['query']
    context = state['context']
    print(f'context == {context}')
    doc_relevance_chain = doc_relevance_prompt | llm   #prompt를 활용해서 llm을 호출한다.
    response = doc_relevance_prompt.invoke({'question': query, 'documents': context}) # 여기서 doc_relevance_chain.invoke()
    print(f'doc relevance response: {response}')
    if response['Score'] == 1:
        return 'generate'
    
    return 'rewrite'

여기서 doc_relevance_prompt.invoke() 대신 doc_relevance_chain.invoke() 를 해주시면 정상적으로 동작할 것 같습니다!

0

안녕하세요, 인프런 AI 인턴입니다. pwk0408님께서 질문하신 문제는 'ChatPromptValue' object is not subscriptable 오류로 인한 것입니다. 이 문제는 종종 데이터 타입 간의 불일치 때문에 발생하며, 보통 리스트나 딕셔너리를 인덱싱할 때 오류가 납니다.

문제 원인

  1. ChatPromptValue 상황: promptllm의 연결 시 의도하지 않은 객체 타입이 반환되는 경우 발생할 수 있습니다. 이 객체는 리스트가 아닌데, 리스트처럼 인덱싱 시도할 때 오류가 발생합니다.

  2. 오류 위치: response = doc_relevance_prompt.invoke({'question': query, 'documents': context}) 부분에서 invoke 메소드가 잘못된 데이터 타입의 값을 반환할 수 있습니다.

해결 방법

  1. 목적에 맞는 오브젝트 반환 확인:

    • client.pull_prompt() 를 활용한 doc_relevance_prompt가 의도대로 설정됐는지 확인하십시오. 반환되는 객체가 제대로 설정되어 있는지와 타당했는지 출력해 보는 것도 좋습니다.
  2. 데이터 타입 검증 및 처리:

    • response가 예상한 데이터 타입이 맞는지 검토하고, 그에 맞는 방법으로 데이터를 처리할 수 있게 변경해 보십시오.
    • response의 실제 반환되는 형태를 살펴보세요. 만약 필요한 형태가 아닌 경우 변환하는 로직을 추가해야 합니다.
  3. 디버깅 로그 추가:

    • print() 문을 활용하여 각 단계에서 반환되는 데이터 타입과 내용을 확인해 보십시오. 마찬가지로 함수 호출 전후로 상태를 기록하여 흐름을 확인할 수 있습니다.

관련 유사 질문 링크:
- 관련 링크가 없습니다, 유사한 경우 일반적인 디버깅 방법: 비슷한 문제 해결 과정에서 사용자들이 공통적으로 제기한 이슈가 도움될 수 있습니다.

이 문제 해결에 도움을 드리고자 관련 내용을 설명하였습니다. ChatPromptValue 객체의 반환 형태를 주의 깊게 살펴보시면 문제 해결에 큰 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

pwk0408님의 프로필 이미지
pwk0408

작성한 질문수

질문하기