La versión 2.x es una reescritura completa del módulo y no es compatible con la versión 1.x.
Se han agregado nuevas integraciones y funciones al módulo para utilizar los servicios y funciones más recientes de Azure OpenAI, como GPT-4-1106
, GPT-4-Vision
y DALL-E-3
. Se ha agregado una nueva interfaz de usuario de ChatBot/LibreChat al módulo para proporcionar una solución completa.
NOTA: La versión heredada 1.x se puede encontrar en la rama heredada aquí
Documentación de la versión 1.x
Según los términos de OpenAI, al utilizar la versión pública de ChatGPT , cualquier pregunta que plantee, denominada "indicaciones" , puede contribuir a la capacitación adicional del modelo de lenguaje grande (LLM) de OpenAI. Ante esto, es crucial preguntarse: ¿Se siente cómodo con este valioso flujo de datos que sale de su organización? Si usted toma decisiones o es responsable de las medidas de seguridad de su organización, ¿qué medidas está tomando para garantizar que la información patentada permanezca confidencial?
Una solución eficaz consiste en utilizar una versión alojada del popular LLM en Azure OpenAI . Si bien Azure OpenAI tiene numerosas ventajas, me gustaría destacar dos:
Privacidad de datos : al alojar los modelos de OpenAI en Azure, sus indicaciones nunca servirán como fuente para capacitar al LLM. Es simplemente una versión independiente que se ejecuta en Azure y está diseñada para su uso.
Seguridad mejorada : Azure OpenAI ofrece medidas de seguridad sólidas, desde la capacidad de proteger puntos finales específicos hasta complejos controles de acceso basados en roles. Para obtener más información, consulte este artículo de Microsoft Learn.
Si bien Azure OpenAI tiene un costo, es muy asequible; a menudo, una conversación cuesta menos de 10 centavos. Puede revisar los detalles de precios de Azure OpenAI aquí.
muy pronto...
Las contribuciones son bienvenidas. Envíe una solicitud de extracción si tiene alguna mejora o solución. Asegúrese de seguir el estilo de código existente y agregue comentarios a su código explicando lo que hace.
Este módulo Terraform tiene la licencia MIT. Consulte el archivo de LICENCIA para obtener más detalles.
Si encuentra algún problema o tiene alguna pregunta sobre este módulo de Terraform, abra un problema en GitHub. Haremos todo lo posible para responder lo más rápido posible.
Este módulo terraform fue desarrollado por Marcel Lupo como parte de un proyecto para explorar las capacidades de los modelos Azure OpenAI. Nos gustaría agradecer al equipo de OpenAI y Microsoft por su increíble trabajo y apoyo continuo a la comunidad de IA.
Nombre | Versión |
---|---|
terraformar | >= 1.9.5 |
azurer | ~> 4.0 |
aleatorio | ~> 3.0 |
Nombre | Versión |
---|---|
azurer | ~> 4.0 |
aleatorio | ~> 3.0 |
Sin módulos.
Nombre | Tipo |
---|---|
azurerm_app_service_certificate_binding.libre_app_cert_binding | recurso |
azurerm_app_service_custom_hostname_binding.hostname_binding | recurso |
azurerm_app_service_managed_certificate.libre_app_cert | recurso |
azurerm_cognitive_account.az_openai | recurso |
azurerm_cognitive_deployment.az_openai_models | recurso |
azurerm_cosmosdb_account.az_openai_mongodb | recurso |
azurerm_dns_cname_record.cname_record | recurso |
azurerm_dns_txt_record.dominio_verificación | recurso |
azurerm_key_vault.az_openai_kv | recurso |
azurerm_key_vault_secret.libre_app_creds_iv | recurso |
azurerm_key_vault_secret.libre_app_creds_key | recurso |
azurerm_key_vault_secret.libre_app_jwt_refresh_secret | recurso |
azurerm_key_vault_secret.libre_app_jwt_secret | recurso |
azurerm_key_vault_secret.openai_cosmos_uri | recurso |
azurerm_key_vault_secret.openai_endpoint | recurso |
azurerm_key_vault_secret.openai_primary_key | recurso |
azurerm_linux_web_app.librechat | recurso |
azurerm_resource_group.az_openai_rg | recurso |
azurerm_role_assignment.kv_role_assigment | recurso |
azurerm_role_assignment.librechat_app_kv_access | recurso |
azurerm_service_plan.az_openai_asp | recurso |
azurerm_subnet.az_openai_subnet | recurso |
azurerm_virtual_network.az_openai_vnet | recurso |
contraseña_aleatoria.libre_app_creds_iv | recurso |
contraseña_aleatoria.libre_app_creds_key | recurso |
contraseña_aleatoria.libre_app_jwt_refresh_secret | recurso |
contraseña_aleatoria.libre_app_jwt_secret | recurso |
azurerm_client_config.actual | fuente de datos |
Nombre | Descripción | Tipo | Por defecto | Requerido |
---|---|---|---|---|
nombre_servicio_aplicación | Nombre del plan de servicio de aplicaciones de Linux. | string | "openaiasp9000" | No |
nombre_sku_servicio_aplicación | El nombre de SKU del plan de App Service. | string | "B1" | No |
cosmosdb_automatic_failover | Si se debe habilitar la conmutación por error automática para la cuenta de Cosmos DB | bool | false | No |
cosmosdb_capabilities | Las capacidades de la cuenta de Cosmos DB | list(string) | [ | No |
cosmosdb_consistency_level | El nivel de coherencia de la cuenta de Cosmos DB | string | "BoundedStaleness" | No |
cosmosdb_geo_ubicaciones | Las ubicaciones geográficas para la cuenta de Cosmos DB | lista(objeto({ | [ | No |
cosmosdb_is_virtual_network_filter_enabled | Si se debe habilitar el filtrado de red virtual para la cuenta de Cosmos DB | bool | true | No |
cosmosdb_kind | El tipo de Cosmos DB a crear | string | "MongoDB" | No |
cosmosdb_max_interval_in_segundos | El intervalo máximo de obsolescencia en segundos para la cuenta de Cosmos DB | number | 10 | No |
cosmosdb_max_staleness_prefix | El prefijo máximo de obsolescencia para la cuenta de Cosmos DB | number | 200 | No |
nombre_cosmosdb | El nombre de la cuenta de Cosmos DB. | string | "openaicosmosdb" | No |
tipo_oferta_cosmosdb | El tipo de oferta que se utilizará para la cuenta de Cosmos DB | string | "Standard" | No |
cosmosdb_public_network_access_enabled | Si se debe habilitar el acceso a la red pública para la cuenta de Cosmos DB | bool | true | No |
cosmosdb_virtual_network_subnets | Las subredes de la red virtual que se asociarán con la cuenta de Cosmos DB (punto final de servicio). Si se crea una red como parte del módulo, esto se completará automáticamente. | list(string) | null | No |
nombre_grupo_recurso_dns | El grupo de recursos que contiene la zona DNS personalizada que se usará para App Service | string | "dns-rg" | No |
kv_fw_allowed_ips | Valor de las reglas de IP permitidas del firewall de Key Vault. | list(string) | [] | No |
kv_fw_bypass | Lista de reglas de firewall de Key Vault que se deben omitir. | string | "AzureServices" | No |
kv_fw_default_action | Acción predeterminada para las reglas de firewall del almacén de claves. | string | "Deny" | No |
kv_fw_network_subnet_ids | Las subredes de la red virtual que se asociarán con la cuenta de Cosmos DB (punto final de servicio). Si se crea una red como parte del módulo, esto se completará automáticamente. | list(string) | null | No |
kv_nombre | Nombre del Key Vault que se va a crear (secretos de solución). | string | "openaikv9000" | No |
kv_sku | SKU del Key Vault que se va a crear. | string | "standard" | No |
libre_app_allow_email_login | Permitir inicio de sesión por correo electrónico | bool | true | No |
libre_app_allow_registration | Permitir registro | bool | true | No |
libre_app_allow_social_login | Permitir inicio de sesión social | bool | false | No |
libre_app_allow_social_registration | Permitir registro social | bool | false | No |
direcciones_ip_permitidas_aplicación_libre | Direcciones IP permitidas. La notación CIDR de la IP o el rango de IP que debe coincidir para permitir. Por ejemplo: 10.0.0.0/24 o 192.168.10.1/32 | lista(objeto({ | [ | No |
libre_app_allowed_subnets | Subredes permitidas (de forma predeterminada, la subred en la que se implementa el servicio de la aplicación ya tiene acceso permitido como prioridad 100). Agregue cualquier adicional aquí | lista(objeto({ | [ | No |
libre_app_az_oai_api_key | Clave API de OpenAI de Azure | string | null | No |
libre_app_az_oai_api_version | Versión de la API OpenAI de Azure | string | "2023-07-01-preview" | No |
libre_app_az_oai_dall3_api_version | Versión de la API Azure OpenAI DALL-E | string | "2023-12-01-preview" | No |
libre_app_az_oai_dall3_deployment_name | Nombre de implementación de Azure OpenAI DALL-E | string | "dall-e-3" | No |
libre_app_az_oai_nombre_instancia | Nombre de instancia de Azure OpenAI | string | null | No |
libre_app_az_oai_models | Modelos de Azure OpenAI. Por ejemplo, 'gpt-4-1106-preview,gpt-4,gpt-3.5-turbo,gpt-3.5-turbo-1106,gpt-4-vision-preview' | string | "gpt-4-1106-preview" | No |
libre_app_az_oai_use_model_as_deployment_name | Modelo de uso de Azure OpenAI como nombre de implementación | bool | true | No |
libre_app_custom_domain_create | Cree un dominio personalizado y un certificado administrado para App Service. | bool | false | No |
libre_app_custom_footer | Agregue un pie de página personalizado para la aplicación. | string | "Privately hosted chat app powered by Azure OpenAI and LibreChat." | No |
libre_app_debug_console | Habilite la salida detallada del servidor en la consola, aunque no se recomienda debido a su gran nivel de detalle. | bool | false | No |
libre_app_debug_logging | LibreChat tiene un registro central integrado en su backend (api). Los archivos de registro se guardan en /api/logs. Los registros de errores se guardan de forma predeterminada. Los registros de depuración están habilitados de forma predeterminada, pero se pueden desactivar si no se desea. | bool | false | No |
libre_app_debug_plugins | Habilite el modo de depuración para los complementos de la aplicación Libre. | bool | false | No |
libre_app_docker_image | La imagen de Docker que se utilizará para App Service. | string | "ghcr.io/danny-avila/librechat-dev-api:latest" | No |
libre_app_domain_client | Para usarlo localmente, configure DOMAIN_CLIENT y DOMAIN_SERVER en http://localhost:3080 (siendo 3080 el puerto configurado previamente). Al implementar en un dominio personalizado, configure DOMAIN_CLIENT y DOMAIN_SERVER en su URL implementada, por ejemplo, https://mydomain.example. com | string | "http://localhost:3080" | No |
servidor_dominio_aplicación_libre | Para usarlo localmente, configure DOMAIN_CLIENT y DOMAIN_SERVER en http://localhost:3080 (siendo 3080 el puerto configurado previamente). Al implementar en un dominio personalizado, configure DOMAIN_CLIENT y DOMAIN_SERVER en su URL implementada, por ejemplo, https://mydomain.example. com | string | "http://localhost:3080" | No |
libre_app_enable_meilisearch | Habilitar Meilisearch | bool | false | No |
libre_app_endpoints | Selección de puntos finales y modelos. Por ejemplo, 'openAI,azureOpenAI,bingAI,chatGPTBrowser,google,gptPlugins,anthropic' | string | "azureOpenAI" | No |
libre_app_host | El servidor escuchará localhost:3080 de forma predeterminada. Puede cambiar la IP de destino como desee. Si desea que este servidor esté disponible externamente, por ejemplo, para compartir el servidor con otros o exponerlo desde un contenedor Docker, configure el host en 0.0.0.0 o su interfaz IP externa. | string | "0.0.0.0" | No |
libre_app_jwt_refresh_secret | Secreto de actualización de JWT | string | null | No |
libre_app_jwt_secret | Secreto JWT | string | null | No |
libre_app_mongo_uri | La cadena de conexión de MongoDB a la que conectarse. | string | null | No |
nombre_aplicación_libre | Nombre del servicio de la aplicación LibreChat. | string | "librechatapp9000" | No |
libre_app_plugins_creds_iv | Complementos de aplicaciones libres Creds IV | string | null | No |
libre_app_plugins_creds_key | Clave de créditos de complementos de aplicaciones libres | string | null | No |
puerto_aplicación_libre | El puerto host para escuchar. | number | 3080 | No |
libre_app_public_network_access_enabled | Si el acceso a la red pública está habilitado o no. El valor predeterminado es false . | bool | true | No |
título_aplicación_libre | Agregue un título personalizado para la aplicación. | string | "PrivateGPT" | No |
violaciones_de_aplicaciones_libres | Configuración para violaciones | objeto({ | { | No |
libre_app_virtual_network_subnet_id | El ID de la subred, utilizado para permitir el acceso al App Service (prioridad 100), por ejemplo, cosmosdb, meilisearch, etc. Si se crea una red como parte del módulo, esto se completará automáticamente si el valor es "nulo". | string | null | No |
librechat_app_custom_dns_zone_name | La zona DNS que se utilizará para App Service. | string | "domain.com" | No |
librechat_app_nombre_dominio_personalizado | El dominio personalizado que se utilizará para App Service. | string | "privategpt" | No |
ubicación | Región de Azure donde se alojarán los recursos. | string | "uksouth" | No |
oai_nombre_cuenta | El nombre del servicio OpenAI. | string | "az-openai-account" | No |
oai_nombre_subdominio_personalizado | El nombre del subdominio utilizado para la autenticación basada en token. Cambiar esto obliga a crear un nuevo recurso. (normalmente el mismo que el nombre de la cuenta) | string | "demo-account" | No |
oai_cliente_administrado_clave | tipo = objeto({ key_vault_key_id = (Obligatorio) El ID de la clave de Key Vault que se debe utilizar para cifrar los datos en esta cuenta OpenAI. Identity_client_id = (Opcional) El ID de cliente de la identidad asignada por el usuario que tiene acceso a la clave. Esta propiedad solo debe especificarse cuando hay varias identidades adjuntas a la cuenta OpenAI. }) | objeto({ | null | No |
oai_dynamic_throttling_enabled | Si la limitación dinámica está habilitada o no. El valor predeterminado es true . | bool | true | No |
oai_fqdns | Una lista de FQDN que se utilizarán para la autenticación basada en tokens. Cambiar esto obliga a crear un nuevo recurso. | list(string) | [] | No |
oai_identidad | tipo = objeto({ tipo = (Obligatorio) El tipo de identidad. Los valores posibles son SystemAssigned , UserAssigned , SystemAssigned, UserAssigned .Identity_ids = (Opcional) Especifica una lista de ID de identidad administrada asignadas por el usuario que se asignarán a esta cuenta OpenAI. }) | objeto({ | { | No |
oai_local_auth_enabled | Si los métodos de autenticación local están habilitados para la cuenta cognitiva. El valor predeterminado es true . | bool | true | No |
oai_model_deployment | tipo = lista (objeto ({ implementación_id = (Obligatorio) El nombre de la Model Deployment de cuenta de Cognitive Services. Cambiar esto obliga a crear un nuevo recurso.nombre_modelo = { model_format = (Obligatorio) El formato del modelo de implementación de cuentas de Cognitive Services. Cambiar esto obliga a crear un nuevo recurso. El valor posible es OpenAI. model_name = (Obligatorio) El nombre del modelo de implementación de cuentas de Cognitive Services. Cambiar esto obliga a crear un nuevo recurso. model_version = (Obligatorio) La versión del modelo de implementación de cuentas de Cognitive Services. } código = { sku_name = (Obligatorio) El nombre del SKU. Los valores posibles incluyen Standard, GlobalBatch, GlobalStandard y ProvisionedManaged. sku_tier = (Opcional) Los valores posibles son Gratis, Básico, Estándar, Premium, Empresarial. Cambiar esto obliga a crear un nuevo recurso. sku_size = (Opcional) El tamaño del SKU. Cuando el campo de nombre es la combinación de nivel y algún otro valor, este sería el código independiente. Cambiar esto obliga a crear un nuevo recurso. sku_family = (Opcional) Si el servicio tiene diferentes generaciones de hardware, para el mismo SKU, eso se puede capturar aquí. Cambiar esto obliga a crear un nuevo recurso. sku_capacity = (Opcional) Tokens por minuto (TPM). Si el SKU admite salida/entrada de SKU, se debe incluir el número entero de capacidad. Si no es posible realizar sku out/in para el recurso, esto se puede omitir. El valor predeterminado es 1. Cambiar esto obliga a crear un nuevo recurso. } rai_policy_name = (Opcional) El nombre de la política RAI. Cambiar esto obliga a crear un nuevo recurso. })) | lista(objeto({ | [] | No |
oai_network_acls | tipo = set(objeto({ default_action = (Obligatorio) La acción predeterminada que se utilizará cuando no coincidan reglas de ip_rules/virtual_network_rules. Los valores posibles son Allow y Deny .ip_rules = (Opcional) Una o más direcciones IP o bloques CIDR que deberían poder acceder a la cuenta cognitiva. reglas_de_red_virtual = opcional(conjunto(objeto({ subnet_id = (Obligatorio) El ID de una subred que debería poder acceder a la cuenta OpenAI. ignore_missing_vnet_service_endpoint = (Opcional) Si se ignora o no el punto final del servicio vnet que falta. El valor predeterminado es false .}))) })) | establecer (objeto ({ | null | No |
oai_outbound_network_access_restricted | Si el acceso a la red saliente está restringido o no. El valor predeterminado es false . | bool | false | No |
oai_public_network_access_enabled | Si el acceso a la red pública está habilitado o no. El valor predeterminado es false . | bool | true | No |
oai_sku_nombre | Nombre SKU del servicio OpenAI. | string | "S0" | No |
oai_almacenamiento | tipo = lista (objeto ({ Storage_account_id = (Obligatorio) ID de recurso completo de un recurso Microsoft.Storage. Identity_client_id = (Opcional) El ID de cliente de la identidad administrada asociada con el recurso de almacenamiento. })) | lista(objeto({ | [] | No |
nombre_grupo_recursos | Nombre del grupo de recursos para crear el servicio OpenAI o donde se aloja un servicio existente. | string | n / A | Sí |
subred_config | Una lista de objetos de configuración de subred para crear subredes en la red virtual. | objeto({ | { | No |
etiquetas | Un mapa de pares clave-valor que se utiliza para etiquetar los recursos creados. | map(string) | {} | No |
use_cosmosdb_free_tier | Si se habilita el nivel gratuito para la cuenta de Cosmos DB. Esto debe ser falso si otra instancia ya usa el nivel gratuito. | bool | true | No |
nombre_red_virtual | Nombre de la red virtual donde se adjuntan los recursos. | string | "openai-vnet-9000" | No |
vnet_address_space | valor del espacio de direcciones para la red virtual. | list(string) | [ | No |
Nombre | Descripción |
---|---|
app_service_default_hostname | El nombre de host predeterminado de App Service |
app_service_id | El ID del servicio de aplicaciones |
nombre_servicio_aplicación | El nombre del servicio de aplicaciones. |
direcciones_ip_salidas_servicio_aplicación | Las direcciones IP salientes del App Service |
app_service_plan_id | El ID del plan de servicio de aplicaciones |
nombre_plan_servicio_aplicación | El nombre del plan de servicio de aplicaciones |
identificadores_de_despliegue_cognoscitivos | Los ID de las implementaciones del modelo de cuenta cognitiva OpenAI |
nombres_de_implementación_cognitiva | Los nombres de las implementaciones del modelo de cuenta cognitiva OpenAI |
cosmosdb_account_endpoint | El punto final utilizado para conectarse a la cuenta de Cosmos DB |
cosmosdb_account_id | El ID de la cuenta de Cosmos DB |
cosmosdb_nombre_cuenta | El nombre de la cuenta de Cosmos DB. |
cosmosdb_account_primary_key | La clave maestra principal para la cuenta de Cosmos DB |
clave_secundaria_cuenta_cosmosdb | La clave maestra secundaria para la cuenta de Cosmos DB |
key_vault_id | El ID del almacén de claves |
nombre_bóveda_clave | El nombre de la bóveda de claves |
clave_vault_uri | El URI del almacén de claves |
openai_endpoint | El punto final utilizado para conectarse a la cuenta de Cognitive Service. |
openai_primary_key | La clave de acceso principal para la cuenta de Cognitive Service. |
openai_secundaria_clave | La clave de acceso secundaria para la cuenta de Cognitive Service. |
subdominio_openai | El subdominio utilizado para conectarse a la cuenta de Cognitive Service. |
id_subred | El ID de la subred |
nombre_subred | El nombre de la subred |
id_red_virtual | El ID de la red virtual. |
nombre_red_virtual | El nombre de la red virtual. |