모범 사례 및 튜토리얼

RAG와 카우치베이스 셸을 사용하여 깃 기록으로 채팅하기

다른 사람의 커밋 메시지를 읽는 것을 좋아하지 않나요? 아니세요? 저는 매우 통찰력 있는 커밋 메시지를 읽다가 다양한 Git 로그에 아직 활용되지 않은 콘텐츠가 있다는 사실을 깨달았습니다(물론 팔로우하는 개발자가 유용한 메시지를 작성하고 있다는 가정 하에). 그렇다면 리포지토리에 질문을 할 수 있다면 좋지 않을까요? Couchbase Shell로 RAG를 사용하여 이를 어떻게 달성할 수 있는지 살펴봅시다.

TL;DR

카우치베이스 셸 구성

초기 단계는 다음을 설치 및 구성하는 것입니다. cbsh. 저는 카펠라 인스턴스를 사용하겠습니다. 구성을 얻으려면 연결 탭에서 Capella 클러스터의 카우치베이스 셸. 아래의 구성은 다음과 같습니다. [[클러스터]]. 모델을 구성하려면 아래 내용을 살펴보세요. [[llm]]. 저는 OpenAI를 선택했지만 다른 것도 있습니다. 임베딩에 사용되는 모델(텍스트를 벡터로 변환하는 모델)과 채팅에 사용되는 모델을 정의해야 합니다. 이 모델은 질문과 질문에 답하기 위한 추가 컨텍스트를 가져옵니다. 물론 API 키가 필요합니다.

Git도 설치되어 있어야 모든 준비가 완료됩니다.

Git 커밋 로그 가져오기

첫 번째 단계는 리포지토리의 모든 커밋을 JSON으로 가져오는 것입니다. 게으르고 늙었기 때문에, 그리고 늙었다는 것은 인공지능에게 물어보는 데 익숙하지 않다는 것을 의미하기 때문에 Google에서 이것을 검색하고 다른 Gist와 연결된 여러 Gist를 찾은 후 마침내 다음과 같이 결정했습니다. 이걸로.

다운로드하고, 소싱하고, 로컬 카우치베이스-셸 git 리포지토리에 들어가서 호출했습니다.

그러나 내가 올바른 결정을 내렸는지 궁금해하는 독자를 위해 구성된 모델에 물어보겠습니다. Cbsh에는 ask 명령어를 사용하여 이 작업을 수행할 수 있습니다:

이 명령은 리포지토리의 각 커밋을 커밋 해시, 작성자 이름 및 이메일, 커밋 날짜 및 커밋 메시지와 함께 JSON 개체로 출력합니다. 리포지토리의 --모두 플래그는 모든 브랜치가 포함되도록 합니다. 그리고 -반대 플래그는 커밋을 시간 역순으로 나열합니다. 마지막으로 출력이 리디렉션되면 commits.json 파일을 만듭니다.

커밋을 받으려는 Git 리포지토리의 루트 디렉터리에서 이 명령을 실행해야 합니다.

그리고 알고 보니 바로 작동하지 않았습니다(충격적인 사실입니다). 그리고 메시지의 본문 부분과 같이 제가 필요한 모든 정보를 제공하지 않았습니다. 물론 이 기능을 조정하는 데 시간을 할애할 수는 있지만, 매우 구체적이고 예외적인 경우가 많았습니다.

어쨌든 이제 JSON 형식의 커밋 목록이 생겼습니다:

그렇다면 JSON 객체 배열로 무엇을 할 수 있을까요? Capella UI를 통해 가져오거나 Couchbase Shell을 사용하여 가져올 수 있습니다. 먼저 범위 그리고 컬렉션 를 클릭하고 cb-env로 선택한 다음 SQL++ 인덱스를 생성합니다.

cbsh는 Nushell을 기반으로 하므로 결과 JSON 파일을 쉽게 열고 데이터 프레임으로 변환한 후 Couchbase 문서에서 변환하여 삽입할 수 있습니다:

어떻게 작동하는지 확인하기 위해 몇 가지 문서를 가져와 보겠습니다:

이것이 바로 RAG에 사용할 수 있는 콘텐츠입니다. 이제 이 문서를 보강할 시간입니다.

AI 모델로 문서 강화

문서를 보강하려면 모델을 구성해야 합니다. 여기서는 OpenAI와 enrich-doc cbsh 명령:

SELECT 절은 문서의 콘텐츠와 추가 필드가 포함된 JSON 객체를 반환합니다. id 그리고 텍스트. 텍스트는 제목과 본문이 하나의 문자열로 추가된 것입니다. 객체는 콘텐츠 객체로 래핑되어 벡터에 주어집니다. enrich-doc 명령에 텍스트를 매개변수로 사용하여 벡터로 변환할 필드를 지정할 수 있습니다. 이제 텍스트 벡터 필드에 입력합니다.

벡터 검색

이러한 벡터를 검색하려면 벡터 검색 인덱스를 만들어야 합니다. 이 작업은 API 또는 사용자 정의 가능한 UI를 통해 수행할 수 있습니다. 여기서는 기본 선택에 만족하므로 대신 cbsh를 사용합니다:

생성된 인덱스는 다음을 사용합니다. dot_product 를 유사성 알고리즘으로 사용하면 벡터 차원은 1536이 되고 인덱스 이름은 commit 이며 인덱싱된 필드는 텍스트 벡터. 버킷, 범위 및 컬렉션은 다음을 통해 선택한 것입니다. cb-env.

벡터 검색을 테스트하려면 검색 쿼리를 검색으로 파이프하는 대신 벡터로 바꿔야 합니다:

기본적으로 3행이 반환됩니다. 문서의 내용을 보도록 확장해 보겠습니다. 저는 거부 -i textVector 를 사용하여 벡터 필드를 제거하면 터미널 출력에 1536줄 필드가 필요하지 않기 때문입니다:

Git 리포지토리에 문의

여기에서 Couchbase에 저장된 Git 리포지토리의 모든 커밋이 AI 모델로 강화되고 모두 색인 및 검색이 가능합니다. 마지막으로 할 일은 모델을 호출하여 RAG로 쿼리를 실행하는 것입니다. 질문을 벡터로 변환하고, 벡터 검색으로 파이프하고, 반환 ID에서 전체 문서를 가져오고, 벡터 필드가 없는 콘텐츠 개체를 선택하고, 각 개체를 JSON 문서로 변환하고(이렇게 하면 콘텐츠와 구조화된 메타데이터를 보낼 수 있습니다), 각 개체를 감싸는 것으로 시작하여 jsonText 를 테이블에 저장하고 마지막으로 ask 명령을 사용합니다:

Gemini 지원이 언제 도입되었는지 LLM에 문의합니다. 날짜와 커밋 해시를 받습니다. 그런 다음 다음을 사용하여 쉽게 확인할 수 있습니다. git show. 여기에는 약간의 반복이 있으므로 질문에 대한 변수를 선언하고 재사용할 수 있습니다:

이제 우리 모두 클라이언트 상자를 다시 작성해야 하는 이유를 알게 되었습니다. 질문에 대한 답을 얻지 못할 수도 있지만 이제 모든 리포지토리에서 답을 얻는 방법을 알게 되었습니다!

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

Author

Posted by 로랑 도귄

Laurent는 파리에 사는 괴짜 금속공학도입니다. 주로 Java로 코드를 작성하고 AsciiDoc으로 구조화된 텍스트를 작성하며 데이터, 리액티브 프로그래밍 및 기타 유행어에 대해 자주 이야기합니다. 또한 Clever Cloud와 Nuxeo의 개발자 옹호자로 활동하며 해당 커뮤니티가 더 크고 강력하게 성장할 수 있도록 자신의 시간과 전문성을 바쳤습니다. 현재 Couchbase에서 개발자 관계를 운영하고 있습니다.

댓글 하나

  1. 아주 멋지네요. 전체 변경 로그를 포함하여 LLM에 더 많은 컨텍스트를 제공하면 흥미로울 것입니다.

    1. 네, 저도 깃허브 홍보에 대해 생각하고 있었어요. 잠재력이 충분하죠!

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.