Analice su código localmente utilizando un LLM de GPT4All. No se comparten datos ni se requiere conexión a Internet después de descargar todos los archivos necesarios. Eunomia se basa en el proyecto privado GPT original de Imartinez. Eunomia se limita a analizar únicamente los archivos de código fuente proporcionados y darle una respuesta basada en su consulta.
Con un nuevo proyecto Django
Con un proyecto C++
LLM | Descargar | backend | Tamaño |
---|---|---|---|
? ggml-gpt4all-l13b-snoozy.bin | Descargar | llama | 8,0GB |
?️ ggml-nous-gpt4-vicuña-13b.bin | Descargar | llama | 8,0GB |
? ggml-gpt4all-j-v1.3-groovy.bin | Descargar | gptj | 3,7GB |
Lang | Extensión |
---|---|
Pitón | .py |
C++ | .cpp y .hpp |
Java | .java y .jar |
js | .js |
Rubí | .rb |
Óxido | .rs |
IR | .ir |
escala | .scala y .sc |
Rápido | .rápido |
PHP | .php |
Látex | .Texas |
Aquí está el enlace al código fuente de la clase de idiomas de Langchain con todos los idiomas que Langchain admite actualmente.
Eunomia usa Chroma para crear un vectorstore con los archivos en el directorio donde se ejecuta y luego usa langchain para alimentar el vectorstore al LLM de su elección. A partir de ahora, solo se admiten los modelos GPT4All ya que no tengo acceso a ChatGPT.
Primero clona el repositorio en una carpeta usando:
https://github.com/Ngz91/Eunomia.git
Después de clonar el repositorio, debe instalar las dependencias en el archivo requisitos.txt ejecutando pip install -r requirements.txt
(recomiendo que haga esto dentro de un entorno Python).
Luego descargue uno de los modelos compatibles en la sección Modelos probados y guárdelo dentro de una carpeta dentro de la carpeta Eunomia.
Cambie el nombre de example.env
a .env
y edite las variables adecuadamente.
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: Hay dos formas de ejecutar Eunomia, una es usando python path/to/Eunomia.py arg1
y la otra es creando un script por lotes y colocándolo dentro de su carpeta Python Scripts (en Windows se encuentra en UsuarioAppDAta). LocalProgamsPythonPythonxxxScripts) y ejecutando eunomia arg1
directamente. Por la naturaleza de cómo funciona Eunomia, se recomienda crear un script por lotes y ejecutarlo dentro de la carpeta donde desea que se analice el código. Puede utilizar el archivo example.bat
como ejemplo para configurar su archivo por lotes usted mismo, pero recuerde editar las rutas python pathtoEunomia.py %1
para que apunte a la ruta donde se encuentra Eunomia.py en su máquina. De ahora en adelante usaré el script por lotes como ejemplo.
Active su entorno Python (si creó uno), vaya a la carpeta donde está su código e ingiera los archivos para crear el vectorstore que el LLM seleccionado usará como contexto para responder sus preguntas ejecutando:
eunomia ingest
La primera vez que ejecute el script, necesitará una conexión a Internet para descargar el modelo de incrustaciones. No necesitará ninguna conexión a Internet cuando vuelva a ejecutar la ingesta.
Verás algo como esto si todo salió correctamente:
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!
Una vez creado el vectorstore, puedes iniciar Eunomia ejecutando:
eunomia start
La primera vez tardará unos segundos. Una vez que termine de cargar el modelo, recibirá un mensaje como este si el modelo se cargó correctamente:
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: En caso de que encuentre errores al cargar el LLM, asegúrese de estar utilizando el backend correcto para el LLM que está utilizando. Además, algunas respuestas pueden estar incompletas o ser incorrectas. Mientras realizaba las pruebas, descubrí que esto se puede mejorar probando diferentes tamaños de fragmentos, superposición de fragmentos, n_ctx y target_source_chunks. Puedes usar otros modelos para probar si su respuesta es mejor que los probados hasta ahora, recuerda buscar cómo puedes usar esos modelos con langchain y sus respectivos backends.
Para utilizar este software, debe tener instalado Python 3.10 o posterior. Las versiones anteriores de Python no se compilarán.
Si encuentra un error al crear una rueda durante el proceso pip install
, es posible que necesite instalar un compilador de C++ en su computadora.
Para instalar un compilador de C++ en Windows 10/11, siga estos pasos:
gcc
. Cuando ejecuta una Mac con hardware Intel (no M1), puede encontrarse con clang: error: el compilador clang no admite '-march=native' durante la instalación de pip.
Si es así, configure sus archflags durante la instalación de pip. por ejemplo: ARCHFLAGS="-arch x86_64" instalación de pip3 -r requisitos.txt
Este es un proyecto de prueba para validar la viabilidad de una solución totalmente privada para responder preguntas utilizando LLM e incrustaciones de vectores. No está listo para producción y no está diseñado para usarse en producción. La selección de modelos no está optimizada para el rendimiento, sino para la privacidad; pero es posible utilizar diferentes modelos y vectores para mejorar el rendimiento.