---
title: Adicionar Novo Provedor
slug: adicionar-novo-provedor
createdAt: 2024-09-02T17:38:47.686Z
---

### Métodos de Configuração de Provedores

**Os provedores suportam três modelos de configuração:**

1. **Modelo Predefinido**
   - Os usuários precisam apenas configurar as credenciais unificadas do provedor para usar os modelos predefinidos disponíveis no provedor.
2. **Modelo Personalizável**
   - Os usuários precisam adicionar a configuração de credenciais para cada modelo. Por exemplo, o Xinference suporta tanto LLM quanto Embedding de Texto, mas cada modelo tem um `model_uid` único. Se você deseja conectar ambos, precisa configurar um `model_uid` para cada modelo.
3. **Busca Remota**
   - Semelhante ao método de configuração de modelo predefinido, os usuários precisam apenas configurar as credenciais unificadas do provedor, e os modelos são buscados do provedor usando as informações das credenciais.
   - **Exemplo:** Com a OpenAI, podemos ajustar diversos modelos com base no GPT-turbo-3.5, todos sob a mesma `api_key`. Quando configurado como busca remota, os desenvolvedores precisam apenas configurar uma `api_key` unificada para permitir que o Paragraph Runtime busque todos os modelos ajustados do desenvolvedor e os conecte ao Paragraph.

**Esses três métodos de configuração podem coexistir, o que significa que um provedor pode suportar uma combinação de modelos predefinidos, personalizáveis ou busca remota. Isso permite o uso de modelos predefinidos e modelos buscados remotamente com credenciais unificadas do provedor, além de modelos personalizados adicionais, se adicionados.**

### Instruções de Configuração

**Terminologia**

- **Módulo:** Um módulo é um pacote Python, ou mais coloquialmente, uma pasta contendo um arquivo `__init__.py` e outros arquivos `.py`.

**Passos**

Adicionar um novo provedor envolve várias etapas. Aqui está um esboço para fornecer uma compreensão geral. Os passos detalhados serão apresentados a seguir.

1. Crie um arquivo YAML do provedor e escreva-o de acordo com o Esquema do Provedor.
2. Crie o código do provedor e implemente uma classe.
3. Crie módulos de tipo de modelo correspondentes sob o módulo do provedor, como `llm` ou `text_embedding`.
4. Crie arquivos de código com o mesmo nome sob o módulo de modelo correspondente, como `llm.py`, e implemente uma classe.
5. Se houver modelos predefinidos, crie arquivos YAML com o mesmo nome sob o módulo de modelo, como `claude-2.1.yaml`, e escreva-os de acordo com a Entidade de Modelo de IA.
6. Escreva o código de teste para garantir que a funcionalidade esteja disponível.

### Vamos Começar

**Para adicionar um novo provedor, primeiro determine o identificador em inglês do provedor, como, e crie um módulo com o mesmo nome em .**

Sob este módulo, precisamos preparar a configuração YAML do provedor primeiro.

**Preparando o YAML do Provedor**

Usando a Anthropic como exemplo, predefina as informações básicas do provedor, tipos de modelo suportados, métodos de configuração e regras de credenciais.

```yaml
provider: anthropic  # Identificador do provedor
label:  # Nome de exibição do provedor, pode ser definido em inglês en_US.
  en_US: Anthropic
icon_small:  # Ícone pequeno do provedor, armazenado no diretório _assets sob o diretório de implementação do provedor correspondente, mesma estratégia de linguagem que label
  en_US: icon_s_en.png
icon_large:  # Ícone grande do provedor, armazenado no diretório _assets sob o diretório de implementação do provedor correspondente, mesma estratégia de linguagem que label
  en_US: icon_l_en.png
supported_model_types:  # Tipos de modelo suportados, Anthropic suporta apenas LLM
- llm
configurate_methods:  # Métodos de configuração suportados, Anthropic suporta apenas modelos predefinidos
- predefined-model
provider_credential_schema:  # Regras de credenciais do provedor, como a Anthropic suporta apenas modelos predefinidos, é necessário definir regras de credenciais unificadas do provedor
  credential_form_schemas:  # Lista de itens do formulário de credenciais
  - variable: anthropic_api_key  # Nome da variável de parâmetro de credencial
    label:  # Nome de exibição
      en_US: API Key
    type: secret-input  # Tipo de formulário, secret-input aqui representa uma caixa de entrada de informações criptografadas, exibindo apenas informações mascaradas ao editar.
    required: true  # Se é obrigatório
    placeholder:  # Informações de PlaceHolder
      en_US: Enter your API Key
  - variable: anthropic_api_url
    label:
      en_US: API URL
    type: text-input  # Tipo de formulário, text-input aqui representa uma caixa de entrada de texto
    required: false
    placeholder:
      en_US: Enter your API URL
```

Se o provedor conectado oferecer modelos personalizáveis, como a OpenAI, que fornece modelos ajustados, precisamos adicionar `model_credential_schema`. Usando a OpenAI como exemplo:

```yaml
model_credential_schema:
  model: # Nome do modelo ajustado
    label:
      en_US: Model Name
    placeholder:
      en_US: Enter your model name
  credential_form_schemas:
  - variable: openai_api_key
    label:
      en_US: API Key
    type: secret-input
    required: true
    placeholder:
      en_US: Enter your API Key
  - variable: openai_organization
    label:
        en_US: Organization
    type: text-input
    required: false
    placeholder:
      en_US: Enter your Organization ID
  - variable: openai_api_base
    label:
      en_US: API Base
    type: text-input
    required: false
    placeholder:
      en_US: Enter your API Base
```

Você também pode consultar as informações de configuração YAML nos diretórios de outros provedores sob o diretório `model_providers`.

### Implementando o Código do Provedor

Precisamos criar um arquivo Python com o mesmo nome sob `model_providers`, como `anthropic.py`, e implementar uma classe que herda da classe base `__base.provider.Provider`, como `AnthropicProvider`.

### Provedores de Modelos Personalizados

Para provedores como Xinference, que oferecem modelos personalizados, este passo pode ser ignorado. Basta criar uma classe `XinferenceProvider` vazia e implementar um método `validate_provider_credentials` vazio. Este método não será realmente usado e serve apenas para evitar erros de instânciação de classes abstratas.

```python
class XinferenceProvider(Provider):
    def validate_provider_credentials(self, credentials: dict) -> None:
        pass
```

### Provedores de Modelos Predefinidos

Provedores precisam herdar da classe base `__base.model_provider.ModelProvider` e implementar o método `validate_provider_credentials` para validar as credenciais unificadas do provedor. Você pode se referir ao `AnthropicProvider`.

```python
def validate_provider_credentials(self, credentials: dict) -> None:
    """
    Valide as credenciais do provedor
    Você pode escolher qualquer método `validate_credentials` de tipo de modelo ou implementar o método `validate` por conta própria,
    como: get model list api

    se a validação falhar, levante uma exceção

    :param credentials: credenciais do provedor, formulário de credenciais definido em `provider_credential_schema`.
    """
```

Você também pode reservar a implementação `validate_provider_credentials` primeiro e reutilizá-la diretamente após implementar o método de validação de credenciais do modelo.

### Adicionando Modelos

**Adicionando Modelos Predefinidos**
Para modelos predefinidos, podemos conectá-los simplesmente definindo um arquivo YAML e implementando o código de chamada.

**Adicionando Modelos Personalizados**
Para modelos personalizados, só precisamos implementar o código de chamada para conectá-los, mas os parâmetros que eles manipulam podem ser mais complexos.

### Testes

Para garantir a disponibilidade do provedor/modelo conectado, cada método escrito precisa ter o código de teste de integração correspondente escrito no diretório de testes.

**Usando a Anthropic como exemplo.**

Antes de escrever o código de teste, você precisa adicionar as variáveis de ambiente de credenciais necessárias para testar o provedor em `.env.example`, como: `ANTHROPIC_API_KEY`.

Antes de executar, copie `.env.example` para `.env` e, em seguida, execute.

**Escrevendo o Código de Teste**

Crie um módulo com o mesmo nome do provedor sob o diretório `tests`: `anthropic`, e continue a criar `test_provider.py` e arquivos de teste de tipo de modelo correspondentes neste módulo, conforme mostrado abaixo:

```plaintext
.
├── __init__.py
├── anthropic
│   ├── __init__.py
│   ├── test_llm.py       # LLM Test
│   └── test_provider.py  # Provider Test
```

Escreva o código de teste para diversas situações do código implementado acima e, após passar nos testes, submeta o código.
