LEA ESTO EN INGLÉS
LangChain-Chatchat (anteriormente Langchain-ChatGLM)
Basado en grandes modelos de lenguaje como ChatGLM y marcos de aplicaciones como Langchain, es un proyecto de aplicación RAG y Agent de código abierto que se puede implementar sin conexión.
Descripción general
Introducción a la función
Descripción general de las funciones 0.3.x
Marcos y modelos de inferencia de modelos admitidos
Comience rápidamente
instalación e implementación de pip
Instalación e implementación del código fuente/implementación de desarrollo
Implementación de Docker
Hitos del proyecto
Contáctenos
?️ Una aplicación de preguntas y respuestas basada en una base de conocimientos local implementada utilizando ideas de langchain. El objetivo es crear una solución de preguntas y respuestas de base de conocimientos que sea compatible con escenarios chinos y modelos de código abierto y que pueda ejecutarse sin conexión.
? Inspirada en el proyecto document.ai de GanymedeNil y la solicitud de extracción ChatGLM-6B creada por Alex Zhangji, se estableció una aplicación de preguntas y respuestas de base de conocimiento local que se puede implementar utilizando modelos de código abierto durante todo el proceso. En la última versión de este proyecto, se pueden utilizar marcos como Xinference y Ollama para acceder a modelos como GLM-4-Chat, Qwen2-Instruct, Llama3, etc., confiando en el marco langchain para admitir servicios de llamadas a través de API proporcionadas en base. en FastAPI, o utilizando la WebUI basada en Streamlit.
✅ Este proyecto es compatible con los principales LLM de código abierto, modelos de incrustación y bases de datos vectoriales en el mercado, y puede realizar una implementación privada fuera de línea de todos los modelos de código abierto. Al mismo tiempo, este proyecto también admite la llamada de la API OpenAI GPT y continuará ampliando el acceso a varios modelos y API de modelos en el futuro.
⛓️ El principio de implementación de este proyecto se muestra en la siguiente figura. El proceso incluye cargar archivos -> leer texto -> segmentación de texto -> vectorización de texto -> vectorización de preguntas -> hacer coincidir top k
del vector de texto que sea más similar al. vector de pregunta top k
-> El texto coincidente se agrega prompt
como contexto y pregunta -> Enviado a LLM
para generar una respuesta.
Vídeo de introducción al principio
Desde la perspectiva del procesamiento de documentos, el proceso de implementación es el siguiente:
? Este proyecto no implica procesos de ajuste o capacitación, pero el ajuste o la capacitación se pueden utilizar para optimizar el efecto de este proyecto.
? El código utilizado en la versión 0.3.0
de la imagen de AutoDL se ha actualizado a la versión v0.3.0
de este proyecto.
? La imagen de Docker se actualizará en un futuro próximo.
?? Si desea contribuir a este proyecto, visite la guía de desarrollo para obtener más información sobre el desarrollo y la implementación.
Función | 0.2.x | 0.3.x |
---|---|---|
Acceso al modelo | Local: chat rápido En línea: XXXModelWorker | Local: model_provider, admite la mayoría de los principales marcos de carga de modelos En línea: oneapi Todos los accesos a modelos son compatibles con openai sdk. |
Agente | ❌Inestable | ✅Optimizado para ChatGLM3 y Qwen, las capacidades del agente han mejorado significativamente |
Conversación de LLM | ✅ | ✅ |
Conversación sobre la base de conocimientos | ✅ | ✅ |
conversación en el motor de búsqueda | ✅ | ✅ |
conversación de archivo | ✅Recuperación de vectores únicamente | ✅Unificado en la función File RAG, que admite múltiples métodos de búsqueda como BM25+KNN |
Diálogo de base de datos | ❌ | ✅ |
Diálogo de imágenes multimodal | ❌ | ✅ Se recomienda utilizar qwen-vl-chat |
Diálogo de literatura ARXIV | ❌ | ✅ |
Conversación de Wolfram | ❌ | ✅ |
Cuadro vicenciano | ❌ | ✅ |
Gestión de la base de conocimiento local | ✅ | ✅ |
WEBUI | ✅ | ✅Mejor soporte multisesión, palabras de aviso del sistema personalizadas... |
Las funciones principales de la versión 0.3.x las implementa el Agente, pero los usuarios también pueden implementar llamadas a herramientas manualmente:
Modo de operación | Funciones implementadas | Escenarios aplicables |
---|---|---|
Marque "Habilitar agente" y seleccione varias herramientas | Llamada automática de herramientas por LLM | Utilice modelos con capacidades de agente como ChatGLM3/Qwen o API en línea |
Marque "Habilitar agente" y seleccione una sola herramienta | LLM solo analiza los parámetros de la herramienta | El agente modelo utilizado tiene capacidades promedio y no puede seleccionar muy bien las herramientas. Quiero seleccionar funciones manualmente. |
Desmarque "Habilitar agente" y seleccione una sola herramienta | Sin utilizar la función Agente, complete manualmente los parámetros para llamar a la herramienta. | El modelo utilizado no tiene capacidades de agente. |
Desmarca cualquier herramienta y sube una imagen. | Conversación de imágenes | Utilice modelos multimodales como qwen-vl-chat |
Para obtener más funciones y actualizaciones, experimente la implementación real.
Este proyecto ya admite modelos recientes de lenguajes grandes de código abierto y modelos de incrustación que son comunes en el mercado, como GLM-4-Chat y Qwen2-Instruct. Estos modelos requieren que los usuarios inicien el marco de implementación del modelo por sí mismos y accedan al proyecto modificando el. Información de configuración de este proyecto. Los marcos de implementación del modelo local admitidos son los siguientes:
Marco de implementación del modelo | Xinferencia | IA local | Ollama | Chat rápido |
---|---|---|---|---|
Alineación de la interfaz API OpenAI | ✅ | ✅ | ✅ | ✅ |
Acelerar los motores de inferencia | GPTQ, GGML, vLLM, TensorRT, mlx | GPTQ, GGML, vLLM, TensorRT | GGUF, GGML | vllm |
Tipo de modelo de acceso | LLM, incrustación, reclasificación, texto a imagen, visión, audio | LLM, incrustación, reclasificación, texto a imagen, visión, audio | LLM, texto a imagen, visión | Maestría en Derecho, Visión |
Llamada de función | ✅ | ✅ | ✅ | / |
Más soporte de plataforma (CPU, Metal) | ✅ | ✅ | ✅ | ✅ |
Heterogéneo | ✅ | ✅ | / | / |
grupo | ✅ | ✅ | / | / |
Enlace al documento operativo | Documentación | Documentación de AI local | Documentación Ollama | Documentación de FastChat |
Modelos disponibles | Xinference ya admite modelos | LocalAI ya admite modelos | Ollama ya apoya modelos | FastChat ya admite modelos |
Además del marco de carga de modelos locales mencionado anteriormente, el proyecto también brinda soporte para el acceso del marco One API a API en línea, incluidas OpenAI ChatGPT, Azure OpenAI API, Anthropic Claude, Zhipu Qingyan, Baichuan y otras API en línea de uso común. usar.
Nota
Acerca de la carga de modelos locales de Xinference: los modelos integrados de Xinference se descargarán automáticamente. Si desea que cargue el modelo descargado localmente, puede ejecutar streamlit run xinference_manager.py
en el directorio herramientas del proyecto/model_loaders después de iniciar el servicio Xinference. Indicaciones de la página: simplemente especifique el modelo para establecer la ruta local.
? En términos de software, este proyecto ha admitido el uso en el entorno Python 3.8-3.11 y ha sido probado en los sistemas operativos Windows, macOS y Linux.
? En términos de hardware, dado que la versión 0.3.0 se modificó para admitir el acceso a diferentes marcos de implementación de modelos, se puede utilizar en diferentes condiciones de hardware, como CPU, GPU, NPU, MPS, etc.
A partir de la versión 0.3.0, Langchain-Chachat proporciona un método de instalación en forma de biblioteca de Python. Para una instalación específica, ejecute:
instalación de pip langchain-chatchat -U
Importante
Para garantizar que la biblioteca Python utilizada sea la última versión, se recomienda utilizar la fuente oficial de Pypi o la fuente de Tsinghua.
Nota
Debido a que el marco de implementación del modelo Xinference requiere una instalación adicional de la biblioteca de dependencia de Python correspondiente cuando se conecta a Langchain-Chachat, se recomienda utilizar el siguiente método de instalación cuando se usa con el marco Xinference:
pip install "langchain-chatchat[xinferencia]" -U
A partir de la versión 0.3.0, Langchain-Chatchat ya no carga modelos directamente en función de la ruta del modelo local ingresada por el usuario. Los tipos de modelos involucrados incluyen LLM, Embedding, Reranker y modelos multimodales que serán compatibles en el futuro. etc., se han cambiado para Admitir el acceso a los principales marcos de inferencia de modelos comúnmente disponibles en el mercado, como Xinference, Ollama, LocalAI, FastChat, One API, etc.
Por lo tanto, asegúrese de que antes de iniciar el proyecto Langchain-Chachat, primero ejecute el marco de inferencia del modelo y cargue el modelo requerido.
Aquí tomamos Xinference como ejemplo. Consulte la documentación de Xinference para la implementación del marco y la carga del modelo.
Advertencia
Para evitar conflictos de dependencia, coloque Langchain-Chachat y marcos de implementación de modelos como Xinference en diferentes entornos virtuales de Python, como conda, venv, virtualenv, etc.
A partir de la versión 0.3.1, Langchain-Chachat utiliza archivos yaml
locales para la configuración. Los usuarios pueden ver y modificar directamente el contenido, y el servidor se actualizará automáticamente sin reiniciar.
Establezca el directorio raíz donde Chatchat almacena archivos de configuración y archivos de datos (opcional)
# en linux o macosexport CHAATCHAT_ROOT=/ruta/a/chatchat_data # en windowsset CHAATCHAT_ROOT=/ruta/a/chatchat_data
Si esta variable de entorno no está configurada, el directorio actual se utilizará automáticamente.
Realizar inicialización
inicio de chat
Este comando hace lo siguiente:
Cree todos los directorios de datos necesarios
Copiar ejemplos de contenido de la base de conocimientos
Generar archivo de configuración yaml
predeterminado
Modificar archivo de configuración
Configurar el modelo (model_settings.yaml)
Debe realizar la configuración de acceso al modelo de acuerdo con el marco de inferencia del modelo seleccionado en el paso 2. Marco de inferencia del modelo y cargar el modelo y el modelo cargado. Para obtener más detalles, consulte los comentarios en model_settings.yaml
. Modificar principalmente los siguientes contenidos:
# El nombre de LLM predeterminado DEFAULT_LLM_MODEL: qwen1.5-chat # El nombre de incrustación predeterminado DEFAULT_EMBEDDING_MODEL: bge-large-zh-v1.5 # Cambie las claves de `llm_model, action_model` en `LLM_MODEL_CONFIG` al modelo LLM correspondiente# Modifique el información de la plataforma del modelo correspondiente en `MODEL_PLATFORMS`
Configurar la ruta de la base de conocimientos (basic_settings.yaml) (opcional)
La base de conocimientos predeterminada se encuentra en CHATCHAT_ROOT/data/knowledge_base
. Si desea colocar la base de conocimientos en una ubicación diferente o desea conectarse a una base de conocimientos existente, puede modificar el directorio correspondiente aquí.
# Ruta de almacenamiento predeterminada de la base de conocimientos KB_ROOT_PATH: D:chatchat-testdataknowledge_base # Ruta de almacenamiento predeterminada de la base de datos. Si usa sqlite, puede modificar DB_ROOT_PATH directamente; si usa otras bases de datos, modifique SQLALCHEMY_DATABASE_URI directamente; DB_ROOT_PATH: D:chatchat-testdataknowledge_baseinfo.db # Información de la base de conocimientos URI de conexión a la base de datos SQLALCHEMY_DATABASE_URI: sqlite:///D:chatchat-testdataknowledge_baseinfo.db
Configurar la base de conocimientos (kb_settings.yaml) (opcional)
La base de conocimientos FAISS
se utiliza de forma predeterminada. Si desea conectarse a otros tipos de bases de conocimientos, puede modificar DEFAULT_VS_TYPE
y kbs_config
.
Advertencia
Antes de inicializar la base de conocimientos, asegúrese de que se haya iniciado el marco de inferencia del modelo y el modelo embedding
correspondiente, y que se haya completado la configuración de acceso al modelo de acuerdo con el paso 3 anterior.
chatchat kb -r
Para obtener más funciones, consulte chatchat kb --help
Aparece el siguiente registro indicando el éxito:
----------------------------------------------------------------------------------------------------
知识库名称 :samples
知识库类型 :faiss
向量模型: :bge-large-zh-v1.5
知识库路径 :/root/anaconda3/envs/chatchat/lib/python3.11/site-packages/chatchat/data/knowledge_base/samples
文件总数量 :47
入库文件数 :42
知识条目数 :740
用时 :0:02:29.701002
----------------------------------------------------------------------------------------------------
总计用时 :0:02:33.414425
Nota
Preguntas frecuentes sobre la inicialización de la base de conocimientos
Este problema suele ocurrir en entornos virtuales recién creados y puede confirmarse mediante:
from unstructured.partition.auto import partition
Si la declaración está bloqueada y no se puede ejecutar, puede ejecutar el siguiente comando:
pip uninstall python-magic-bin# comprueba la versión del paquete desinstalado pip install 'python-magic-bin=={versión}'
Luego siga las instrucciones de esta sección para volver a crear la base de conocimientos.
inicio de chatchat -a
Cuando aparece la siguiente interfaz, el inicio es exitoso:
Advertencia
Dado que la dirección de escucha predeterminada DEFAULT_BIND_HOST
configurada por chatchat es 127.0.0.1, no se puede acceder a ella a través de otras IP.
Si necesita acceder a través de la IP de la máquina (como el sistema Linux), debe cambiar la dirección de escucha a 0.0.0.0 en basic_settings.yaml
.
Para configurar la conversación de la base de datos, vaya aquí para obtener instrucciones de configuración de la conversación de la base de datos.
Consulte la guía de desarrollo para la instalación e implementación del código fuente.
ventana acoplable extraer imagen de chat/chatchat:0.3.1.3-93e2c87-20240829 docker pull ccr.ccs.tencentyun.com/langchain-chatchat/chatchat:0.3.1.3-93e2c87-20240829 # Espejo doméstico
Importante
Muy recomendable: utilice la implementación de Docker-Compose; consulte README_docker para obtener más detalles.
La estructura de 0.3.x ha cambiado mucho y se recomienda encarecidamente volver a implementarla de acuerdo con la documentación. La siguiente guía no garantiza el 100% de compatibilidad y éxito. ¡Recuerde hacer una copia de seguridad de los datos importantes con anticipación!
Primero siga los pasos de安装部署
para configurar el entorno operativo y modificar el archivo de configuración.
Copie el directorio Knowledge_base del proyecto 0.2.x al directorio DATA
configurado
2023年4月
: se lanzó Langchain-ChatGLM 0.1.0
, que admite preguntas y respuestas de la base de conocimiento local basadas en el modelo ChatGLM-6B.
2023年8月
: Langchain-ChatGLM
pasó a llamarse Langchain-Chatchat
, se lanzó la versión 0.2.0
, que utiliza fastchat
como solución de carga de modelos y admite más modelos y bases de datos.
2023年10月
: se lanzó Langchain-Chatchat 0.2.5
, lanzando contenido del Agente, y el proyecto de código abierto ganó el tercer premio en el hackathon organizado por Founder Park & Zhipu AI & Zilliz
.
2023年12月
: Langchain-Chatchat
recibió más de 20.000 estrellas.
2024年6月
: se lanza Langchain-Chatchat 0.3.0
, lo que trae una nueva estructura de proyecto.
? Esperemos con ansias la futura historia de Chatchat...
El código de este proyecto sigue el protocolo Apache-2.0.
? Proyecto Langchain-Chachat Grupo de comunicación WeChat Si también está interesado en este proyecto, puede unirse al chat grupal para participar en discusiones e intercambios.
?Cuenta pública oficial del proyecto Langchain-Chachat, bienvenido a escanear el código QR para seguir.
Si este proyecto es útil para su investigación, cítenos:
@software{langchain_chatchat, title = {{langchain-chatchat}}, author = {Liu, Qian and Song, Jinke, and Huang, Zhiguo, and Zhang, Yuxuan, and glide-the, and liunux4odoo}, year = 2024, journal = {GitHub repository}, publisher = {GitHub}, howpublished = {url{https://github.com/chatchat-space/Langchain-Chatchat}} }