Guias
Ferramentas
Integração Avançada de Ferramentas
12min
antes de iniciar este guia avançado, certifique se de ter uma compreensão básica do processo de integração de ferramentas no paragraph confira a integração rápida para uma visão geral rápida interface de ferramentas definimos uma série de métodos auxiliares na classe tool para ajudar os desenvolvedores a construir ferramentas mais complexas rapidamente retorno de mensagens o paragraph suporta vários tipos de mensagens, como texto, link, imagem e arquivo blob você pode retornar diferentes tipos de mensagens para o llm e os usuários por meio das seguintes interfaces observe que alguns parâmetros nas interfaces a seguir serão apresentados nas seções posteriores url da imagem você só precisa passar o url da imagem, e o paragraph fará o download da imagem automaticamente e a retornará ao usuário def create image message(self, image str, save as str = '') > toolinvokemessage """ criar uma mensagem de imagem \ param image o url da imagem \ return a mensagem de imagem """ link se precisar retornar um link, você pode usar a seguinte interface def create link message(self, link str, save as str = '') > toolinvokemessage """ criar uma mensagem de link \ param link o url do link \ return a mensagem de link """ texto se precisar retornar uma mensagem de texto, você pode usar a seguinte interface def create text message(self, text str, save as str = '') > toolinvokemessage """ criar uma mensagem de texto \ param text o texto da mensagem \ return a mensagem de texto """ arquivo blob se precisar retornar os dados brutos de um arquivo, como imagens, áudio, vídeo, ppt, word, excel, etc , você pode usar a seguinte interface blob os dados brutos do arquivo, do tipo bytes meta os metadados do arquivo; se você souber o tipo do arquivo, é melhor passar um mime type , caso contrário, o paragraph usará octet/stream como tipo padrão def create blob message(self, blob bytes, meta dict = none, save as str = '') > toolinvokemessage """ criar uma mensagem de blob \ param blob o blob \ return a mensagem de blob """ ferramentas atalhos em aplicações de grande modelo, temos duas necessidades comuns resumir um texto longo antes de passá lo ao llm, evitando que o texto original seja muito longo para o llm processar o conteúdo obtido pela ferramenta é um link, e as informações da página web precisam ser rastreadas antes de serem retornadas ao llm para ajudar os desenvolvedores a implementar rapidamente essas duas necessidades, fornecemos as seguintes ferramentas de atalho ferramenta de resumo de texto essa ferramenta recebe um user id e o texto a ser resumido, retornando o texto resumido o paragraph usará o modelo padrão do espaço de trabalho atual para resumir o texto longo def summary(self, user id str, content str) > str """ resumir o conteúdo \ param user id o id do usuário \ param content o conteúdo \ return o resumo """ ferramenta de rastreamento de página web essa ferramenta recebe o link da página web a ser rastreada e um user agent (que pode ser vazio), retornando uma string contendo as informações da página web def get url(self, url str, user agent str = none) > str """ obter url """ o resultado rastreado pool de variáveis introduzimos um pool de variáveis na ferramenta para armazenar variáveis, arquivos, etc , gerados durante a operação da ferramenta essas variáveis podem ser usadas por outras ferramentas durante a execução da ferramenta a seguir, usaremos dalle3 e vectorizer ai como exemplos para demonstrar como usar o pool de variáveis dalle3 primeiro, usamos o dalle3 após criar a imagem, salvamos a imagem no pool de variáveis o código é o seguinte from typing import any, dict, list, union from core tools entities tool entities import toolinvokemessage from core tools tool builtin tool import builtintool from base64 import b64decode from openai import openai class dalle3tool(builtintool) def invoke(self, user id str, tool paramters dict\[str, any], ) > union\[toolinvokemessage, list\[toolinvokemessage]] """ invocar ferramentas """ client = openai( api key=self runtime credentials\['openai api key'], ) \# prompt prompt = tool paramters get('prompt', '') if not prompt return self create text message('por favor, insira um prompt') \# chamar openapi dalle3 response = client images generate( prompt=prompt, model='dall e 3', size='1024x1024', n=1, style='vivid', quality='standard', response format='b64 json' ) result = \[] for image in response data \# salvar todas as imagens no pool de variáveis por meio do parâmetro save as o nome da variável é self variable key image value se novas imagens forem geradas posteriormente, elas substituirão as anteriores result append(self create blob message(blob=b64decode(image b64 json), meta={ 'mime type' 'image/png' }, save as=self variable key image value)) return result observe que usamos self variable key image value como o nome da variável da imagem para que as ferramentas dos desenvolvedores cooperem entre si, definimos esta chave você pode usá la livremente, ou escolher não usá la passar uma chave personalizada também é aceitável vectorizer ai em seguida, usamos o vectorizer ai para converter o ícone png gerado pelo dalle3 em uma imagem vetorial vamos examinar as funções que definimos aqui o código é o seguinte from core tools tool builtin tool import builtintool from core tools entities tool entities import toolinvokemessage, toolparamter from core tools errors import toolprovidercredentialvalidationerror from typing import any, dict, list, union from httpx import post from base64 import b64decode class vectorizertool(builtintool) def invoke(self, user id str, tool paramters dict\[str, any]) \\ > union\[toolinvokemessage, list\[toolinvokemessage]] """ invocação da ferramenta, o nome da variável de imagem precisa ser passado aqui para que possamos obter a imagem do pool de variáveis """ def get runtime parameters(self) > list\[toolparamter] """ sobrescreva a lista de parâmetros da ferramenta, podemos gerar dinamicamente a lista de parâmetros com base na situação atual no pool de variáveis, para que o llm possa gerar o formulário com base na lista de parâmetros """ def is tool avaliable(self) > bool """ se a ferramenta atual está disponível, se não houver imagem no pool de variáveis, então não precisamos exibir essa ferramenta, apenas retornar false aqui """ em seguida, vamos implementar essas três funções from core tools tool builtin tool import builtintool from core tools entities tool entities import toolinvokemessage, toolparamter from core tools errors import toolprovidercredentialvalidationerror from typing import any, dict, list, union from httpx import post from base64 import b64decode class vectorizertool(builtintool) def invoke(self, user id str, tool paramters dict\[str, any]) \\ > union\[toolinvokemessage, list\[toolinvokemessage]] """ invocar ferramentas """ api key name = self runtime credentials get('api key name', none) api key value = self runtime credentials get('api key value', none) if not api key name ou not api key value raise toolprovidercredentialvalidationerror('por favor, insira o nome e valor da chave da api') \# obter o image id, a definição de image id pode ser encontrada em get runtime parameters image id = tool paramters get('image id', '') if not image id return self create text message('por favor, insira o id da imagem') \# obter a imagem gerada pelo dalle do pool de variáveis image binary = self get variable file(self variable key image) if not image binary return self create text message('imagem não encontrada, por favor, solicite ao usuário que gere a imagem primeiro ') \# gerar a imagem vetorial response = post( 'https //vectorizer ai/api/v1/vectorize', files={ 'image' image binary }, data={ 'mode' 'test' }, auth=(api key name, api key value), timeout=30 ) if response status code != 200 raise exception(response text) return \[ self create text message('o svg vetorizado foi salvo como uma imagem '), self create blob message(blob=response content, meta={'mime type' 'image/svg+xml'}) ] def get runtime parameters(self) > list\[toolparamter] """ sobrescrever os parâmetros de tempo de execução """ \# aqui, sobrescrevemos a lista de parâmetros da ferramenta, definimos o image id e configuramos sua lista de opções para todas as imagens no pool de variáveis atual a configuração aqui é consistente com a configuração no yaml return \[ toolparamter get simple instance( name='image id', llm description=f'o id da imagem que você deseja vetorizar, \\ e o id da imagem deve ser especificado em \\ {\[i name for i in self list default image variables()]}', type=toolparamter toolparametertype select, required=true, options=\[i name for i in self list default image variables()] ) ] def is tool avaliable(self) > bool \# apenas quando houver imagens no pool de variáveis, o llm precisará usar essa ferramenta return len(self list default image variables()) > 0 vale notar que, na verdade, não usamos o image id aqui supomos que deve haver uma imagem no pool de variáveis padrão ao chamar essa ferramenta, então usamos diretamente image binary = self get variable file(self variable key image) para obter a imagem em casos em que as capacidades do modelo são fracas, recomendamos que os desenvolvedores façam o mesmo, o que pode melhorar efetivamente a tolerância a falhas e evitar que o modelo passe parâmetros incorretos