Esta aplicación utiliza LLM (modelo de lenguaje grande) GPT-4o al que se accede a través de la API OpenAI para generar texto basado en la entrada del usuario. La entrada del usuario se utiliza para recuperar información relevante de la base de datos y luego la información recuperada se utiliza para generar el texto. Este enfoque combina el poder de los transformadores y el acceso a los documentos fuente.
En esta aplicación particular, se busca información relacionada con una persona específica en la base de datos de más de 1000 sitios web. El verdadero desafío aquí es que la persona buscada "Michał Żarnecki" aparece en 2 contextos diferentes como 2 personas diferentes con el mismo nombre. El objetivo no sólo es encontrar información específica sino también comprender el contexto y evitar errores como mezclar información sobre dos personas diferentes con el mismo nombre.
Describí los conceptos utilizados en esta aplicación con más detalles en el artículo sobre medium.com https://medium.com/@michalzarnecki88/a-guide-to-using-llm-retrieval-augmented-generation-with-php-3bff25ce6616
Para la configuración, primero debe tener instalado Docker y Docker Compose https://docs.docker.com/compose/install/
Ejecutar en CLI: cd app/src && composer install
Modelo de lenguaje de configuración: elija entre las siguientes opciones: opción con API OpenAI
"A" con modelo gratuito vía ollama API3 local
"B" con API OpenAI
La opción B es más simple y requiere menos recursos de CPU y RAM, pero necesita la clave API de OpenAI https://platform.openai.com/settings/profile?tab=api-keys
La opción A requiere más recursos de CPU y RAM, pero puede ejecutar localmente usando ollama API. Para esta opción es bueno tener GPU.
Siga las instrucciones para la opción preferida A o B a continuación:
Si desea configurar ollama localmente, utilice las instrucciones que se encuentran al final de este archivo, pero en caso de utilizar Docker no será necesario.
*Ollama proporciona API local para LLM: "Póngase en funcionamiento con modelos de lenguaje grandes". https://ollama.com/
docker-compose up
*SUGERENCIA: El script debe transformar primero los documentos de origen, lo que puede tardar incluso 30 minutos. Si desea ahorrar algo de tiempo, simplemente elimine parte de los documentos de app/src/documents.
Espere hasta que finalice la configuración de los contenedores; debería ver en los registros de la consola:
php-app | Loaded documents complete
php-app | Postgres is ready - executing command
php-app | [Sat Nov 02 11:32:28.365214 2024] [core:notice] [pid 1:tid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
Puede utilizar la aplicación como API mediante solicitudes como se muestra a continuación:
Opción A ollama:
curl -d '{"prompt":"what is result of 2+2?"}' -H "Content-Type: application/json" -X POST http://127.0.0.1:2037/processOllama.php?api
Opción B OpenAI GPT:
curl -d '{"prompt":"what is result of 2+2?"}' -H "Content-Type: application/json" -X POST http://127.0.0.1:2037/processGpt.php?api
Ejecute Docker Interactive docker exec -it php-app sh
Ejecutar en CLI: php minicli rag
hacer pregunta
##### INPUT:
What is the result of 2 + 2?
##### RESPONSE:
The result of 2 + 2 is 4.
##### INPUT:
what is specialization of Michał Żarnecki based on his website content
##### RESPONSE:
Michał Żarnecki is a programmer and lecturer specializing in several key areas related to modern software development and data-driven technologies.
His expertise includes:
1. **Programming Languages**: Python, PHP, JavaScript.
2. **AI and Machine Learning**: Designing systems and solutions related to artificial intelligence and machine learning.
3. **Data Mining and Big Data**: Extracting valuable insights from large datasets.
4. **Natural Language Processing (NLP)**: Working on systems that understand and generate human language.
5. **Software Development Frameworks**: Utilizing various tools and frameworks such as Streamlit, TensorFlow, PyTorch, and langchain.
6. **Database Systems**: Implementing and working with databases like PostgreSQL, Elasticsearch, Neo4j, and others.
His portfolio highlights projects such as an AI chatbot for analyzing company documents and a self-driving vehicle based on TensorFlow and Raspberry Pi.
Additionally, he has contributed to conferences and created e-learning courses focused on machine learning, underscoring his dual role as a developer and educator.
##### INPUT:
Is Michał Żarnecki programmer the same person as Michał Żarnecki audio engineer?
##### RESPONSE:
Based on the information provided, it appears that Michał Żarnecki the programmer and Michał Żarnecki the audio engineer are not the same person.
Here’s why:
1. **Fields of Expertise**:
- Michał Żarnecki, the audio engineer, was a well-known operator and reżyser dźwięku (sound director) in Poland, with notable contributions to the Polish film industry, as mentioned in the Wikipedia excerpt.
- Michal Żarnecki, the programmer, has a portfolio focused on programming in Python, PHP, and JavaScript, with projects related to AI, machine learning, data mining, and software development.
2. **Lifespan**:
- Michał Żarnecki the audio engineer was born on November 12, 1946, and passed away on November 21, 2016.
- The projects listed in Michał Żarnecki the programmer’s portfolio date from 2014 to 2016, which would be conflicting if he had passed away in 2016 and was actively working in those years.
3. **Occupational Focus**:
- The audio engineer has a career documented in film sound engineering and education.
- The programmer’s career is centered around software development, mobile applications, ERP systems, and consulting in technology.
Given the distinct differences in their professional domains, timelines, and expertise, it is highly unlikely that they are the same individual
Concepto básico:
Más detalles para nerds:
Para acelerar la carga de documentos o utilizar más de ellos para una mejor recuperación, manipule el valor $skipFirstN en app/src/service/DocumentLoader.php:20
Después de los cambios en los scripts PHP, reconstruya la ventana acoplable con comandos:
docker-compose rm
docker rmi -f php-rag
docker-compose up
Los sitios web utilizados para completar la base de datos de vectores provienen del conjunto de datos de "Clasificación de sitios web" en Kaggle. Autor: Hetul Mehta. Enlace: https://www.kaggle.com/datasets/hetulmehta/website-classification?resource=download.
artículos/repositorios relacionados:
https://medium.com/mlearning-ai/create-a-chatbot-in-python-with-langchain-and-rag-85bfba8c62d2
https://github.com/Krisseck/php-rag
https://ollama.com/download
ollama pull llama3:latest
ollama pull mxbai-embed-large
ollama list
NAME ID SIZE MODIFIED
mxbai-embed-large:latest 468836162de7 669 MB 7 seconds ago
llama3:latest 365c0bd3c000 4.7 GB 17 seconds ago
ollama serve
app/src/loadDocuments.php
(predeterminado) Avíseme si encuentra algún problema o algo que pueda mejorar. Puede ponerse en contacto conmigo en la dirección de correo electrónico [email protected]. No dudes en informar errores y proponer actualizaciones en las solicitudes de extracción.