이전에는 사용자가 '채팅'을 할 수 있는 Python 앱을 통해 Couchbase RAG 기능을 사용하는 방법을 보여드렸습니다. PDF로 또는 와 X. 구축은 간단하지만 더 간단하게 구축할 수 있을까요? 최근에 Couchbase Shell을 많이 사용해봤는데 비슷한 작업을 할 수 있을 것 같습니다.
범위 및 컬렉션 설정
이미 다음 사항에 대해 잘 알고 계시리라 생각합니다. 카우치베이스 셸 (cbsh)를 실행하고 클러스터와 모델을 구성합니다.
범위와 컬렉션을 생성하고 선택한 다음 기본 인덱스를 만듭니다:
1 2 3 4 5 |
> 범위 create pdf > cb-환경 범위 pdf > 컬렉션 create pdf > cb-환경 컬렉션 pdf > 쿼리 "`기본값`:`cbsh`.`pdf`.`pdf`에 주 인덱스 만들기" |
PDF를 청크 텍스트로 변환
PDF를 텍스트로 변환할 수 있는 다양한 도구가 있습니다. 대부분의 Linux 배포판에서 다음을 찾을 수 있습니다. pdftotext.
1 |
> pdftotext ~/독점지침.pdf |
이렇게 하면 경로가 같지만 파일 이름에 .txt 확장자입니다.
함께 Nushell (cbsh는 Nushell 기반) 분할 명령 덕분에 텍스트를 쉽게 분할할 수 있습니다. 문제는 파일을 분할하는 데 필요한 올바른 구분 기호를 찾는 것입니다. 다행히 여러 줄 문자열을 지원하므로 파일에서 두 단락 사이의 텍스트를 복사하여 붙여넣었습니다. 하지만 정규식을 사용하면 좀 더 정교한 작업을 할 수 있습니다. 이것이 블로그 자료와 프로덕션의 차이점입니다 😇.
1 2 3 |
> 열기 ~/독점지침.txt |분할 행 " ::: ::: "|wrap 텍스트 |
이렇게 하면 텍스트 문자열 테이블을 얻을 수 있습니다. 이를 Couchbase로 가져오려면 텍스트 필드, 콘텐츠 JSON 객체, 무작위로 생성된 UUID를 추가하고 결과를 업서트합니다.
1 2 3 |
> 열기 ~/독점지침.txt |분할 행 " ::: ::: "|wrap 텍스트 |wrap 콘텐츠 | 각 { 삽입 id { 무작위 uuid } } | doc 업서트 |
다음 단계는 임베딩 또는 텍스트의 벡터 표현을 만드는 것입니다:
1 |
> 쿼리 "SELECT meta().id as id, p.* from pdf as p" | wrap 콘텐츠| 벡터 풍부하게-doc 텍스트 | doc 업서트 |
그런 다음 벡터 검색 인덱스를 만듭니다. 여기서는 PDF라고 하며 필드를 색인화합니다. 텍스트 벡터를 사용하여 1536 차원 벡터를 생성하고 l2_norm 를 유사도 알고리즘의 기본값으로 설정합니다.
1 |
> 벡터 create-색인 pdf 텍스트 벡터 1536 |
모노폴리의 규칙을 가져와서 감옥에서 빠져나오는 방법을 묻고 있습니다. 원래 예제에서는 컨텍스트가 있는 답변과 없는 답변이 있었습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
> ask "감옥에서 탈출하는 방법" 만약 당신 또는 누군가 당신 알다 는 in 감옥 그리고 요구사항 에 be 출시, 여기 는 일부 일반 단계 에 take: 연락처 a 변호사: 만약 당신 가지고 법률 표현 또는 알다 의 a 변호사 누구 can 도움말 와 함께 당신의 case, 도달 범위 out 에 그들 에 대한 지원 in 탐색 의 법률 프로세스. 획득 a 보석금 bond: In 많은 사례, 개인 can be 출시 에서 감옥 by 게시 보석금. 이 요구 사항 결제 a set 금액 의 돈 에 의 법원, 어느 는 일반적으로 반환 한 번 의 개인 참석 모두 필수 법원 날짜. 참석 법원 청문회: It예정된 심리에 참석하고 법원이 정한 석방 조건을 따르는 등 모든 법원 요건을 준수하는 것이 중요합니다. 도움을 구하세요: 이 어려운 시기에 도움이나 안내를 제공할 수 있는 가족, 친구 또는 지역 단체에 연락하는 것이 좋습니다. 출소 절차는 사건의 구체적인 상황과 관할권에 따라 달라질 수 있다는 점에 유의하시기 바랍니다. It's 항상 최고 에 상담 와 함께 법률 전문가 에 대한 개인화 조언 그리고 지원. |
그리고 컨텍스트와 함께:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
> let 질문 = "감옥에서 탈출하는 방법"; 벡터 풍부하게-텍스트 $질문 | 벡터 검색 pdf 텍스트 벡터 | 선택 id |doc get| 선택 콘텐츠.텍스트 | ask $질문 👤 Laurent 도긴 🏠 아카펠라 in ☁️ cbsh.gitlog.pdf > let 질문 = "감옥에서 탈출하는 방법"; 벡터 풍부하게-텍스트 $질문 | 벡터 검색 pdf 텍스트 벡터 | 선택 id |doc get| 선택 콘텐츠.텍스트 | ask $질문 임베딩 배치 1/1 당신 can get out 의 감옥 by 다음 이 메소드: **롤 복식:** 만약 당신 롤 a double 와 함께 의 흰색 주사위 on any 의 당신의 다음 세 턴, 당신 can 즉시 이동 out 의 감옥. 당신 다음 이동 의 숫자 의 공백 표시 by 당신의 복식 롤. **"무료 감옥 탈출" 카드:** 만약 당신 가지고 a "무료 감옥 탈출" 카드, 당신 can 사용 it 에 get out 의 감옥 없이 롤링 복식. 이 카드 can be 획득 by 구매 it 에서 다른 플레이어 또는 그리기 it 에서 의 기회 또는 커뮤니티 가슴 카드. **결제 Fine:** 당신 can 또한 선택 에 pay a 괜찮아요 의 $50 전에 당신 롤 의 주사위 on 중 하나 의 당신의 다음 두 턴. 이후 결제 의 괜찮아요, 당신 는 무료 에 이동 그리고 계속 재생. 기억하세요, 만약 당신 do not 롤 복식 by 당신의 셋째 turn 또는 사용 a "무료 감옥 탈출" 카드, 당신 필수 pay 의 $50 괜찮아요 에 get out 의 감옥. |
모든 것을 스크립트에 넣어서 단순화해 보겠습니다. 다음은 다음과 같은 내용입니다. myScript.nu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
def initRAG파이프라인 [] { 범위 create pdf cb-환경 범위 pdf 컬렉션 create pdf cb-환경 컬렉션 pdf 쿼리 "`기본값`:`cbsh`.`pdf`.`pdf`에 주 인덱스 만들기" 벡터 create-색인 pdf 텍스트 벡터 1536 } def storeRAGDoc [] { wrap 텍스트 |wrap 콘텐츠 | 각 { 삽입 id { 무작위 uuid } } | doc 업서트 쿼리 "SELECT meta().id as id, p.* from `pdf` as p" | wrap 콘텐츠| 벡터 풍부하게-doc 텍스트 | doc 업서트 } def myAsk [$질문: 문자열] { let norag = ask $질문 let rag = 벡터 풍부하게-텍스트 $질문 | 벡터 검색 pdf 텍스트 벡터 | 선택 id |doc get| 선택 콘텐츠.텍스트 | ask $질문 {"rag":$rag, "norag":$norag} } |
스크립트 파일을 소싱한 다음 해당 함수를 호출할 수 있습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
> 출처 ./래그데모/ragScript.nu > initRAG파이프라인 > 열기 독점지침.txt |분할 행 " ::: ::: "| store > myAsk "감옥에서 탈출하는 방법" 임베딩 배치 1/1 ╭───────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ rag │ 여기 는 의 방법 에 get out 의 감옥 in 의 게임 의 독점: │ │ │ │ │ │ 1. **롤 복식:** 그리고 대부분 공통 방법 에 get out 의 감옥 는 by 롤링 복식 on 당신의 turn. 만약 당신 롤 │ │ │ 복식 와 함께 의 일반 흰색 주사위 on any 의 당신의 다음 세 턴 이후 존재 보낸 에 감옥, 당신 can 즉시 이동 당신의 토큰 out 의 감옥 그리고 사전 의 해당 │ │ │ 숫자 의 공백. 기억하세요 그 당신 can 만 사용 의 흰색 주사위 에 대한 이 목적. │ │ │ │ │ │ 2. **사용 "무료 감옥 탈출" 카드:** 만약 당신 가지고 a "무료 감옥 탈출" 카드, 당신 can │ │ │ 사용 it 에 get out 의 감옥 없이 롤링 복식. 간단하게 현재 의 카드 에 의 은행원 에 get out 의 감옥 에 대한 무료. 그리고 카드 는 다음 반환 에 의 하단 의 의 deck. │ │ │ │ │ │ 3. │ │ │ **구매 의 카드:** 만약 다른 플레이어 has a "무료 감옥 탈출" 카드 그리고 는 willing 에 판매 it, 당신 can 구매 의 카드 에서 그들 에서 a 상호 동의-upon 가격. │ │ │ 이 허용 당신 에 get out 의 감옥 심지어 만약 당신 don카드가 없는 경우 │ │ │ │ │ │ 4. **벌금 지불: 3턴 이내에 두 배를 굴리지 않거나 '│에서 벗어나기'가 없는 경우. │ │ 감옥 무료" 카드를 사용하면, 다음 두 턴에 주사위를 굴리기 전에 은행에 $50의 벌금을 지불해야 합니다. 벌금을 지불하면 즉시 │ │ 감옥에서 풀려납니다. │ │ 감옥에 갇혀 주사위를 굴려 토큰을 이동할 수 있습니다. │ │ │ │ Monopoly에서 감옥에서 탈출하는 네 가지 주요 방법은 다음과 같습니다. │ 노라그 │ 본인 또는 지인이 현재 수감 중이며 출소를 앞두고 있는 경우 고려해야 할 몇 가지 일반적인 단계는 다음과 같습니다: │ │ │ │ │ │ 1. 변호사에게 연락하기: 형사 변호사는 │ 1. │ │ 법적 옵션에 대한 안내를 제공하고 석방을 위한 법적 절차를 탐색하는 데 도움을 줍니다. │ │ │ │ │ │ 2. 법원 심리에 참석하기: 모든 법원 심리에 참석하고 모든 │ │ │ │ │ 3. │ │ 법원이 법률 시스템과의 협력을 입증하기 위해 설정한 조건. │ │ │ │ │ │ 3. 보석금을 고려합니다: 보석금이 선택 사항인 경우 일정 금액을 지불하고 석방될 수 있습니다. │ │ 재판 계류 중인 구치소. 보석금을 감당할 수 없는 경우 보석금 대리인에게 도움을 요청할 수 있습니다. │ │ │ │ │ │ 4. 다른 옵션을 모색합니다: 상황에 따라 │ │ │ │ 이 경우 재판 전 서비스, 전환 프로그램 또는 감독 석방과 같은 대체 석방 옵션이 있을 수 있습니다. │ │ │ │ │ │ 5. 법률 자문을 따르세요: 법률 자문을 따르는 것이 중요합니다. │ │ 법률 고문의 조언을 구하고 모든 법적 요건을 준수하여 성공적인 석방 가능성을 높이세요. │ │ │ │ │ │ It's 중요 에 참고 그 의 프로세스 의 얻기 out 의 │ │ │ 감옥 can 다양 에 따라 on 의 특정 상황 의 의 case 그리고 의 법률 in 당신의 관할권. For 개인화 안내, it's 추천 에 말하다 와 함께 a 변호사 또는 │ │ │ 법률 전문가 전문화 in 범죄자 법률. │ ╰───────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ |
여기에서는 Python RAG 데모에서 얻은 것과 동일한 종류의 결과를 볼 수 있지만 이번에는 Couchbase Shell을 사용합니다. 앱을 배포하거나 Python을 알 필요가 없으므로 조작, 변경 또는 확장하기가 더 쉬울 것입니다. 하지만 파이썬과 랭체인으로 달성할 수 있는 것보다는 유연성이 떨어질 것입니다.
관심이 있으시다면 계속 지켜봐 주세요. 더 많은 AI 및 Couchbase Shell 콘텐츠가 준비 중입니다!
-
- 자세히 알아보기 카우치베이스 셸
- 그리고 카우치베이스 벡터 검색 기능