Adicionar Novo Provedor
Métodos de Configuração de Provedores
Os provedores suportam três modelos de configuração:
- Modelo Predefinido
- Os usuários precisam apenas configurar as credenciais unificadas do provedor para usar os modelos predefinidos disponíveis no provedor.
- 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.
- 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.
- Crie um arquivo YAML do provedor e escreva-o de acordo com o Esquema do Provedor.
- Crie o código do provedor e implemente uma classe.
- Crie módulos de tipo de modelo correspondentes sob o módulo do provedor, como llm ou text_embedding.
- Crie arquivos de código com o mesmo nome sob o módulo de modelo correspondente, como llm.py, e implemente uma classe.
- 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.
- 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.
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 URLSe o provedor conectado oferecer modelos personalizáveis, como a OpenAI, que fornece modelos ajustados, precisamos adicionar model_credential_schema. Usando a OpenAI como exemplo:
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 BaseVocê 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.
class XinferenceProvider(Provider):
def validate_provider_credentials(self, credentials: dict) -> None:
passProvedores 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.
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:
.
├── __init__.py
├── anthropic
│ ├── __init__.py
│ ├── test_llm.py # LLM Test
│ └── test_provider.py # Provider TestEscreva o código de teste para diversas situações do código implementado acima e, após passar nos testes, submeta o código.