A versão 2.x é uma reescrita completa do módulo e não é compatível com versões anteriores da versão 1.x.
Novas integrações e recursos foram adicionados ao módulo para usar os serviços e recursos mais recentes do Azure OpenAI, como GPT-4-1106
, GPT-4-Vision
e DALL-E-3
. Uma nova UI do ChatBot/LibreChat foi adicionada ao módulo para fornecer uma solução completa.
NOTA: A versão legada 1.x pode ser encontrada no branch legado aqui
Documentação da versão 1.x
Sob os termos da OpenAI, ao usar a versão pública do ChatGPT , quaisquer perguntas que você fizer - chamadas de "prompts" - podem contribuir para o treinamento adicional do Large Language Model (LLM) da OpenAI. Diante disso, é crucial perguntar: você se sente confortável com esse precioso fluxo de dados saindo de sua organização? Se você é um tomador de decisões ou é responsável pelas medidas de segurança da sua organização, que medidas você está tomando para garantir que as informações proprietárias permaneçam confidenciais?
Uma solução eficaz reside na utilização de uma versão hospedada do popular LLM no Azure OpenAI . Embora existam inúmeras vantagens no Azure OpenAI, gostaria de destacar duas:
Privacidade de dados : ao hospedar os modelos da OpenAI no Azure, seus prompts nunca servirão como fonte para treinamento do LLM. É simplesmente uma versão independente em execução no Azure adaptada para seu uso.
Segurança aprimorada : o Azure OpenAI oferece medidas de segurança robustas, desde a capacidade de proteger pontos de extremidade específicos até controles de acesso complexos baseados em funções. Para um mergulho mais profundo, consulte este artigo do Microsoft Learn.
Embora o Azure OpenAI tenha um custo, é altamente acessível – muitas vezes, uma conversa custa menos de 10 centavos. Você pode revisar os detalhes de preços do Azure OpenAI aqui.
em breve...
Contribuições são bem-vindas. Envie uma solicitação pull se tiver alguma melhoria ou correção. Certifique-se de seguir o estilo de código existente e adicionar comentários ao seu código explicando o que ele faz.
Este módulo terraform está licenciado sob a licença MIT. Consulte o arquivo LICENSE para obter mais detalhes.
Se você encontrar algum problema ou tiver alguma dúvida sobre este módulo terraform, abra um problema no GitHub. Faremos o nosso melhor para responder o mais rápido possível.
Este módulo terraform foi desenvolvido por Marcel Lupo como parte de um projeto para explorar as capacidades dos modelos Azure OpenAI. Gostaríamos de agradecer à equipe da OpenAI e da Microsoft pelo trabalho incrível e pelo apoio contínuo à comunidade de IA.
Nome | Versão |
---|---|
terraformar | >= 1.9.5 |
azurm | ~> 4,0 |
aleatório | ~> 3,0 |
Nome | Versão |
---|---|
azurm | ~> 4,0 |
aleatório | ~> 3,0 |
Sem módulos.
Nome | Tipo |
---|---|
azurerm_app_service_certificate_binding.libre_app_cert_binding | recurso |
azurerm_app_service_custom_hostname_binding.hostname_binding | recurso |
azurerm_app_service_owned_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.domain_verification | 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_asigment | 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 |
random_password.libre_app_creds_iv | recurso |
random_password.libre_app_creds_key | recurso |
random_password.libre_app_jwt_refresh_secret | recurso |
random_password.libre_app_jwt_secret | recurso |
azurerm_client_config.atual | fonte de dados |
Nome | Descrição | Tipo | Padrão | Obrigatório |
---|---|---|---|---|
nome_serviço_aplicativo | Nome do Plano de Serviço de Aplicativo Linux. | string | "openaiasp9000" | não |
app_service_sku_name | O nome SKU do Plano de Serviço de Aplicativo. | string | "B1" | não |
cosmosdb_automatic_failover | Se deve ativar o failover automático para a conta do Cosmos DB | bool | false | não |
cosmosdb_capabilities | Os recursos da conta Cosmos DB | list(string) | [ | não |
cosmosdb_consistency_level | O nível de consistência da conta Cosmos DB | string | "BoundedStaleness" | não |
cosmosdb_geo_locations | As localizações geográficas da conta Cosmos DB | lista(objeto({ | [ | não |
cosmosdb_is_virtual_network_filter_enabled | Se a filtragem de rede virtual deve ser habilitada para a conta do Cosmos DB | bool | true | não |
cosmosdb_kind | O tipo de Cosmos DB para criar | string | "MongoDB" | não |
cosmosdb_max_interval_in_seconds | O intervalo máximo de inatividade em segundos para a conta do Cosmos DB | number | 10 | não |
cosmosdb_max_staleness_prefix | O prefixo de inatividade máximo para a conta do Cosmos DB | number | 200 | não |
cosmosdb_name | O nome da conta do Cosmos DB | string | "openaicosmosdb" | não |
cosmosdb_offer_type | O tipo de oferta a ser usado para a conta do Cosmos DB | string | "Standard" | não |
cosmosdb_public_network_access_enabled | Se deve permitir o acesso à rede pública para a conta Cosmos DB | bool | true | não |
cosmosdb_virtual_network_subnets | As sub-redes de rede virtual a serem associadas à conta do Cosmos DB (Service Endpoint). Se a rede for criada como parte do módulo, ela será preenchida automaticamente. | list(string) | null | não |
dns_resource_group_name | O Grupo de Recursos que contém a Zona DNS personalizada a ser usada para o Serviço de Aplicativo | string | "dns-rg" | não |
kv_fw_allowed_ips | valor das regras de IP permitidas pelo firewall do cofre de chaves. | list(string) | [] | não |
kv_fw_bypass | Lista de regras de firewall do cofre de chaves a serem ignoradas. | string | "AzureServices" | não |
kv_fw_default_action | Ação padrão para regras de firewall do cofre de chaves. | string | "Deny" | não |
kv_fw_network_subnet_ids | As sub-redes de rede virtual a serem associadas à conta do Cosmos DB (Service Endpoint). Se a rede for criada como parte do módulo, ela será preenchida automaticamente. | list(string) | null | não |
nome_kv | Nome do Key Vault a ser criado (segredos da solução). | string | "openaikv9000" | não |
kv_sku | SKU do Key Vault a ser criado. | string | "standard" | não |
libre_app_allow_email_login | Permitir login por e-mail | bool | true | não |
libre_app_allow_registration | Permitir registro | bool | true | não |
libre_app_allow_social_login | Permitir login social | bool | false | não |
libre_app_allow_social_registration | Permitir registro social | bool | false | não |
libre_app_allowed_ip_addresses | Endereços IP permitidos. A notação CIDR do IP ou intervalo de IP a ser correspondido para permitir. Por exemplo: 10.0.0.0/24 ou 192.168.10.1/32 | lista(objeto({ | [ | não |
libre_app_allowed_subnets | Sub-redes permitidas (por padrão, a sub-rede em que o serviço de aplicativo está implantado já tem acesso permitido com prioridade 100). Adicione quaisquer adicionais aqui | lista(objeto({ | [ | não |
libre_app_az_oai_api_key | Chave de API OpenAI do Azure | string | null | não |
libre_app_az_oai_api_version | Versão da API OpenAI do Azure | string | "2023-07-01-preview" | não |
libre_app_az_oai_dall3_api_version | Versão da API DALL-E do Azure OpenAI | string | "2023-12-01-preview" | não |
libre_app_az_oai_dall3_deployment_name | Nome de implantação do Azure OpenAI DALL-E | string | "dall-e-3" | não |
libre_app_az_oai_instance_name | Nome da instância do Azure OpenAI | string | null | não |
libre_app_az_oai_models | Modelos OpenAI do Azure. Por exemplo, 'gpt-4-1106-preview,gpt-4,gpt-3.5-turbo,gpt-3.5-turbo-1106,gpt-4-vision-preview' | string | "gpt-4-1106-preview" | não |
libre_app_az_oai_use_model_as_deployment_name | Modelo de uso do Azure OpenAI como nome de implantação | bool | true | não |
libre_app_custom_domain_create | Crie um domínio personalizado e um certificado gerenciado para o Serviço de Aplicativo. | bool | false | não |
libre_app_custom_footer | Adicione um rodapé personalizado para o aplicativo. | string | "Privately hosted chat app powered by Azure OpenAI and LibreChat." | não |
libre_app_debug_console | Habilite a saída detalhada do servidor no console, embora não seja recomendado devido ao alto detalhamento. | bool | false | não |
libre_app_debug_logging | O LibreChat possui registro central integrado em seu backend (api). Os arquivos de log são salvos em /api/logs. Os logs de erros são salvos por padrão. Os logs de depuração são ativados por padrão, mas podem ser desativados se não for desejado. | bool | false | não |
libre_app_debug_plugins | Habilite o modo de depuração para plug-ins do aplicativo Libre. | bool | false | não |
libre_app_docker_image | A imagem do Docker a ser usada para o serviço de aplicativo. | string | "ghcr.io/danny-avila/librechat-dev-api:latest" | não |
libre_app_domain_client | Para usar localmente, defina DOMAIN_CLIENT e DOMAIN_SERVER como http://localhost:3080 (3080 sendo a porta configurada anteriormente). Ao implantar em um domínio personalizado, defina DOMAIN_CLIENT e DOMAIN_SERVER como sua URL implantada, por exemplo, https://mydomain.example. com | string | "http://localhost:3080" | não |
libre_app_domain_server | Para usar localmente, defina DOMAIN_CLIENT e DOMAIN_SERVER como http://localhost:3080 (3080 sendo a porta configurada anteriormente). Ao implantar em um domínio personalizado, defina DOMAIN_CLIENT e DOMAIN_SERVER como sua URL implantada, por exemplo, https://mydomain.example. com | string | "http://localhost:3080" | não |
libre_app_enable_meilisearch | Habilitar Meilisearch | bool | false | não |
libre_app_endpoints | seleção de endpoints e modelos. Por exemplo, 'openAI,azureOpenAI,bingAI,chatGPTBrowser,google,gptPlugins,antrópico' | string | "azureOpenAI" | não |
libre_app_host | O servidor escutará localhost:3080 por padrão. Você pode alterar o IP de destino como desejar. Se você quiser disponibilizar este servidor externamente, por exemplo, para compartilhar o servidor com outras pessoas ou expô-lo a partir de um contêiner Docker, defina o host como 0.0.0.0 ou sua interface IP externa. | string | "0.0.0.0" | não |
libre_app_jwt_refresh_secret | Segredo de atualização do JWT | string | null | não |
libre_app_jwt_secret | Segredo JWT | string | null | não |
libre_app_mongo_uri | A cadeia de conexão do MongoDB à qual se conectar. | string | null | não |
libre_app_name | Nome do serviço de aplicativo LibreChat. | string | "librechatapp9000" | não |
libre_app_plugins_creds_iv | Creds IV de plug-ins de aplicativos gratuitos | string | null | não |
libre_app_plugins_creds_key | Chave de créditos dos plug-ins do aplicativo Libre | string | null | não |
libre_app_port | A porta do host para escutar. | number | 3080 | não |
libre_app_public_network_access_enabled | Se o acesso à rede pública está habilitado ou não. O padrão é false . | bool | true | não |
libre_app_title | Adicione um título personalizado para o aplicativo. | string | "PrivateGPT" | não |
libre_app_violations | Configuração para violações | objeto({ | { | não |
libre_app_virtual_network_subnet_id | O ID da sub-rede, utilizado para permitir o acesso ao Serviço de Aplicações (prioridade 100), por exemplo, cosmosdb, meilisearch, etc. Se a rede for criada como parte do módulo, esta será preenchida automaticamente se o valor for 'nulo'. | string | null | não |
librechat_app_custom_dns_zone_name | A Zona DNS a ser usada para o Serviço de Aplicativo. | string | "domain.com" | não |
librechat_app_custom_domain_name | O domínio personalizado a ser usado para o Serviço de Aplicativo. | string | "privategpt" | não |
localização | Região do Azure onde os recursos serão hospedados. | string | "uksouth" | não |
oai_account_name | O nome do serviço OpenAI. | string | "az-openai-account" | não |
oai_custom_subdomain_name | O nome do subdomínio usado para autenticação baseada em token. Alterar isso força a criação de um novo recurso. (normalmente igual ao nome da conta) | string | "demo-account" | não |
oai_cliente_gerenciado_chave | tipo = objeto({ key_vault_key_id = (Obrigatório) O ID da chave do Key Vault que deve ser usada para criptografar os dados nesta conta OpenAI. Identity_client_id = (Opcional) O ID do cliente da identidade atribuída ao usuário que tem acesso à chave. Esta propriedade só precisa ser especificada quando há múltiplas identidades anexadas à conta OpenAI. }) | objeto({ | null | não |
oai_dynamic_throttling_enabled | Se a limitação dinâmica está habilitada ou não. O padrão é true . | bool | true | não |
oai_fqdns | Uma lista de FQDNs a serem usados para autenticação baseada em token. Alterar isso força a criação de um novo recurso. | list(string) | [] | não |
oai_identidade | tipo = objeto({ type = (Obrigatório) O tipo da Identidade. Os valores possíveis são SystemAssigned , UserAssigned , SystemAssigned, UserAssigned .Identity_ids = (Opcional) Especifica uma lista de IDs de identidade gerenciada atribuídas ao usuário a serem atribuídas a esta conta OpenAI. }) | objeto({ | { | não |
oai_local_auth_enabled | Se os métodos de autenticação local estão habilitados para a conta cognitiva. O padrão é true . | bool | true | não |
oai_model_deployment | tipo = lista(objeto({ implantação_id = (obrigatório) O nome da Model Deployment de conta de serviços cognitivos. Alterar isso força a criação de um novo recurso.nome_modelo = { model_format = (Obrigatório) O formato do modelo de implantação de conta de serviços cognitivos. Alterar isso força a criação de um novo recurso. O valor possível é OpenAI. model_name = (Obrigatório) O nome do modelo de implantação de conta de serviços cognitivos. Alterar isso força a criação de um novo recurso. model_version = (Obrigatório) A versão do modelo de implantação de conta de serviços cognitivos. } sku = { sku_name = (Obrigatório) O nome do SKU. Os valores possíveis incluem Standard, GlobalBatch, GlobalStandard e ProvisionedManaged. sku_tier = (Opcional) Os valores possíveis são Gratuito, Básico, Padrão, Premium, Empresarial. Alterar isso força a criação de um novo recurso. sku_size = (opcional) O tamanho do SKU. Quando o campo de nome é a combinação de nível e algum outro valor, esse seria o código independente. Alterar isso força a criação de um novo recurso. sku_family = (Opcional) Se o serviço tiver diferentes gerações de hardware, para o mesmo SKU, isso poderá ser capturado aqui. Alterar isso força a criação de um novo recurso. sku_capacity = (opcional) tokens por minuto (TPM). Se o SKU suportar saída/entrada de SKU, o número inteiro da capacidade deverá ser incluído. Se a saída/entrada do sku não for possível para o recurso, isso poderá ser omitido. O valor padrão é 1. Alterar isso força a criação de um novo recurso. } rai_policy_name = (Opcional) O nome da política RAI. Alterar isso força a criação de um novo recurso. })) | lista(objeto({ | [] | não |
oai_network_acls | tipo = set(objeto({ default_action = (Obrigatório) A ação padrão a ser usada quando nenhuma regra corresponde a ip_rules/virtual_network_rules. Os valores possíveis são Allow e Deny .ip_rules = (Opcional) Um ou mais endereços IP ou blocos CIDR que devem ser capazes de acessar a conta cognitiva. virtual_network_rules = opcional(set(objeto({ subnet_id = (Obrigatório) O ID de uma sub-rede que deve ser capaz de acessar a conta OpenAI. ignore_missing_vnet_service_endpoint = (Opcional) Se ignora ou não o endpoint de serviço vnet ausente. O padrão é false .}))) })) | definir(objeto({ | null | não |
oai_outbound_network_access_restricted | Se o acesso à rede de saída é restrito ou não. O padrão é false . | bool | false | não |
oai_public_network_access_enabled | Se o acesso à rede pública está habilitado ou não. O padrão é false . | bool | true | não |
oai_sku_name | Nome SKU do serviço OpenAI. | string | "S0" | não |
oai_storage | tipo = lista(objeto({ storage_account_id = (Obrigatório) ID completo de um recurso Microsoft.Storage. Identity_client_id = (Opcional) O ID do cliente da identidade gerenciada associada ao recurso de armazenamento. })) | lista(objeto({ | [] | não |
nome_do_grupo_de_recursos | Nome do grupo de recursos para criar o serviço OpenAI/ou onde um serviço existente está hospedado. | string | n / D | sim |
subnet_config | Uma lista de objetos de configuração de sub-rede para criar sub-redes na rede virtual. | objeto({ | { | não |
etiquetas | Um mapa de pares de valores-chave usados para marcar recursos criados. | map(string) | {} | não |
use_cosmosdb_free_tier | Se deve ativar o nível gratuito para a conta Cosmos DB. Isso precisa ser falso se outra instância já usa o nível gratuito. | bool | true | não |
nome_da_rede_virtual | Nome da rede virtual onde os recursos estão anexados. | string | "openai-vnet-9000" | não |
vnet_address_space | valor do espaço de endereço para a rede virtual. | list(string) | [ | não |
Nome | Descrição |
---|---|
app_service_default_hostname | O nome de host padrão do Serviço de Aplicativo |
app_service_id | O ID do serviço de aplicativo |
nome_serviço_aplicativo | O nome do serviço de aplicativo |
app_service_outbound_ip_addresses | Os endereços IP de saída do Serviço de Aplicativo |
app_service_plan_id | O ID do plano de serviço de aplicativo |
app_service_plan_name | O nome do Plano de Serviço de Aplicativo |
cognitivo_deployment_ids | Os IDs das implantações do modelo de conta cognitiva OpenAI |
cognitivo_deployment_names | Os nomes das implantações do modelo de conta cognitiva OpenAI |
cosmosdb_account_endpoint | O ponto final usado para ligar à conta Cosmos DB |
cosmosdb_account_id | O ID da conta do Cosmos DB |
cosmosdb_account_name | O nome da conta do Cosmos DB |
cosmosdb_account_primary_key | A chave mestra primária da conta do Cosmos DB |
cosmosdb_account_secondary_key | A chave mestra secundária da conta do Cosmos DB |
key_vault_id | O ID do Cofre de Chaves |
nome_do_cofre_chave | O nome do Cofre de Chaves |
key_vault_uri | O URI do Key Vault |
openai_endpoint | O ponto final usado para ligar à Conta de Serviço Cognitivo. |
openai_primary_key | A chave de acesso primária da conta de serviço cognitivo. |
openai_secondary_key | A chave de acesso secundária para a conta de serviço cognitivo. |
openai_subdomínio | O subdomínio usado para conectar-se à conta do Serviço Cognitivo. |
subnet_id | O ID da sub-rede |
nome_da_sub-rede | O nome da sub-rede |
virtual_network_id | O ID da rede virtual |
nome_da_rede_virtual | O nome da rede virtual |