Esta implementación de LogicGuide es presentada por Agora, estamos dedicados a avanzar en la humanidad con una investigación significativa de código abierto de IA de código abierto
Únase a nuestra discordia para ayudar a contribuir a este proyecto o más de 40 proyectos
El enlace de papel está aquí
LogicGuide es un complemento innovador que se puede conectar a cualquier modelo para aumentar sus capacidades de razonamiento lógico en un 40%. LogicGuide está diseñado para permitir que su modelo aproveche el poder de los algoritmos y funciones de razonamiento lógico avanzado, lo que le permite generar respuestas más precisas, sensatas y significativas. ¡Es tan simple como Plug and Play!
Primero, clone este repositorio:
git clone https://github.com/kyegomez/LOGICGUIDE.git
cd LOGICGUIDE
Luego, instale las dependencias necesarias:
pip install -r requirements.txt
A continuación se muestra la guía de uso para Logicguide:
from logicguide import MemoryGuide , QuoteGuide , AlgebraGuide , LogicGuide ,
model_id = "tiiuae/falcon-40b"
device = "cuda:0" # Change to "cpu" if you don't have a CUDA-compatible GPU.
# Memory Guide
memory_guide = MemoryGuide ()
logic_guide = LogicGuide ( model_id = model_id , guide_function = memory_guide , device = device )
text = "[[set:name=OpenAI]] What is your name?"
print ( logic_guide . generate ( text )) # Output: "My name is OpenAI."
text = "[[get:name=]] What is your name?"
print ( logic_guide . generate ( text )) # Output: "My name is OpenAI."
# Quote Guide (for this example, we're using Project Gutenberg's "The Adventures of Sherlock Holmes")
quote_guide = QuoteGuide ( source = "https://www.gutenberg.org/files/1661/1661-h/1661-h.htm" )
logic_guide = LogicGuide ( model_id = model_id , guide_function = quote_guide , device = device )
text = "[[quote:]] What is a quote from Sherlock Holmes?"
print ( logic_guide . generate ( text )) # Output: A quote from "The Adventures of Sherlock Holmes" (random quote from the source)
# Algebra Guide
algebra_guide = AlgebraGuide ()
logic_guide = LogicGuide ( model_id = model_id , guide_function = algebra_guide , device = device )
text = "[[eq]] x^2 + 3x + 2 = 0"
print ( logic_guide . generate ( text )) # Output: "x^2 + 3x + 2 = 0" (and stores the equation for later)
text = "[[solve:x=]] What is the value of x?"
print ( logic_guide . generate ( text )) # Output: "The value of x is ..." (the solutions of the equation)
¡Nos encanta tu aporte! Queremos que contribuir a Logicguide sea lo más fácil y transparente posible. Consulte nuestra guía de contribución para obtener más información.
Establecer meta funciones formalizadas de contexto que aumenten la respuesta base LLM
Establecer suite de prueba de referencia de los documentos
Establecer más funciones de guía
LogicGuide se publica bajo la licencia MIT. Consulte el archivo de licencia para obtener más detalles.
Nota: LogicGuide fue creado y es mantenido por Kye Gómez.
Esta es una clase de guía básica que no altera la entrada.
Métodos
__call__(self, history)
: cuando la instancia de clase se llama como una función, simplemente devuelve el history
de cadenas de entrada sin cambios. Esta clase de guía está diseñada para interactuar con operaciones relacionadas con el dígito en la cadena de entrada.
Métodos
__init__(self)
: en el método de inicialización, se crea un objeto de expresión regular que coincide con uno o más dígitos.__call__(self, history)
: si el history
de cadenas de entrada coincide con la expresión regular (es decir, es una secuencia de dígitos), el método devuelve el objeto de expresión regular. De lo contrario, no devuelve ninguno. Esta es una clase para crear funciones de guía basadas en una herramienta proporcionada.
Métodos
__init__(self, tool)
: el método de inicialización acepta un objeto tool
que se almacena para su uso posterior.__call__(self, model_output)
: cuando la instancia se llama como una función con model_output
como argumento, aplica el método tool_check
del objeto de tool
a model_output
. Esta función se utiliza para verificar la paridad de una cadena binaria.
binary_string
: esta función toma una cadena binaria como argumento.1
Si la cadena binaria tiene un número par de 1 (perteneciente al lenguaje de paridad), y 0
si no es así. Estas clases están diseñadas para proporcionar una verificación lógica y una verificación de hechos en el texto de entrada respectivamente.
Métodos
check(self, text)
: estos métodos aceptan un text
de cadena como entrada y return True. En una implementación completa, estos métodos utilizarían sistemas lógicos complejos, análisis semántico, sistemas de inferencia lógica y sistemas de verificación de hechos para verificar la consistencia lógica y la precisión objetiva del texto. Esta clase actúa como gerente de memoria, almacenando y recuperando valores basados en ciertos desencadenantes en la cadena de entrada.
Métodos
__init__(self)
: en el método de inicialización, se crea un diccionario vacío para actuar como el almacén de memoria.__call__(self, history)
: este método modifica el history
de cadenas de entrada basado en los desencadenantes establecidos de memoria/GET. Esta clase obtiene citas de una URL de origen y permite el reemplazo de un disparador de cotización en el texto de entrada con una cita de la fuente.
Métodos
__init__(self, source)
: el método de inicialización acepta una URL de origen y almacena una lista de citas obtenidas de la fuente.get_quotes_from_source(self)
: este método obtiene todos los párrafos de la página web de origen y los devuelve como una lista.__call__(self, history)
: este método reemplaza un disparador de cotización en el history
de cadenas de entrada con una cita de la fuente. Esta clase interactúa con ecuaciones algebraicas en la cadena de entrada.
Métodos
__init__(self)
: el método de inicialización crea un diccionario vacío para almacenar pares de símbolos variables.__call__(self, history)
: este método interactúa con el history
de cadenas de entrada basado en la ecuación y resuelve los desencadenantes. Esta clase actúa como la guía lógica principal que utiliza la biblioteca de transformadores faciales de abrazos para generar respuestas basadas en una función de guía.
Métodos
__init__(self, model_id, guide_function=None, device="cuda:0")
: el método de inicialización establece el modelo de transformadores y el tokenizer basado en model_id
, y establece la función guía a guide_function
o a a función predeterminada si guide_function
es ninguno.
default_guide_function(self, S)
: este método devuelve la cadena de entrada S
sin cambios.get_bnb_config(self)
: este método devuelve un objeto BitsAndBytesConfig
para cuantización del modelo.guide(self, S)
: este método aplica la función de guía a las cadenas de entrada S
.get_blocks(self, s)
: este método devuelve una lista de todos los bloques de guía en las cadenas de entrada s
.generate(self, text, max_new_tokens=20)
: este método genera una respuesta basada en el text
de la cadena de entrada, utilizando el modelo Transformers y aplicando la función de guía si es necesario. El uso de ejemplo muestra cómo usar la clase LogicGuide
con un modelo de transformadores específico. Genera una respuesta a la entrada "¿Cuál es su teoría de todo?" Utilizando el comportamiento predeterminado del modelo, ya que no se proporciona ninguna función de guía.