Saída estruturada com Ollama
(ollama.com)Saída estruturada
6 de dezembro de 2024
O Ollama agora oferece suporte a saídas estruturadas, que permitem restringir a saída do modelo a um formato específico definido por um esquema JSON. As bibliotecas Ollama para Python e JavaScript também foram atualizadas para oferecer suporte a saídas estruturadas.
- Casos de uso de saídas estruturadas:
- Análise de dados em documentos
- Extração de dados de imagens
- Estruturação de respostas de qualquer modelo de linguagem
- Maior confiabilidade e consistência do que o modo JSON
Primeiros passos
- Baixe a versão mais recente do Ollama
- Atualize a biblioteca Ollama para Python ou JavaScript para a versão mais recente
cURL
- É possível passar saídas estruturadas ao modelo usando o parâmetro
format
Saída
- A resposta é retornada no formato definido pelo esquema JSON da solicitação
Python
- Use a biblioteca Ollama para Python para passar o esquema como um objeto JSON no parâmetro
format - Recomenda-se usar Pydantic para serializar o esquema
Saída
name='Canada' capital='Ottawa' languages=['English', 'French']
JavaScript
- Use a biblioteca Ollama para JavaScript para passar o esquema como um objeto JSON no parâmetro
format - Recomenda-se usar Zod para serializar o esquema
Saída
{ name: "Canada", capital: "Ottawa", languages: [ "English", "French" ] }
Exemplos
Extração de dados
- Defina um esquema que represente as informações para extrair dados estruturados de um texto
- O modelo extrai as informações e retorna os dados em JSON de acordo com o esquema definido
Exemplo de saída
pets=[ Pet(name='Luna', animal='cat', age=5, color='grey', favorite_toy='yarn'), Pet(name='Loki', animal='cat', age=2, color='black', favorite_toy='tennis balls') ]
Descrição de imagem
- Saídas estruturadas podem ser usadas com modelos de visão
- Use
llama3.2-visionpara descrever uma imagem e retornar uma saída estruturada
Exemplo de saída
summary='A palm tree on a sandy beach with blue water and sky.'objects=[ Object(name='tree', confidence=0.9, attributes='palm tree'), Object(name='beach', confidence=1.0, attributes='sand') ]scene='beach', colors=['blue', 'green', 'white'], time_of_day='Afternoon', setting='Outdoor', text_content=None
Compatibilidade com OpenAI
- Compatível com saídas estruturadas usando o cliente da OpenAI
Dicas
- Para usar saídas estruturadas com confiabilidade:
- Use Pydantic (Python) ou Zod (JavaScript) para definir o esquema de resposta
- Adicione "retorne em JSON" ao prompt para que o modelo entenda a solicitação
- Defina a temperatura como 0 para uma saída mais determinística
Próximos passos
- Exposição de logits para geração controlada
- Melhorias de desempenho e precisão das saídas estruturadas
- Aceleração por GPU para sampling
- Suporte a formatos adicionais além de esquema JSON
1 comentários
Opiniões no Hacker News
É possível definir restrições de saída mais fortes por meio do recurso gbnf do llama.cpp
É útil ao estruturar um prompt comum e convertê-lo em dados csv, pois permite remover texto desnecessário
Ao usar gemma2:2b e inserir texto, é possível obter uma saída estruturada no formato JSON
{"amount": 190, "balance": 5098, "category": "Shopping", "place": "Fresh Mart"}Há comentários perguntando como as restrições afetam a qualidade da saída do LLM
Há uma pergunta sobre se isso pode ser usado com os modelos compatíveis
Há curiosidade sobre se llama.cpp e ollama aproveitam o recurso de saída estruturada do llama ou se isso foi implementado de outra forma
Há uma pergunta sobre qual valor adicional isso oferece em comparação com
outlinesO motivo para continuar usando o oobabooga é que o suporte a exlv2 oferece inferência mais eficiente em dual 3090s
Seria melhor se o exemplo em curl aparecesse primeiro
Há uma pergunta sobre a melhor forma de fornecer entrada estruturada ao LLM