inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

graphRAG - Neo4J로 구현하는 지식 그래프 기반 RAG 시스템 (feat. LangChain)

graphRAG 구현 (랭체인 LCEL 활용)

쿼리문 질문 드립니다.

86

내일은 한걸음 더 나아갈거야

작성한 질문수 70

0

"graphRAG 구현 (랭체인 LCEL 활용)" 부분입니다.

WHERE ANY(title IN $movie_titles WHERE movie.title CONTAINS title)

부분을 아래와 같이 수정
WHERE movie.title IN $movie_titles

수정한 이후에 건수가 제대로 나오질 않았습니다. ( 참고 $movie_titles 는 4건인데

최총 추출되는 것은 2건입니다.)

단순히 생각하면 title 이 추출된 title 에 포함되어 있는 movie 만 추출하면 될 거 같은데..제대로 동작하지 않네요...왜 그런지 설명 부탁드립니다.

WHERE 절 안에 다시 WHERE 절이 있는 것도 잘 모르겠습니다.

감사합니다.

dbms/rdbms neo4j llm langchain rag 카카오공채-개발

답변 3

1

내일은 한걸음 더 나아갈거야

친절한 답변 감사드립니다.

1

판다스 스튜디오

안녕하세요. 판다스 스튜디오입니다.

좋은 질문 감사드립니다.

 

두 쿼리의 차이는 매칭 방식에 있습니다. WHERE ANY(title IN $movie_titles WHERE movie.title CONTAINS title) 쿼리는 부분 문자열을 포함하는지 확인합니다. 예를 들면, "Matrix"가 "The Matrix"에 포함되면 매칭됩니다.

반면, WHERE movie.title IN $movie_titles 쿼리는 정확히 일치하는 조건을 나타냅니다. 따라서, "Matrix"와 "The Matrix"는 다른 문자열이므로 매칭되지 않습니다.

 

그리고, ANY(title IN $movie_titles WHERE movie.title CONTAINS title) 구문은 Cypher의 리스트 축약 문법입니다. $movie_titles 리스트의 각 title에 대해 movie.title CONTAINS title 조건을 확인하고 하나라도 참이면 전체가 참이 됩니다. (부분 문자열 매칭)

 

GraphRAG에서는 LLM이 영화 제목을 정확히 추출하지 못할 수 있으므로, CONTAINS를 사용한 부분 매칭이 더 유연하고 실용적인 방법입니다.

 

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 내일은 한걸음 더 나아갈거야님.

질문해주신 부분에 대해 답변 드리겠습니다. 여러분의 코드와 관련하여 WHERE 절의 사용이 결과에 영향을 미치는 이유를 이해하는 것은 매우 중요합니다.

  1. ANY와 CONTAINS의 사용:

    • ANY(title IN $movie_titles WHERE movie.title CONTAINS title)는 $movie_titles 리스트 안의 어떤 요소라도 현재 movie.title 속에 포함되는지를 묻는 조건입니다. 즉, 각 영화 제목이 주어진 리스트 안의 어떤 부분 문자열이라도 포함하고 있는지를 찾는데 유용합니다.
  2. IN 연산자의 사용:

    • 반면, WHERE movie.title IN $movie_titlesmovie.title이 정확하게 $movie_titles 리스트의 요소와 일치하는 경우만 찾습니다. 이는 리스트 안의 요소들과 완전한 일치만을 조건으로 하기 때문에, CONTAINS를 사용하는 것과는 다르게 작동합니다.

이러한 차이점은 CONTAINS가 부분 문자열 비교를 허용한다는 데 있습니다. 따라서 CONTAINS를 사용하면 더 많은 결과를 검색하게 되고, 영화 제목이 제공된 리스트의 한 부분이라도 포함되어 있는 모든 레코드를 반환할 수 있습니다. 반면, IN 연산자는 입력된 제목과 정확하게 일치하는 것을 찾으므로, 부분 문자열이 아닌 경우 결과가 나오지 않을 수 있습니다.

또한, 이 설명과 관련하여 추가적으로 네오4제이(Neo4j)와 랭체인을 활용한 데이터 쿼리 방법에 대한 다양한 조언이 포함된 관련 질문을 참고해 주시면 다양한 사례에 대한 심도 있는 정보를 얻을 수 있을 것입니다.

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

18강 smithery 를 이용한 mcp 실습(업데이트 요청)

0

4

1

guardrails 부분도 현재버전과 약간 다릅니다.

0

5

0

간단한 오타 제보입니다.

0

3

0

smithery ai 언제 업데이트 되나요?

0

10

0

큰 범위 조회 시 EXPLAIN의 rows 값이 정확하지 않은 이유가 궁금합니다.

0

19

1

뉴스 데이터 전처리 실습 파일 부재

0

53

3

강의 github 어디에 있나요?

0

52

2

graphRAG - Neo4J로 구현하는 지식 그래프 기반 RAG 시스템 (feat. LangChain)

0

117

2

프로젝트 설정 (uv 설치, ..) -> 해당 영상 자료 없음

0

72

1

test.py 파일이 어딨나요?

0

70

2

EasyOcr 관련

0

64

2

neo4j 사용에 질문 드립니다.

0

60

2

fulltext index 생성이 안됩니다

0

52

2

2강 main.py 파일

0

91

3

neo4j 데스크탑 config파일설정변경

0

94

2

Preview KG_P1_02_neo4j_cypher_advanced.md자료

0

55

1

id(actor) 와 관련한 질문입니다

0

48

2

프로젝트 4 법률 실습데이터 존재하지 않음

0

58

2

LangChain 질문

0

67

2

neo4j의 장점

0

109

2

neo4j-nori-analyzer 출처 문의

0

91

2

2강에서 Aura에 파이썬으로 접속 안 됩니다.

0

139

2

AuraDB 연동 안되는 현상 질문

0

153

1

Text2Cypher 기법에서 Llm이 작성하는 cypher 코드의 오타 발생 문제

0

321

2