해결된 질문
작성
·
41
0
수업 너무 잘들었습니다.
제가 강사님 수업을 듣고, 사용자 질의에 따라
sql 쿼리를 반환하는 모델을 만들어보고 있는데요,
모델은 허깅페이스에서 "LGAI-EXAONE/EXAONE-3.0-7.8B-Instruct"
이용해서 만들고 있는데,
요청에 따라 적절히 sql 쿼리를 만들려면,
일단 모델이 1) db 테이블 구조를 명확히 알아야하고, 2) 질의를 db 테이블 용어(ex: '카톡'을 얘기했을때, sns_type =1 로 대체)로 대체하는 dictionary가 잘되어야 할것같은데,
현재는 프롬프트에 1) few_shot 예시와, system 프롬프트에 2) 테이블 구조에 대한 설명, sql 작성 규칙 등을 넣어서 결과를 받고 있습니다.
(system 프롬프트는 langChain hub에서 rlm/text-to-sql
을 참조 했습니다)
예시와 유사하거나 예시에서 약간 변화를 준 질의에 대해서는 잘 답변을 하고있는데, 조금만 벗어나면 잘못된 답을 줍니다.
예를들면 userid
칼럼인데 user_id
로 적는다던지, 말을 조금만 바꿔도 못알아 듣는다던지, 심지어 dictionary_chain에 프롬프트로 잡아줘도 대체를 못하는 경우도 있습니다.
어떻게 모델이 질문에 유연하게 이해하고 적절히 답을 하도록 만들어야하는지 방향을 잘모르겠습니다. 조언 부탁드립니다ㅠ 🙏
(그리고 벡터스토어를 효용성을 못찾고 이용하지 않고 있는데 이 모델에서 벡터 스토어를 잘 이용할수 있는 방법이 있을까요?)
답변 1
1
안녕하세요! 좋은 질문 감사합니다.
완벽한 해결책이 될지는 모르지만 저라면 엄청 긴 프롬프트를 작성해서 다양한 작업들을 한번에 진행하기 보다는 기능을 조금씩 나누는 방향으로 진행할 것 같습니다.
예를들면 우선 지금 하시는 것처럼 쿼리를 생성하고, 생성된 쿼리에서 접근하는 테이블과 컬럼명을 데이터베이스의 스키마와 한번더 비교해서 검증하는 절차를 추가할 수 있을 것 같구요
사용자의 질문이 들어오면 해당 질문도 말씀하신 것처럼 dictionary가 중요하기 때문에, 데이터베이스 스키마의 description에 맞춰서 사용자의 질문을 변형하고 변형된 질문으로 쿼리 생성을 시도할 수 있을 것 같습니다
제가 제안 드리는 방법도 정답은 아니고, 큰 작업을 한번에 하기보다는 여러개의 작은 작업으로 나눠서 처리하시는 편이 더 효과를 보실 수 있을거에요! 시도해보시고 논의가 필요하다면 또 질문으로 올려주세요~
감사합니다. 별다른 방법이 생각나지 않아 막막했었는데 덕분에 생각하지못했던 새로운 활로책을 찾은것같습니다. 🙇♂
시도해보고 또 질문드리겠습니다. 좋은하루 보내세요. 🍀