Guias
Modelo
Integração de Modelos Predefinidos
8min
após concluir a integração do fornecedor, o próximo passo é integrar os modelos sob o fornecedor primeiro, precisamos determinar o tipo de modelo a ser integrado e criar o módulo de tipo de modelo correspondente no diretório do respectivo fornecedor os tipos de modelo atualmente suportados são os seguintes llm modelo de geração de texto text embedding modelo de embedding de texto rerank modelo de reordenação speech2text conversão de fala para texto tts conversão de texto para fala moderation moderação tomando o anthropic como exemplo, o anthropic só suporta llm, então criamos um módulo chamado llm em model providers anthropic para modelos predefinidos, precisamos primeiro criar um arquivo yaml nomeado de acordo com o modelo no módulo llm, como claude 2 1 yaml preparando o yaml do modelo 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 recomenda se preparar todas as configurações do modelo antes de iniciar a implementação do código do modelo da mesma forma, você pode consultar as informações de configuração yaml nos diretórios de outros fornecedores em model providers as regras completas de yaml podem ser encontradas em schema implementando o código de invocação do modelo em seguida, crie um arquivo python com o mesmo nome llm py no módulo llm para escrever o código de implementação crie uma classe llm anthropic em llm py, que nomearemos como anthropiclargelanguagemodel (o nome pode ser arbitrário), herdando da classe base base large language model largelanguagemodel, e implemente os seguintes métodos invocação de llm implemente o método principal para invocação de llm, suportando respostas tanto em streaming quanto síncronas def invoke(self, model str, credentials dict, prompt messages list\[promptmessage], model parameters dict, tools optional\[list\[promptmessagetool]] = none, stop optional\[list\[str]] = none, stream bool = true, user optional\[str] = none) \\ > union\[llmresult, generator] """ invocar modelo de grande linguagem \ param model nome do modelo \ param credentials credenciais do modelo \ param prompt messages mensagens de prompt \ param model parameters parâmetros do modelo \ param tools ferramentas para chamadas de ferramentas \ param stop palavras de parada \ param stream resposta em streaming \ param user id único do usuário \ return resposta completa ou resultado gerador de fragmentos de resposta em streaming """ ao implementar, observe que você deve usar duas funções para retornar os dados, uma para lidar com respostas síncronas e outra para respostas em streaming como o python reconhece funções que contêm a palavra chave yield como funções geradoras, retornando um tipo de dado fixo generator, respostas síncronas e em streaming precisam ser implementadas separadamente, como mostrado abaixo (note que o exemplo abaixo usa parâmetros simplificados, a implementação real deve seguir a lista de parâmetros acima) def invoke(self, stream bool, kwargs) \\ > union\[llmresult, generator] if stream return self handle stream response( kwargs) return self handle sync response( kwargs) def handle stream response(self, kwargs) > generator for chunk in response yield chunk def handle sync response(self, kwargs) > llmresult return llmresult( response) pré cálculo de tokens de entrada se o modelo não fornecer uma interface de pré cálculo de tokens, retorne 0 diretamente def get num tokens(self, model str, credentials dict, prompt messages list\[promptmessage], tools optional\[list\[promptmessagetool]] = none) > int """ obter o número de tokens para as mensagens de prompt fornecidas \ param model nome do modelo \ param credentials credenciais do modelo \ param prompt messages mensagens de prompt \ param tools ferramentas para chamadas de ferramentas \ return """ validação de credenciais do modelo semelhante à validação de credenciais do fornecedor, isso valida as credenciais para um único modelo def validate credentials(self, model str, credentials dict) > none """ validar credenciais do modelo \ param model nome do modelo \ param credentials credenciais do modelo \ return """ tabela de mapeamento de erros de invocação quando ocorre um erro de invocação de modelo, ele precisa ser mapeado para o tipo invokeerror especificado pelo runtime, facilitando o paragraph a lidar com diferentes erros de forma distinta erros de runtime invokeconnectionerror erro de conexão de invocação invokeserverunavailableerror serviço de invocação indisponível invokeratelimiterror limite de taxa de invocação atingido invokeauthorizationerror falha na autorização de invocação invokebadrequesterror erro de parâmetro de invocação @property def invoke error mapping(self) > dict\[type\[invokeerror], list\[type\[exception]]] """ mapear erro de invocação de modelo para erro unificado a chave é o tipo de erro lançado para o chamador o valor é o tipo de erro lançado pelo modelo, que precisa ser convertido em um tipo de erro unificado para o chamador \ return mapeamento de erro de invocação """ para descrições de métodos de interface, consulte interfaces, e para implementação específica, consulte llm py