Analise seu código localmente usando um GPT4All LLM. Nenhum dado compartilhado e nenhuma conexão com a Internet são necessárias após o download de todos os arquivos necessários. Eunomia é baseada no projeto privateGPT original da imartinez. Eunomia limita-se a analisar apenas os arquivos de código-fonte fornecidos e dar uma resposta com base na sua consulta.
Com um novo projeto Django
Com um projeto C++
LLM | Download | Back-end | Tamanho |
---|---|---|---|
? ggml-gpt4all-l13b-snoozy.bin | Download | lhama | 8,0GB |
?️ ggml-nous-gpt4-vicuna-13b.bin | Download | lhama | 8,0GB |
? ggml-gpt4all-j-v1.3-groovy.bin | Download | gptj | 3,7GB |
Lang | Extensão |
---|---|
Pitão | .py |
C++ | .cpp e .hpp |
Java | .java e .jar |
JS | .js |
Rubi | .rb |
Ferrugem | .rs |
IR | .ir |
escala | .scala e .sc |
Rápido | .rápido |
PHP | .php |
Látex | .tex |
Aqui está o link para o código fonte da classe de idiomas do Langchain com todos os idiomas atualmente suportados pelo Langchain.
Eunomia usa Chroma para criar um vectorstore com os arquivos do diretório onde é executado e depois usa langchain para alimentar o vectorstore para o LLM de sua escolha. No momento, apenas os modelos GPT4All são suportados, pois não tenho acesso ao ChatGPT.
Primeiro clone o repositório em uma pasta usando:
https://github.com/Ngz91/Eunomia.git
Depois que o repositório for clonado, você precisará instalar as dependências no arquivo requirements.txt executando pip install -r requirements.txt
(recomendo que você faça isso dentro de um ambiente Python).
Em seguida, baixe um dos modelos suportados na Seção Modelos Testados e salve-o em uma pasta dentro da pasta Eunomia.
Renomeie example.env
para .env
e edite as variáveis apropriadamente.
PERSIST_DIRECTORY: is the folder you want your vectorstore in
LLM: Path to your GPT4All or LlamaCpp supported LLM
BACKEND: Backend for your model (refer to models tested section)
EMBEDDINGS_MODEL_NAME: SentenceTransformers embeddings model name (see https://www.sbert.net/docs/pretrained_models.html)
MODEL_N_CTX: Maximum token limit for the LLM model
TARGET_SOURCE_CHUNKS: The amount of chunks (sources) that will be used to answer a question
IGNORE_FOLDERS: List of folders to ignore
IMPORTANTE: Existem duas maneiras de executar o Eunomia, uma é usando python path/to/Eunomia.py arg1
e a outra é criando um script em lote e colocando-o dentro da pasta Python Scripts (no Windows está localizado em UserAppDAta LocalProgamsPythonPythonxxxScripts) e executando eunomia arg1
diretamente. Pela natureza do funcionamento do Eunomia, é recomendável que você crie um script em lote e execute-o dentro da pasta onde deseja que o código seja analisado. Você pode usar o arquivo example.bat
como exemplo para configurar seu arquivo em lote, mas lembre-se de editar os caminhos python pathtoEunomia.py %1
para apontar para o caminho onde Eunomia.py está localizado em sua máquina. Usarei o script em lote como exemplo a partir de agora.
Ative seu ambiente Python (se você criou um), vá até a pasta onde está seu código e ingira os arquivos para criar o vectorstore que o LLM selecionado usará como contexto para responder suas perguntas executando:
eunomia ingest
Na primeira vez que você executar o script, será necessária uma conexão com a Internet para baixar o próprio modelo de embeddings. Você não precisará de nenhuma conexão com a Internet ao executar a ingestão novamente.
Você verá algo assim se tudo correr corretamente:
Creating new vectorstore
Loading documents from D:FolderSomeTest
Loading new documents: 100%|██████████████████████████████| 7/7 [00:00<?, ?it/s]
Loaded 7 new documents from D:Projectstests
Split into 14 chunks of text (max. 1000 tokens each)
Creating embeddings. May take some minutes...
Vectorstore created, you can now run 'eunomia start' to use the LLM to interact with your code!
Depois que o vectorstore for criado, você pode iniciar o Eunomia executando:
eunomia start
Na primeira vez, levará alguns segundos. Assim que terminar de carregar o modelo, você será saudado com um aviso como este se o modelo foi carregado com sucesso:
Found model file.
gptj_model_load: loading model from 'models\ggml-gpt4all-j-v1.3-groovy.bin' - please wait ...
gptj_model_load: n_vocab = 50400
gptj_model_load: n_ctx = 2048
gptj_model_load: n_embd = 4096
gptj_model_load: n_head = 16
gptj_model_load: n_layer = 28
gptj_model_load: n_rot = 64
gptj_model_load: f16 = 2
gptj_model_load: ggml ctx size = 5401.45 MB
gptj_model_load: kv self size = 896.00 MB
gptj_model_load: ................................... done
gptj_model_load: model size = 3609.38 MB / num tensors = 285
______ __ __ __ __ ______ __ __ __ ______
/ ___ / / / "-. / __ / "-./ / / __
__ _ \ -. \ / \ -./ \ \ __
_____\ _____\ _\"_\ _____\ _ _\ _\ _ _
/_____/ /_____/ /_/ /_/ /_____/ /_/ /_/ /_/ /_//_/
Enter a query:
Nota: Caso você encontre erros ao carregar o LLM, certifique-se de estar usando o back-end correto para o LLM que está usando. Além disso, algumas respostas podem estar incompletas ou erradas. Durante o teste, descobri que isso pode ser melhorado tentando diferentes tamanhos de blocos, sobreposição de blocos, n_ctx e target_source_chunks. Você pode usar outros modelos para testar se a resposta deles é melhor que os testados até agora, lembre-se de pesquisar como você pode usar esses modelos com langchain e seus respectivos backends.
Para usar este software, você deve ter o Python 3.10 ou posterior instalado. Versões anteriores do Python não serão compiladas.
Se você encontrar um erro ao construir uma roda durante o processo pip install
, pode ser necessário instalar um compilador C++ em seu computador.
Para instalar um compilador C++ no Windows 10/11, siga estas etapas:
gcc
. Ao executar um Mac com hardware Intel (não M1), você pode encontrar clang: erro: o compilador clang não suporta '-march=native' durante a instalação do pip.
Nesse caso, defina seus archflags durante a instalação do pip. por exemplo: ARCHFLAGS="-arch x86_64" pip3 install -r requisitos.txt
Este é um projeto de teste para validar a viabilidade de uma solução totalmente privada para resposta a perguntas usando LLMs e incorporações de vetores. Não está pronto para produção e não se destina a ser usado na produção. A seleção de modelos não é otimizada para desempenho, mas para privacidade; mas é possível usar diferentes modelos e vetores para melhorar o desempenho.