Anteriormente, mostramos como usar os recursos do Couchbase RAG por meio de um aplicativo Python que permite que o usuário "converse com seu PDF ou com X. É simples de construir, mas será que podemos construí-lo de forma mais simples? Tenho brincado bastante com o Couchbase Shell recentemente e ele deve me permitir fazer algo semelhante.
Configurar um escopo e uma coleção
Presumo que você já esteja familiarizado com Shell do Couchbase (cbsh) e ter um cluster e um modelo configurados.
Crie e selecione um escopo e uma coleção e, em seguida, crie um índice primário:
1 2 3 4 5 |
> escopos criar pdf > cb-env escopo pdf > coleções criar pdf > cb-env coleção pdf > consulta "CREATE PRIMARY INDEX ON `default`:`cbsh`.`pdf`.`pdf`" |
Transformar um PDF em texto dividido em partes
Há uma variedade de ferramentas que permitem converter um PDF em texto. Na maioria das distribuições Linux, você deve encontrar pdftotext.
1 |
> pdftotext ~/monopólioInstrução.pdf |
Isso criará uma versão de texto do arquivo com o mesmo caminho, mas com um .txt extensão.
Com Nushell (o cbsh é baseado no Nushell), é fácil dividir o texto graças ao comando split. O problema é encontrar o delimitador correto que você precisa para dividir o arquivo. Felizmente, ele suporta strings de várias linhas, então copiei e colei o texto do arquivo entre dois parágrafos. Entretanto, você deve ser capaz de fazer algo mais sofisticado usando regex. Essa é a diferença entre o material do blog e a produção 😇.
1 2 3 |
> aberto ~/monopólioInstrução.txt |dividir fila " ::: ::: "|envoltório texto |
Isso lhe dará uma tabela de strings de texto. Para importá-la para o Couchbase, nós as envolvemos em um campo de texto, em um objeto JSON de conteúdo, adicionamos um UUID gerado aleatoriamente e inserimos o resultado.
1 2 3 |
> aberto ~/monopólioInstrução.txt |dividir fila " ::: ::: "|envoltório texto |envoltório conteúdo | cada { inserir id { aleatório uuid } } | doc upsert |
A próxima etapa é criar embeddings, ou representações vetoriais do texto:
1 |
> consulta "SELECT meta().id as id, p.* from pdf as p" | envoltório conteúdo| vetor enriquecer-doc texto | doc upsert |
Em seguida, crie o índice de pesquisa vetorial. Aqui ele é chamado de pdf, indexa o campo textVectorcrie um vetor de 1536 dimensões e use l2_norm para o algoritmo de similaridade, pois é o padrão.
1 |
> vetor criar-índice pdf textVector 1536 |
Eu importei as regras do Monopoly e estou perguntando como sair da cadeia. No exemplo original, tínhamos uma resposta com contexto e outra sem.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
> perguntar "Como sair da prisão" Se você ou alguém você saber é em prisão e necessidades para ser liberado, aqui são alguns geral etapas para tomar: Contato a advogado: Se você ter legal representação ou saber de a advogado que pode ajuda com seu caso, alcance fora para eles para assistência em navegando o legal processo. Obter a fiança vínculo: Em muitos casos, indivíduos pode ser liberado de prisão por lançamento fiança. Isso requer pagante a definir quantidade de dinheiro para o tribunal, que é tipicamente devolvido uma vez o individual comparece todos necessário tribunal datas. Participar tribunal audiências: EleÉ importante cumprir todas as exigências do tribunal, inclusive comparecer às audiências agendadas e seguir todas as condições de liberdade estabelecidas pelo tribunal. Busque apoio: Considere entrar em contato com familiares, amigos ou organizações locais que possam oferecer assistência ou orientação durante esse período desafiador. Lembre-se de que o processo de liberação da prisão pode variar de acordo com as circunstâncias específicas do caso e da jurisdição. É's sempre melhor para consultar com legal profissionais para personalizado aconselhamento e assistência. |
E com contexto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
> deixar pergunta = "Como sair da prisão"; vetor enriquecer-texto $pergunta | vetor pesquisa pdf textVector | selecionar id |doc obter| selecionar conteúdo.texto | perguntar $pergunta 👤 Laurent Doguin 🏠 capela em ☁️ cbsh.gitlog.pdf > deixar pergunta = "Como sair da prisão"; vetor enriquecer-texto $pergunta | vetor pesquisa pdf textVector | selecionar id |doc obter| selecionar conteúdo.texto | perguntar $pergunta Incorporação lote 1/1 Você pode obter fora de prisão por seguintes esses métodos: **Rolo Duplas:** Se você rolo a duplo com o branco dados em qualquer de seu próxima três voltas, você pode imediatamente mover fora de Cadeia. Você então mover o número de espaços mostrado por seu duplas rolo. **"Get Out of Jail Free" (Saia da Cadeia Livre) Cartão:** Se você ter a "Get Out of Jail Free" (Saia da Cadeia Livre) cartão, você pode uso ele para obter fora de Cadeia sem rolante duplas. Isso cartão pode ser obtido por compra ele de outro jogador ou desenho ele de o Chance ou Comunidade Tórax cartões. **Pagamento Bom:** Você pode também escolher para pagar a bom de $50 antes de você rolo o dados em ou de seu próxima dois voltas. Depois de pagante o bom, você são gratuito para mover e continuar jogando. Lembre-se, se você fazer não rolo duplas por seu terceiro giro ou uso a "Get Out of Jail Free" (Saia da Cadeia Livre) cartão, você deve pagar o $50 bom para obter fora de Cadeia. |
Vamos simplificar isso colocando tudo em um script. Este é o conteúdo de myScript.nu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
def initRAGPipeline [] { escopos criar pdf cb-env escopo pdf coleções criar pdf cb-env coleção pdf consulta "CREATE PRIMARY INDEX ON `default`:`cbsh`.`pdf`.`pdf`" vetor criar-índice pdf textVector 1536 } def storeRAGDoc [] { envoltório texto |envoltório conteúdo | cada { inserir id { aleatório uuid } } | doc upsert consulta "SELECT meta().id as id, p.* from `pdf` as p" | envoltório conteúdo| vetor enriquecer-doc texto | doc upsert } def myAsk [$pergunta: string] { deixar norag = perguntar $pergunta deixar trapo = vetor enriquecer-texto $pergunta | vetor pesquisa pdf textVector | selecionar id |doc obter| selecionar conteúdo.texto | perguntar $pergunta {"trapo":$trapo, "norag":$norag} } |
Você pode criar o arquivo de script e, em seguida, chamar essas funções:
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 |
> fonte ./ragDemo/ragScript.nu > initRAGPipeline > aberto monopólioInstrução.txt |dividir fila " ::: ::: "| loja > myAsk "Como sair da prisão" Incorporação lote 1/1 ╭───────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ trapo │ Aqui são o formas para obter fora de prisão em o jogo de Monopólio: │ │ │ │ │ │ 1. **Rolo Duplas:** O mais comum maneira para obter fora de prisão é por rolante duplas em seu giro. Se você rolo │ │ │ duplas com o regular branco dados em qualquer de seu próxima três voltas após sendo enviado para prisão, você pode imediatamente mover seu token fora de prisão e avanço o correspondente │ │ │ número de espaços. Lembre-se que você pode somente uso o branco dados para este finalidade. │ │ │ │ │ │ 2. **Usando "Get Out of Jail Free" (Saia da Cadeia Livre) Cartão:** Se você ter a "Get Out of Jail Free" (Saia da Cadeia Livre) cartão, você pode │ │ │ uso ele para obter fora de prisão sem rolante duplas. Simplesmente presente o cartão para o Banqueiro para obter fora de prisão para gratuito. O cartão é então devolvido para o fundo de o convés. │ │ │ │ │ │ 3. │ │ │ **Compra o Cartão:** Se outro jogador tem a "Get Out of Jail Free" (Saia da Cadeia Livre) cartão e é disposto para vender ele, você pode compra o cartão de eles em a mutuamente acordado-sobre preço. │ │ │ Isso permite você para obter fora de prisão mesmo se você do't tenha o cartão você mesmo. │ │ │ │ │ │ 4. **Pague a multa:** Se você não rolar o dobro em três turnos ou não tiver um "Get Out of │ │ │ Jail Free", você deve pagar uma multa de $50 ao Banco antes de lançar os dados em qualquer um de seus próximos dois turnos. Depois de pagar a multa, você será imediatamente liberado da │ │ │ prisão e pode mover sua ficha de acordo com a rolagem de dados. │ │ │ │ │ │ Estas são as quatro principais maneiras de sair da cadeia no Monopoly. │ │ norag │ Se você ou alguém que você conhece estiver atualmente na prisão e quiser ser libertado, aqui estão alguns passos gerais a serem considerados: │ │ │ │ │ │ 1. Entre em contato com um advogado: Um advogado de defesa criminal pode │ Fornecer orientação sobre opções legais e ajudar a navegar no processo legal para liberação. │ │ │ │ │ │ 2. Comparecer às audiências no tribunal: É importante comparecer a todas as audiências do tribunal e acompanhar qualquer │ │ │ condições estabelecidas pelo tribunal para demonstrar cooperação com o sistema jurídico. │ │ │ │ │ │ 3. Considere a fiança: Se a fiança for uma opção, você poderá pagar uma determinada quantia para ser liberado da │ │ │ prisão até o julgamento. Se não puder pagar o valor da fiança, você pode procurar a ajuda de um agente de fiança. │ │ │ │ │ │ 4. Buscar opções alternativas: Dependendo das circunstâncias de seu │ │ │ caso, pode haver opções alternativas para liberação, como serviços pré-julgamento, programas de desvio ou liberação supervisionada. │ │ │ │ │ │ 5. Siga a orientação jurídica: É crucial seguir os │ │ │ aconselhe-se com seu consultor jurídico e cumpra todos os requisitos legais para aumentar as chances de uma liberação bem-sucedida. │ │ │ │ │ │ It's importante para nota que o processo de obtendo fora de │ │ │ prisão pode variar dependendo em o específico circunstâncias de o caso e o leis em seu jurisdição. Para personalizado orientação, ele's recomendado para falar com a advogado ou │ │ │ legal profissional especializado em criminal lei. │ ╰───────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ |
Aqui, você pode ver o mesmo tipo de resultado que obtivemos na demonstração do Python RAG, mas desta vez usando o Couchbase Shell. Deve ser mais fácil manipular, alterar ou estender, porque você não precisa implantar um aplicativo ou conhecer Python. No entanto, ele será menos flexível do que o que você pode obter com Python e Langchain.
Se isso for do seu interesse, fique ligado - mais conteúdo sobre IA e Couchbase Shell está a caminho!
-
- Saiba mais sobre Shell do Couchbase
- e Pesquisa vetorial do Couchbase capacidades