질문인데요. Map re-rank documents chain의 경우, Score가 질문과 chunk된 문서 사이의 유사도이고, 그 유사도를 따라 답을 결정한다면, 굳이 유사도 1위~k위 사이의 답변을 다 받아볼 필요가 있을까요? 어차피 복수개의 답변 중 유사도 1위의 문서를 기반으로 답을 정할 터이니, 가장 유사도 높은 해당 문서 하나로 답을 내는 것이랑 무엇이 다른가라는 질문이 생기네요....
제가 설명을 제대로 못드린것 같네요. 우선 혼란스럽게 해드려 죄송합니다 ^^; Map rerank는 유사도 기준으로 뽑힌 청크들에 대해 각각 LLM이 답변을 생성함과 동시에 답변의 품질 점수를 매깁니다. 그리고 각 청크의 답변중 가장 높은 점수의 답변을 출력하는 개념입니다. 어떻게보면 청크 각각에 대한 LLM의 답변을 인간이 검토하는 대신 LLM이 한번 검토하고 제일 좋은 답변만 출력한다고 보시면 될것같습니다. 다음 영상에서 한번 짚겠습니다.
우선 강의 자료 너무 유익하고 이해가 잘 되어서 여기까지 완강했습니다. 좋은 자료 만들어주신 것에 대한 감사하다는 말씀 먼저 드립니다. 앞으로도 langchain과 관련된 자료가 올라오면 가장 먼저 찾아볼 것 같습니다^^ 관련되어서 질문 드립니다. Q1. auto-gpt 라는 걸 알게 되었는데 이 auto-gpt를 실제 써보지는 않았지만, 여태까지 설명해주신 RAG 기반으로 Chain들을 연결하여 만든 프로그램이라고 생각하면 될까요? 내부 구조가 궁금합니다. 간략하게나마 설명해주시면 감사드리겠습니다!
안그래도 ms가 발표한 auto gen이라는 프레임워크가 말씀하신 바와 유사하여 다음주 내로 강의 영상 업로드 예정입니다. *auto gpt는 langchain의 agent 기능을 통해 구현된 것으로, llm이 자체적인 작업 수행 루프를 돌면서 사용자의 작업 요청을 수행하는 프레임워크입니다. 예를 들어, "자산 계획을 세워줘" 라는 요청을 LLM에게 보내면 LLM이 스스로 이 작업 수행을 위해 필요한 도구를 탐색하고 계획을 세워 최대한 작업 수행을 하고자 노력합니다. 이 과정에서 LLM이 할 수 있는 역할은 매우 다양한데, Auto gen 강의에서 더 자세히 알려드리겠습니다 :)
올려주시는 강의로 열공하고 있습니다. 몇가지만 질문드립니다. (1) 논문처럼 한 페이지가 2단으로 구성된 PDF도 그냥 올리면 잘 분리하는지 궁금합니다. (2) 하나의 문서가 아니라 여러개의 문서를 vector로 변환한 상태에서 검색을 하려고 할 때에는 어떤 chain methods를 적용하면 되는것일까요? (3) 업로드하려고 하는 문서가 Q&A로 이루어져있는 문서인 경우 chunk를 임의의 숫자를 입력하는 것이 좋을지? 줄바꿈(' ') 또는 ' '으로 구분가능한 'recursive character text splitter'를 활용하는게 좋을까요?
시청해주셔서 감사합니다. 아래에 답글 남깁니다. (1) pdf 파일을 불러들이는 documentloader의 종류에 따라서 성능이 다를 수 있습니다. 예를 들어 제 강의에서는 PyPDF라는 PDF라이브러리를 통해 불러왔는데, 내가 가진 파일에 더 적합한 pdf 라이브러리가 있다면 그걸 쓰면 됩니다. 2단형식의 경우 PyMuPDF가 잘 작동한다네요 ^^ (2) 여러 문서의 경우에도 모두 벡터 변환후 크로마 객체에 담으면 검색이 가능합니다. 다음 시간에 Directoryloader로 여러 문서 불러와서 rag를 구성하는 실습도 진행해보겠습니다. (3) QA 형식의 글은 Openai api로 파인튜닝하시면 더 좋은 챗봇을 만드실수도 있습니다만, RAG로 구성하신다면 말씀하신대로 RecursiveCharacterSplitter 이용하시면 됩니다. 그리고 이 스플리터는 어떤 순서로 splitting할지 구분자 순서를 리스트 형태로 지정해줄수있는데요, 예를 들어 [Q, A, /n/n, /n] 이런식으로 구분자 순서를 지정해주시면 Q를 기준으로 먼저 자르고 사이즈가 안맞으면 A, 그다음 문단, 줄바꿈 순서대로 문장을 분할합니다. 이렇게 되면 최대한 QA가 한 묶음으로 청킹되도록 만들수있습니다. 코드는 RecursiveCharacterTextSplitter의 seperators 매개변수 검색해보시면 확인하실수있습니다.
글 또 남겨요. 생성형 가지고 노는 유튜버 중에 가장 진보된 자료 입니다. 아무도 이런 이야기를 안해요. 생성형 백단에서 뭐가 가장 중요한지~ 그냥 좋다고~~ 응용 어플 방법만 디립따 자극식으로 떠들고~~ 그래서 인지 케인님이 안 유명해 졌으면 합니다. 그래야 승자독식을 하지~
Summarize chain의 Map reduce chain 프롬프트를 살짝 변경하면 가능할것같습니다. 요약 체인에 맵리듀스를 넣으면 들어간 문서에 대해 청크별 요약을 만들고 그거 합쳐서 최종 요약을 만드는데, 청크별 요약 대신 예제 질문 뽑아달라고 하고 마지막 최종 요약 대신 요약예제 목록 합쳐달라고 하면 될것같습니다. Langchain 깃헙의 map reduce 파이썬 파일을 한번 뜯어보시면 이해하실수있습니다.
강의 정말 잘 보고 있습니다. 감사합니다. 저도 현재 LangChain을 공부를 하다 궁금한 점 질문 드리고 싶어 댓글 달게 되었습니다! 1. 가끔 가다가 LangChain에 대해서 Document가 제대로 정리가 안되어 있다거나, Wrapper 함수 등 코드 중에서 불필요한 것들이 존재한다는 점에서 비판적인 시각을 가지고 있는 글들이 존재하는 데, LangChain에 대해서 공부해오시면서, 이런 점들을 실제로 느끼시는 지 여쭤보고 싶습니다. 2. 만약에 그렇게 느끼신다면, 최근에, 이런 In-context Learning이나 Orchestration Framework 관련해서 관심을 가지시는 것이 있는지 궁금하네요!
시청해주셔서 감사합니다. 아래 답글 남깁니다. 1. 제대로 정리 안된 기술문서, Wrapper 함수 문제: 이 문제 같은 경우에는 현재 랭체인 외의 오픈소스 프레임워크중 더 나은 것이 없고 이미 많은 앱들이 이 프레임워크 하에서 짜여졌기 때문에 어쩔수없는 부분도 있는 것 같습니다. 기술 문서가 제대로 안돼있는점은 매우 공감합니다만 내부 구조나 함수가 전혀 어렵지 않고 쉽게 파악 가능하다는 점에서 아쉬운 정도인 것 같습니다. Wrapper함수는 종종 커스터마이징하기 어렵다는 측면에서 비판을 받던데 커스터마이징 수요가 있을 정도의 고도화된 챗봇을 만든다면 커스텀 체인 함수를 구성하는게 낫긴합니다. 다만 랭체인에서 이미 짜여진 틀이 꽤 훌륭하고 여기서 조금씩 커스텀하면 많은 부분이 해결되어, 큰 문제는 아닌 것 같습니다. 2. 최근엔 Auto gen이라고 MS에서 자율 에이전트 프레임워크를 발표한 것에 관심이 많은데요, 이와 관련해서 랭체인의 에이전트와 비교하고 딥다이브해보는 강의도 찍을 예정입니다 :)