? Megabots proporciona aplicaciones de LLM de última generación, Production Ready, hechos mega-fácil, para que no tenga que construirlas desde cero? Crear un bot, ¿ahora?
La biblioteca Megabots se puede usar para crear bots que:
? Megabots está respaldado por algunas de las herramientas más famosas para producir IA. Utiliza Langchain para administrar las cadenas LLM, Langchain-servidor para crear una API de producción lista, Gradio para crear una interfaz de usuario. Por el momento, utiliza OpenAI para generar respuestas, pero planeamos apoyar a otros LLM en el futuro.
Nota: Este es un trabajo en progreso. La API podría cambiar.
pip install megabots from megabots import bot
import os
os . environ [ "OPENAI_API_KEY" ] = "my key"
# Create a bot with one line of code. Automatically loads your data from ./index or index.pkl.
# Keep in mind that you need to have one or another.
qnabot = bot ( "qna-over-docs" )
# Ask a question
answer = qnabot . ask ( "How do I use this bot?" )
# Save the index to save costs (GPT is used to create the index)
qnabot . save_index ( "index.pkl" )
# Load the index from a previous run
qnabot = bot ( "qna-over-docs" , index = "./index.pkl" )
# Or create the index from a directory of documents
qnabot = bot ( "qna-over-docs" , index = "./index" )
# Change the model
qnabot = bot ( "qna-over-docs" , model = "text-davinci-003" ) Puede cambiar los bots promnpt para personalizarlo a sus necesidades. En el tipo de BOT qna-over-docs deberá aprobar 2 variables para el context (Knwoledge buscó desde el índice) y la question (la pregunta humana).
from megabots import bot
prompt = """
Use the following pieces of context to answer the question at the end.
If you don't know the answer, just say that you don't know, don't try to make up an answer.
Answer in the style of Tony Stark.
{context}
Question: {question}
Helpful humorous answer:"""
qnabot = bot ( "qna-over-docs" , index = "./index.pkl" , prompt = prompt )
qnabot . ask ( "what was the first roster of the avengers?" ) Puede agregar fácilmente la memoria a su bot usando el parámetro memory . Acepta una cadena con el tipo de memoria que se utilizará. Esto es predeterminado a algunos Dafaults sane. Si necesita más configuración, puede usar la función memory y pasar el tipo de memoria y la configuración que necesita.
from megabots import bot
qnabot = bot ( "qna-over-docs" , index = "./index.pkl" , memory = "conversation-buffer" )
print ( qnabot . ask ( "who is iron man?" ))
print ( qnabot . ask ( "was he in the first roster?" ))
# Bot should understand who "he" refers to. O usando la función de fábrica memory
from megabots import bot , memory
mem ( "conversation-buffer-window" , k = 5 )
qnabot = bot ( "qna-over-docs" , index = "./index.pkl" , memory = mem )
print ( qnabot . ask ( "who is iron man?" ))
print ( qnabot . ask ( "was he in the first roster?" )) Nota: Para el bot qna-over-docs , al usar la memoria y pasar su aviso personalizado, es importante recordar pasar una variable más a su mensaje personalizado para facilitar el historial de chat. El nombre de la variable es history .
from megabots import bot
prompt = """
Use the following pieces of context to answer the question at the end.
If you don't know the answer, just say that you don't know, don't try to make up an answer.
{context}
{history}
Human: {question}
AI:"""
qnabot = bot ( "qna-over-docs" , prompt = prompt , index = "./index.pkl" , memory = "conversation-buffer" )
print ( qnabot . ask ( "who is iron man?" ))
print ( qnabot . ask ( "was he in the first roster?" )) Megabots bot también puede usar Milvus como backend para su motor de búsqueda. Puede encontrar un ejemplo de cómo hacerlo a continuación.
Para ejecutar Milvus, debe seguir esta guía para descargar un archivo de composición de Docker y ejecutarlo. El comando es:
wget https://raw.githubusercontent.com/milvus-io/pymilvus/v2.2.7/examples/hello_milvus.pyLuego puede instalar Attu como herramienta de administración para Milvus
from megabots import bot
# Attach a vectorstore by passing the name of the database. Default port for milvus is 19530 and default host is localhost
# Point it to your files directory so that it can index the files and add them to the vectorstore
bot = bot ( "qna-over-docs" , index = "./examples/files/" , vectorstore = "milvus" )
bot . ask ( "what was the first roster of the avengers?" ) O utilice la función de fábrica vectorstore para una mayor personalización
from megabots import bot , vectorstore
milvus = vectorstore ( "milvus" , host = "localhost" , port = 19530 )
bot = bot ( "qna-over-docs" , index = "./examples/files/" , vectorstore = milvus ) También puede exponer los puntos finales de BOT localmente usando Langchain-servidor. Se proporciona un archivo de muestra api.py en la carpeta megabots .
Para exponer la API localmente, puede hacer
lc-serve deploy local megabots.api Luego debería poder visitar http://localhost:8000/docs para ver e interactuar con la documentación de la API.
Para implementar su API en la nube, puede hacer y conectarse a la API utilizando el punto final proporcionado en la salida.
lc-serve deploy jcloud megabots.api Puede exponer una interfaz de usuario de Gradio para el bot usando la función create_interface . Suponiendo que su archivo se llama ui.py ejecutar gradio qnabot/ui.py para ejecutar la interfaz de usuario localmente. Luego debería poder visitar http://127.0.0.1:7860 para ver la documentación de la API.
from megabots import bot , create_interface
demo = create_interface ( bot ( "qna-over-docs" )) La función bot debe servir como punto de partida para crear y personalizar su bot. A continuación se muestra una lista de los argumentos disponibles en bot .
| Argumento | Descripción |
|---|---|
| tarea | El tipo de bot para crear. Opciones disponibles: qna-over-docs . Más que se llega pronto |
| índice | Especifica el índice a usar para el bot. Puede ser un archivo de índice guardado (por ejemplo, index.pkl ) o un directorio de documentos (por ejemplo, ./index ). En el caso del directorio, el índice se creará automáticamente. Si no se especifica un índice, bot buscará index.pkl o ./index |
| modelo | El nombre del modelo para usar para el bot. Puede especificar un modelo diferente proporcionando su nombre, como "Text-Davinci-003". Modelos compatibles: gpt-3.5-turbo (predeterminado), text-davinci-003 más que se comunica pronto. |
| inmediato | Una plantilla de cadena para la solicitud, que define el formato de la pregunta y el contexto pasado al modelo. La plantilla debe incluir variables de marcador de posición como el así: context , {question} y en el caso de usar history de memoria. |
| memoria | El tipo de memoria que debe utilizar el bot. Puede ser una cadena con el tipo de memoria o puede usar la función de fábrica memory . Memorias apoyadas: conversation-buffer , conversation-buffer-window |
| vectorial | La tienda vectorial se utilizará para el índice. Puede ser una cadena con el nombre del sés de datos o puede usar la función de fábrica vectorstore . DBS compatible: milvus . |
Los modelos de idiomas grandes (LLM) son poderosos, pero no pueden responder preguntas sobre documentos que no han visto. Si desea utilizar un LLM para responder preguntas sobre documentos en los que no estaba capacitado, debe darle información sobre esos documentos. Para resolver esto, utilizamos "generación de recuperación aumentada".
En términos simples, cuando tiene una pregunta, primero busca documentos relevantes. Luego, le da los documentos y la pregunta al modelo de idioma para generar una respuesta. Para que esto funcione, necesita sus documentos en un formato de búsqueda (un índice). Este proceso implica dos pasos principales: (1) Preparar sus documentos para una consulta fácil y (2) usar el método de generación aumentada de recuperación.
qna-over-docs usa FAISS para crear un índice de documentos y GPT para generar respuestas.
secuencediagram
usuario de actor
API participante
Participante LLM
tienda vectorial participante
Ingestión de participante
Datake de participante
autónomo
Nota sobre API, Datalake: Fase de ingestión
Luce cada X tiempo
IngestionEngine ->> Datalake: Documentos de carga
Datalake ->> IngestionEngine: Datos de retorno
IngestionEngine ->> IngestionEngine: Documentos divididos y cree incrustaciones
IngestionEngine ->> Vectorstore: almacenar documentos e incrustaciones
fin
Nota sobre API, Datalake: Fase de generación
Usuario ->> API: recibir pregunta del usuario
API ->> Vectorstore: documentos de búsqueda en el índice relevante para la pregunta
API ->> API: Construya un mensaje a partir de la pregunta y cualquier documento relevante
API ->> LLM: pase el indicador al modelo
LLM ->> API: Obtenga respuesta del modelo
API ->> Usuario: Respuesta de retorno