ChatGPT abrió el código fuente del primer complemento, aprendamos el código fuente ~

 

El 23 de marzo, OpenAI lanzó otro éxito de taquilla: ¡ lanzamiento de un sistema de complemento para ChatGPT!

¡Este movimiento significa que ChatGPT marcará el comienzo del momento de la "Tienda de aplicaciones", es decir, en torno a sus capacidades, se formará un ecosistema de desarrolladores para crear un "sistema operativo" basado en IA!

El sistema de complementos supondrá un salto cualitativo para ChatGPT, ya que con la ayuda de los servicios de complementos, puede obtener información de Internet en tiempo real y llamar a aplicaciones de terceros (reserva de vuelos de hoteles, pedido de comida, compras, consulta de cotizaciones bursátiles , etc.).

ChatGPT es un cerebro extremadamente inteligente, y los complementos se convertirán en sus ojos, oídos, manos, pies e incluso alas, con capacidades asombrosas, ¡y el futuro es inimaginable!

El oficial actualmente proporciona dos complementos:

  • Un navegador web. Usando la API del nuevo navegador Bing, busque contenido de Internet en tiempo real y dé respuestas y enlaces

  • Un intérprete de código. Con el intérprete de Python, puede resolver problemas matemáticos, realizar análisis y visualización de datos, editar imágenes, editar videos, etc., y también admitir la descarga de archivos procesados.

Además, OpenAI también ha abierto un complemento de recuperación de la base de conocimiento chatgpt-retrieval-plugin, que recupera información de varias fuentes de datos (como archivos, notas, correos electrónicos y documentos públicos) a través del lenguaje natural. Con el código fuente abierto disponible, los desarrolladores pueden implementar sus propias versiones del complemento.

Imagínese si proporcionara un "complemento de la base de conocimiento de Python" con todos los documentos oficiales como fuente de datos, luego cualquier pregunta sobre el uso de Python en el futuro, solo necesito preguntarle a ChatGPT, luego llama al complemento y analiza los datos, y finalmente los retornos me dan la respuesta exacta. ¡Esto ahorrará mucho tiempo!

No solo eso, también puede usar libros como fuentes de datos para crear "Base de conocimiento de Journey to the West", "Base de conocimiento de Dream of Red Mansions", "Base de conocimiento de enciclopedia", "Base de conocimiento de biblioteca personal", etc.; asistente experto con revistas académicas como fuente de datos, y será muy fácil escribir artículos y buscar materiales a partir de ahora; use las fuentes de datos de Sócrates, Jobs, Musk y otras celebridades para crear un consultor personal personalizado...

Como el primer complemento ChatGPT de código abierto, el proyecto chatgpt-retrieval-plugin ocupó el primer lugar en la lista de tendencias de Github tan pronto como se lanzó y obtuvo 11 000 estrellas  en  solo una semana después de su lanzamiento.

Este proyecto está escrito completamente en Python, ya sea con el propósito de aprender a programar o como referencia para desarrollar otros complementos en el futuro, vale la pena dedicar tiempo a estudiarlo detenidamente.

A continuación, compartiré información que obtuve al leer la documentación del proyecto y el código fuente.

En primer lugar, el proyecto contiene alrededor de 3 K de código Python, que no es a gran escala. La estructura del proyecto también es muy clara, el directorio es el siguiente:

Tabla de contenido describir
datastore Contiene la lógica central para almacenar y consultar incrustaciones de documentos utilizando varios proveedores de bases de datos vectoriales.
examples Incluye ejemplos de configuración, métodos de autenticación y ejemplos orientados al proveedor de programas
models Contiene modelos de datos utilizados por complementos, como modelos de documentos y metadatos.
scripts Contiene scripts útiles para procesar y cargar archivos de diferentes fuentes de datos
server Almacenar la implementación principal del servidor FastAPI
services Contiene servicios de utilidades para tareas como fragmentación, extracción de metadatos y detección de PII
tests Incluye pruebas de integración para varios proveedores de bases de datos vectoriales.
.well-known Almacene archivos de manifiesto de complementos y formatos OpenAPI, defina la configuración de complementos y las especificaciones de API, etc.

Excepto ejemplos, pruebas, archivos de configuración, etc., los tres directorios principales son los siguientes:

almacenamiento de datos

Los datos de texto de la fuente de datos se asignarán a un espacio vectorial de baja dimensión y luego se almacenarán en la base de datos vectorial. Se han proporcionado ejemplos oficiales de soluciones de almacenamiento de datos como Pinecone, Weaviate, Zilliz, Milvus, Qdrant y Redis. Además, hay varias solicitudes de extracción que desean agregar soporte para PostgreSQL, y existe una alta probabilidad de que se integre en el futuro.

Usado aquí 抽象工厂设计模式 , DataStore es una clase abstracta, y cada biblioteca de almacenamiento de datos es una clase de implementación concreta, que necesita implementar tres métodos abstractos:

(1) _upsert(chunks: Dict[str, List[DocumentChunk]]) -> List[str] El método recibe un parámetro de diccionario, que contiene una lista de objetos DocumentChunk, y los inserta en la base de datos. El valor devuelto es una lista de ID de documentos.

(2) _query(queries: List[QueryWithEmbedding]) -> List[QueryResult] El método recibe un parámetro de lista que contiene el texto de consulta que se va a incrustar. Devuelve una lista de resultados de consultas que contienen fragmentos de documentos y puntuaciones coincidentes.

(3) delete(ids: Optional[List[str]] = None, filter: Optional[DocumentMetadataFilter] = None, delete_all: Optional[bool] = None, ) -> bool  método, eliminar según id y otras condiciones de filtro, o eliminar todo. Devuelve si la operación fue exitosa.

Vale la pena señalar que los módulos en este directorio factory.py usan la sintaxis de coincidencia de mayúsculas y minúsculas recientemente introducida por Python 3.10, siguiendo la nueva tendencia de la comunidad de Python~

interfaz de servidor de servidor

Este directorio tiene solo un main.py archivo, que es la entrada de inicio para todo el proyecto. Utiliza el marco FastAPI convencional actual, proporciona varias API para agregar, eliminar, modificar y verificar, y usa el módulo uvicorn para iniciar el servicio.

  • /upsert-file Interfaz, utilizada para cargar un solo archivo, convertirlo en un objeto de documento y luego agregar o actualizar

  • /upsert Interfaz para cargar una serie de objetos de documento para agregar o actualizar

  • /query Interfaz, pase una serie de condiciones de texto, conviértalas en objetos QueryWithEmbedding y luego consulte desde la base de datos vectorial

  • /delete Interconectar, eliminar o eliminar todos los datos en la base de datos de acuerdo con las condiciones

Entre estas interfaces, las funciones de adición, modificación y eliminación son principalmente para desarrolladores/mantenedores, y ChatGPT solo necesita llamar a la interfaz de consulta del complemento. Por lo tanto, también se crea una subaplicación "/sub" en el código, que solo contiene /query la interfaz y se proporciona para las llamadas de ChatGPT.

Además, utiliza el método de montaje de FastAPI para montar un directorio de archivos estáticos "/.well-known", que expone información básica sobre el complemento, como nombre, descripción, autor, logotipo, correo electrónico, documentos de interfaz proporcionados a OpenAPI, etc esperar.

método de procesamiento de tareas de servicios

En este directorio se encuentran algunas funciones comunes, como las siguientes:

(1) El archivo chunks.py contiene funciones que dividen cadenas y objetos Document en pequeños fragmentos y obtienen vectores incrustados para cada fragmento.

(2) El archivo file.py proporciona funciones para extraer contenido de texto y metadatos de los archivos cargados. Los tipos de archivos admitidos actualmente para el análisis incluyen PDF, texto sin formato, Markdown, Word, CSV y PPTX.

(3) El archivo openai.py contiene dos funciones: La función get_embeddings usa el  text-embedding-ada-002 modelo OpenAI para incrustar el texto dado. La función get_chat_completion genera una conversación utilizando la API ChatCompletion de OpenAI.

En general, varias funciones de la interfaz de este complemento son muy claras y la lógica del código no es complicada. La operación de incrustación de texto central se realiza con la ayuda de la interfaz de incrustación de openai, y las operaciones de almacenamiento y consulta de la información del bloque de texto dependen de las funciones de varias bases de datos vectoriales.

Hay un blogger en YouTube que dibujó un diagrama esquemático a mano. Aunque la fuente está garabateada, puedes entenderlo:

Vale la pena ver su video, porque el maestro up no solo presenta brevemente el principio de funcionamiento del complemento, sino que también demuestra cómo implementar en Digital Ocean, cómo modificar la configuración y cómo depurar, y tiene el complemento. con el permiso de ChatGPT, para que pueda implementar el suyo propio. El complemento está conectado a ChatGPT, ¡y el uso del complemento de la base de conocimiento se demuestra en el acto!

Vídeo: https://www.youtube.com/watch?v=hpePPqKxNq8

En la actualidad, todavía hay relativamente poca información sobre la introducción, el desarrollo y la configuración del complemento ChatGPT, después de todo, se lanzó recientemente. Sin embargo, hay innumerables personas y organizaciones que solicitan la lista de espera Una vez que estén abiertos para su uso, varios complementos definitivamente expandirán la ecología de ChatGPT como las ricas bibliotecas de código abierto de la comunidad de Python.

Finalmente, la documentación oficial del complemento chatgpt-retrieval-plugin es la información de primera mano más detallada, y recomiendo a todos que la estudien. https://github.com/openai/chatgpt-retrieval-plugin

 

Supongo que te gusta

Origin blog.csdn.net/wshyb0314/article/details/129860292
Recomendado
Clasificación