ChatGPT abriu o código do primeiro plug-in, vamos aprender o código-fonte!

△Clique em " Python cat " acima para seguir, e responda " 1 " para receber o e-book

1090e58b7c8c51b121499c735652d0b4.png

Em 23 de março, a OpenAI lançou outro grande sucesso: o lançamento de um sistema de plug-in para o ChatGPT!

Este movimento significa que o ChatGPT dará início ao momento "APP Store", ou seja, em torno de suas capacidades, um ecossistema de desenvolvedores será formado para criar um "sistema operacional" baseado em IA!

O sistema plug-in trará um salto qualitativo para o ChatGPT, pois com a ajuda de serviços plug-in, ele poderá obter informações da Internet em tempo real e ligar para aplicativos de terceiros (reservar voos em hotéis, pedir comida, fazer compras, consultar preços de ações , etc).

O ChatGPT é um cérebro extremamente inteligente e os plug-ins se tornarão seus olhos, ouvidos, mãos, pés e até asas, com recursos incríveis, e o futuro é inimaginável!

O oficial atualmente fornece dois plugins:

  • Um navegador da web. Usando a API do novo navegador Bing, pesquise conteúdo da Internet em tempo real e forneça respostas e links

  • Um interpretador de código. Usando o interpretador Python, você pode resolver problemas matemáticos, fazer análise e visualização de dados, editar fotos, editar vídeos, etc., e também suportar o download de arquivos processados

Além disso, a OpenAI também abriu o código-fonte de um plug-in de recuperação de base de conhecimento chatgpt-retrieval-plugin, que recupera informações de várias fontes de dados (como arquivos, notas, e-mails e documentos públicos) por meio de linguagem natural. Com o código-fonte aberto disponível, os desenvolvedores podem implantar suas próprias versões do plug-in.

Imagine se eu fornecesse um "plug-in da base de conhecimento do Python" com todos os documentos oficiais como fonte de dados, então qualquer dúvida sobre o uso do Python no futuro, eu só preciso perguntar ao ChatGPT, então ele chama o plug-in e analisa os dados e, finalmente, retorna me dar resposta exata. Isso vai economizar muito tempo!

Além disso, você também pode usar livros como fontes de dados para criar "Base de conhecimento da Jornada ao Oeste", "Base de conhecimento do sonho das mansões vermelhas", "Base de conhecimento da enciclopédia", "Base de conhecimento da biblioteca pessoal" etc. assistente especializado com revistas acadêmicas como fonte de dados, e será muito fácil escrever artigos e pesquisar materiais a partir de agora; use as fontes de dados de Sócrates, Jobs, Musk e outras celebridades para criar um consultor pessoal personalizado...

Como o primeiro plug-in ChatGPT de código aberto, o projeto chatgpt-retrieval-plugin ficou em primeiro lugar na lista de tendências do Github assim que foi lançado e obteve 11 mil estrelas em apenas uma semana após seu lançamento.

Este projeto é escrito inteiramente em Python, seja para fins de aprendizado de programação, seja para referência no desenvolvimento de outros plug-ins no futuro, vale a pena estudarmos com atenção.

A seguir, compartilharei algumas informações que obtive ao ler a documentação do projeto e o código-fonte.

Em primeiro lugar, o projeto contém cerca de 3 K de código Python, o que não é uma grande escala. A estrutura do projeto também é bem clara, o diretório é o seguinte:

Índice descrever
datastore Contém a lógica principal para armazenar e consultar incorporações de documentos usando vários provedores de banco de dados vetoriais
examples Inclui exemplos de configuração, métodos de autenticação e exemplos orientados a provedores de programas
models Contém modelos de dados usados ​​por plug-ins, como modelos de documentos e metadados
scripts Contém scripts úteis para processar e fazer upload de arquivos de diferentes fontes de dados
server Armazene a implementação principal do servidor FastAPI
services Contém serviços utilitários para tarefas como fragmentação, extração de metadados e detecção de PII
tests Inclui testes de integração para vários provedores de banco de dados vetoriais
.well-known Armazene arquivos de manifesto de plug-in e formatos OpenAPI, defina a configuração do plug-in e as especificações da API, etc.

Com exceção de exemplos, testes, arquivos de configuração, etc., os três diretórios principais são os seguintes:

armazenamento de dados armazenamento de dados

Os dados de texto da fonte de dados serão mapeados para um espaço vetorial de baixa dimensão e, em seguida, armazenados no banco de dados vetorial. Exemplos oficiais de soluções de armazenamento de dados, como Pinecone, Weaviate, Zilliz, Milvus, Qdrant e Redis foram fornecidos. Além disso, existem várias solicitações pull que desejam adicionar suporte ao PostgreSQL e há uma grande probabilidade de que ele seja integrado no futuro.

Usado aqui 抽象工厂设计模式, DataStore é uma classe abstrata e cada biblioteca de armazenamento de dados é uma classe de implementação concreta, que precisa implementar três métodos abstratos:

(1) _upsert(chunks: Dict[str, List[DocumentChunk]]) -> List[str]O método recebe um parâmetro de dicionário, que contém uma lista de objetos DocumentChunk, e os insere no banco de dados. O valor de retorno é uma lista de IDs de documentos.

(2) _query(queries: List[QueryWithEmbedding]) -> List[QueryResult]O método recebe um parâmetro de lista contendo o texto da consulta a ser incorporado. Retorna uma lista de resultados de consulta contendo fragmentos e pontuações de documentos correspondentes.

(3) delete(ids: Optional[List[str]] = None, filter: Optional[DocumentMetadataFilter] = None, delete_all: Optional[bool] = None, ) -> bool  método, exclua de acordo com o id e outras condições de filtro ou exclua tudo. Retorna se a operação foi bem-sucedida.

Vale a pena notar que os módulos neste diretório factory.pyusam a recém-introduzida sintaxe match-case do Python 3.10, seguindo a nova tendência da comunidade Python~

interface do servidor servidor

Existe apenas um arquivo neste diretório main.py, que é a entrada inicial de todo o projeto. Ele usa a estrutura FastAPI atual, fornece várias APIs para adicionar, excluir, modificar e verificar e usa o módulo uvicorn para iniciar o serviço.

  • /upsert-fileInterface, usada para fazer upload de um único arquivo, convertê-lo em um objeto Document e, em seguida, adicionar ou atualizar

  • /upsertInterface para carregar uma série de objetos de documento para adicionar ou atualizar

  • /queryInterface, transmita uma série de condições de texto, converta-as em objetos QueryWithEmbedding e, em seguida, consulte o banco de dados de vetores

  • /deleteInterface, exclua ou exclua todos os dados no banco de dados de acordo com as condições

Entre essas interfaces, as funções de adição, modificação e exclusão são principalmente para desenvolvedores/mantenedores, e o ChatGPT precisa apenas chamar a interface de consulta do plug-in. Portanto, um sub-aplicativo "/sub" também é criado no código, que contém apenas /querya interface, que é fornecida para chamadas ChatGPT.

Além disso, ele usa o método mount do FastAPI para montar um diretório de arquivo estático "/.well-known", que expõe informações básicas sobre o plug-in, como nome, descrição, autor, logotipo, e-mail, documentos de interface fornecidos ao OpenAPI, etc espere.

método de processamento de tarefas de serviços

Sob este diretório estão algumas funções comuns, como as seguintes:

(1) O arquivo chunks.py contém funções que dividem strings e objetos Document em pequenos pedaços e obtêm vetores de incorporação para cada pedaço.

(2) O arquivo file.py fornece funções para extrair conteúdo de texto e metadados de arquivos carregados. Os tipos de arquivo atualmente suportados para análise incluem PDF, texto simples, Markdown, Word, CSV e PPTX.

(3) O arquivo openai.py contém duas funções: A função get_embeddings usa o text-embedding-ada-002modelo para incorporar o texto fornecido. A função get_chat_completion gera uma conversa usando a API ChatCompletion do OpenAI.

No geral, várias funções de interface deste plug-in são muito claras e a lógica do código não é complicada. A operação de incorporação de texto principal é feita com a ajuda da interface de incorporação do openai, e as operações de armazenamento e consulta de informações de bloco de texto dependem das funções de vários bancos de dados vetoriais.

Há um blogueiro no YouTube que desenhou um diagrama esquemático à mão. Embora a fonte esteja rabiscada, você pode entendê-la:

d0332c8a43d53b5a2da8ec010e4fd345.png

Vale a pena assistir ao vídeo dele, porque o up master não apenas apresenta brevemente o princípio de funcionamento do plug-in, mas também demonstra como implantar no Digital Ocean, como modificar a configuração e como depurar, e ele tem o plug-in com permissão do ChatGPT, para que ele possa implantar o seu próprio O plug-in está conectado ao ChatGPT e o uso do plug-in da base de conhecimento é demonstrado no local!

Vídeo: https://www.youtube.com/watch?v=hpePPqKxNq8

Atualmente, ainda existem relativamente poucas informações sobre a introdução, desenvolvimento e configuração do plug-in ChatGPT, afinal ele é recém-lançado. No entanto, existem inúmeros indivíduos e organizações se inscrevendo na lista de espera. Uma vez abertos para uso, vários plug-ins definitivamente expandirão a ecologia do ChatGPT, como as ricas bibliotecas de código aberto da comunidade Python.

Por fim, a documentação oficial do plug-in chatgpt-retrieval-plugin é a informação mais detalhada em primeira mão e recomendo a todos que a estudem. https://github.com/openai/chatgpt-retrieval-plugin

d6e27a55572d64b5ffd01ff489087303.gif

O grupo de troca técnica Python cat está aberto! No grupo, há funcionários atuais de fábricas nacionais de primeiro e segundo níveis, além de alunos de faculdades e universidades nacionais e estrangeiras. Há programadores veteranos com mais de dez anos de experiência em codificação e recém-chegados que acabaram de iniciou escolas primárias e secundárias O ambiente de aprendizagem é bom! Alunos que desejam ingressar no grupo, respondam ao " grupo de comunicação " na conta oficial para obter o WeChat do irmão Mao (recusar a festa de publicidade, se você for o único!) ~

Insuficiente? Tente eles

Como a lista é implementada e usada em Python?

O código-fonte aberto mais recente: biblioteca de agrupamento de objetos geral Python eficiente

Pequeno projeto Python: como fazer um jogo de labirinto?

Por que a fatia do Python indexa fora dos limites?

Comparando C++ e Python, fale sobre ponteiros e referências

Análise simples de bloqueios distribuídos na biblioteca Redis em Python

Se você achou este artigo útil

Por favor, compartilhe e curta generosamente , obrigado !

Acho que você gosta

Origin blog.csdn.net/chinesehuazhou2/article/details/129848561
Recomendado
Clasificación