inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

KG 검색 - 2) 미디어 노출 분석 (text2cypher 활용)

노드 키 이름 설정 관련

8

HYUN TAEK CHOI

작성한 질문수 6

0

31강. 2분 20초쯤에

result = cypher_chain.invoke({"query": "엔비디아를 언급한 기사는 몇 개인가요"})

결과를 설명하는 과정에서, 제미나이는 key를 name으로 해서 결과를 얻지 못했습니다. 저는 gpt-4.1-mini로 했더니 key를 id로 만들어서 1건을 찾았거든요.

key를 name으로 하던 id로 하던 자유이기는 한데, 되는 경우가 있고 안되는 경우가 있으면 안되는것 아닌가요? cypher 문법으로 변환할 때, schema를 참고해서 하나요?

후반에 id key를 모두 name으로 바꾸고 해보면, 바로 name로 찾아서 한건이라 답을 주네요. 이떄 일부러 schema refresh 하지 않고 해봤는데도요...

답변 2

0

판다스 스튜디오

안녕하세요! 정확하게 짚어주셨습니다.

LLMGraphTransformer는 엔티티 이름을 id에 넣고, 언론사는 MERGE (c:Company {name: source})로 추가되기 때문에 Company에 두 개의 키가 공존합니다.

- **Company**
  - `id`  : ['Apple', '메타', '삼성전자', '엔비디아', '구글']
  - `name`: ['디지털타임스', '전자일보']

이 상태에서는 c.name을 고르든 c.id를 고르든 스키마 위반이 아닙니다. 제미나이는 관례대로 name을, gpt-4.1-mini는 예시 값을 보고 id를 선택했을 뿐입니다. 모델 차이라기보다 스키마가 모호했던 것이고, 이어지는 셀에서 idname으로 정규화하는 것이 그 해결 과정입니다. text2cypher에서 가장 흔한 실패 원인이라 실습으로 한 번 짚고 가는 구간입니다.

refresh 없이 name으로 찾은 것도 스키마가 반영돼서가 아니라 DB가 모델의 선택(name)에 맞춰진 것으로 봐야 합니다. 스키마 변경 후에는 체인을 다시 생성해 주셔야 합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. HYUN TAEK CHOI님.

질문하신 현상은 LLM이 스키마와 프롬프트를 참고해 Cypher를 생성하더라도, 결과 컬럼의 alias(name, id 등)를 항상 동일하게 생성한다고 보장할 수 없기 때문에 발생할 수 있습니다.

name이나 id는 Cypher 문법상 반드시 정해진 키가 아니라, 다음과 같이 LLM이 임의로 지정할 수 있는 결과 변수명입니다.

RETURN count(article) AS name

또는

RETURN count(article) AS id

두 쿼리 모두 실행 자체는 가능하지만, 이후 코드에서 result["name"]처럼 특정 키를 기대하고 있다면 alias가 달라지는 순간 결과를 읽지 못할 수 있습니다. 따라서 Cypher 실행 결과의 키 이름을 후속 코드가 어떻게 사용하는지까지 고려해야 합니다.

Text2Cypher에서는 일반적으로 Neo4j의 노드 라벨, 관계 타입, 속성명 등의 스키마를 LLM에 전달하여 쿼리를 생성합니다. 다만 스키마는 주로 “어떤 데이터를 어떤 이름으로 조회할지”를 알려주는 역할이며, 결과 alias를 항상 name으로 만들도록 보장하지는 않습니다. 이를 안정화하려면 다음과 같은 방법을 사용할 수 있습니다.

  • 프롬프트에 결과 컬럼의 alias는 항상 name을 사용하라고 명시
  • Few-shot 예시에서 원하는 RETURN ... AS name 형식을 반복해서 제시
  • 실행 후 결과를 읽을 때 첫 번째 컬럼을 사용하거나 alias를 표준화
  • 구조화된 출력 형식 또는 고정된 응답 스키마 사용
  • 생성된 Cypher를 실행하기 전에 alias와 속성명을 검증하는 로직 추가

이와 관련하여 LLM이 스키마를 전달받았음에도 Cypher의 관계명을 잘못 생성하는 문제와 완화 방법을 다룬 기존 답변을 참고해 보시면 도움이 됩니다.

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

해당 답변에서도 LLM의 Cypher 생성 결과는 모델 성능이나 프롬프트에 따라 달라질 수 있으며, Few-shot 프롬프트와 더 명확한 출력 규칙을 통해 오류를 줄일 수 있다고 설명하고 있습니다.

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

같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!

2

66

1

스타터 저장소

1

43

1

자료 다운로드 링크 오류

1

37

2

강의영상 버퍼링

1

39

4