Pular para o conteúdo principal

Motor Strands

O Libre WebUI integra um motor de agentes construído sobre o harness do Strands Agents, de código aberto (@strands-agents/harness 0.1.1 sobre @strands-agents/sdk 1.19.0). Ele roda dentro do processo do backend do Libre WebUI, então não há nenhum daemon separado para instalar. O SDK é carregado na primeira vez que o motor é usado; um servidor com o Strands desligado nunca o carrega.

O motor usa os modelos que o Libre WebUI já oferece:

  • modelos do Ollama, quando o Ollama está ativado
  • modelos de plugins de provedor de chat ou de completion ativos

Toda chamada de modelo passa pelos mesmos serviços do Ollama e de plugins que o Chat usa. Não há configuração de provedor separada nem chave de API separada. As credenciais dos provedores e a chave do Ollama continuam valendo sem alterações.

Você pode usar o motor em três lugares:

  • na página Strands, para sessões de agente persistentes
  • no Chat, pelas entradas Strands do seletor de modelos
  • no Work, como a opção Strands do controle Motor do compositor

Acesso​

Um administrador escolhe quem pode usar o motor em Configurações → Gerenciamento de Usuários → Acesso e políticas → Motor Strands:

ModoRótulo na configuraçãoQuem pode usar o Strands
disabledDesligadoNinguém, nem mesmo administradores (padrão)
adminsAdministradoresAdministradores ativos
all-usersTodos os usuáriosTodas as contas ativas

A alteração vale a partir da próxima solicitação, sem reiniciar.

Para fixar o modo no nível da implantação, defina LIBRE_STRANDS_ACCESS:

LIBRE_STRANDS_ACCESS=admins # or disabled, all-users

Um modo fixado bloqueia o controle em Gerenciamento de Usuários. Qualquer valor diferente de disabled, admins ou all-users deixa o motor travado como desligado, em vez de voltar à configuração salva.

O servidor aplica o modo em toda solicitação REST, no chat por WebSocket e em toda chamada de modelo de uma execução do Work. Se o modo não puder ser lido, o acesso é negado. Contas sem acesso não veem a página Strands, as entradas Strands do chat nem o motor Strands do Work, e a API responde 403.

Página Strands​

Abra Strands pela barra lateral (/strands).

  • As sessões persistem entre reinicializações, até 200 por conta. A primeira mensagem dá nome a uma nova sessão.
  • Escolha um modelo para cada sessão. Modelo padrão usa o seu modelo de chat padrão.
  • As respostas aparecem em streaming à medida que são geradas, com o raciocínio do modelo e um cartão para cada chamada de ferramenta.
  • Parar cancela o turno em execução. Uma sessão executa um turno por vez.
  • Excluir uma sessão remove o histórico e o workspace dela.

Chat​

Escolha Strands no seletor de modelos. Ele aparece no grupo Agentes, ao lado dos modelos de agentes CLI:

  • Strands (strands) usa o padrão do motor, que é o seu modelo de chat padrão.
  • Strands · modelo (provedor) (strands:<route>) fixa um modelo e o provedor dele para a conversa.

O Strands no Chat depende apenas do acesso ao Strands. Ele não precisa da chave de modelos de agentes CLI e aparece mesmo com essa chave desligada. No Chat, o agente tem as mesmas ferramentas de arquivo da página Strands, em um workspace privado por conta, e as respostas chegam como texto e raciocínio. Consulte Agentes de programação instalados para saber mais sobre o grupo Agentes e sobre como usar uma entrada Strands como modelo de tarefa para títulos e resumos de raciocínio.

Work​

No compositor do Work, escolha Libre WebUI ou Strands no controle Motor e selecione o modelo separadamente. Com Strands, um agente Strands planeja cada etapa, e o Work executa as ferramentas que ele pede no sandbox do Work, sob a política de aprovação normal do Work. O Work continua sendo a fonte oficial da transcrição, das aprovações, da execução de ferramentas e do histórico de execuções; no Work, o agente Strands não executa nenhuma ferramenta própria.

O modelo do provedor por trás precisa oferecer suporte a chamadas de ferramentas. O Work verifica isso antes de iniciar uma execução e rejeita um modelo que não anuncia suporte a ferramentas.

Execuções do Work salvas por versões anteriores com o prefixo de modelo dsh: abrem como execuções Strands. Consulte Work: motor Strands para ver como a escolha do motor interage com modelos trazidos do Chat.

Modelo de segurança​

Na página Strands e no Chat, o agente tem um conjunto de ferramentas propositalmente pequeno:

  • read, write e edit, para arquivos do seu workspace
  • o plugin todos do harness, para planejar trabalhos com várias etapas

Ele não tem shell, busca na web, memória nem skills, e nenhum arquivo AGENTS.md é injetado nas instruções dele.

Cada sessão tem um diretório de workspace privado, que o agente vê como /workspace. Todo caminho é resolvido depois de seguir links simbólicos e precisa permanecer dentro desse diretório, então um link no workspace não consegue alcançar o resto do disco. O sandbox se recusa a executar comandos.

ItemLimite
Sessões por conta200
Tamanho do prompt32.000 caracteres
Turnos do agente por mensagem24
Leitura ou gravação de arquivo2 MB por chamada
Título da sessão120 caracteres

Um turno que atinge o limite de turnos para e avisa isso. Cada turno pode fazer várias chamadas de modelo aos seus provedores, então conceda acesso com o mesmo cuidado de qualquer outro acesso a modelos que consome orçamento de provedor.

Armazenamento​

Os dados do Strands ficam em <DATA_DIR>/strands/, não no banco de dados da aplicação. Cada conta tem o próprio diretório, <DATA_DIR>/strands/users/<account-hash>/, que contém:

  • registry.json: a lista de sessões da conta
  • sessions/: os snapshots de sessão do Strands que o agente usa como contexto
  • transcripts/: a transcrição de cada sessão exibida na página Strands
  • workspaces/: o workspace privado de cada sessão
  • chat-workspace/: o workspace usado pelos turnos do Chat

Inclua <DATA_DIR>/strands/ nos backups se as sessões forem importantes para você.

Uso​

O Uso do provedor (/usage) atribui as chamadas do Strands ao agente Strands na seção Agentes. Consulte Uso dos agentes.

API​

Toda rota exige uma conta autenticada com acesso ao Strands, exceto /api/strands/access, que exige um administrador.

MétodoCaminhoFinalidade
GET/api/strands/accessLê o modo de acesso e se LIBRE_STRANDS_ACCESS o fixa (admin)
PUT/api/strands/accessDefine mode como disabled, admins ou all-users (admin; 409 se fixado)
GET/api/strands/healthDisponibilidade do motor e versões do harness e do SDK
GET/api/strands/modelsModelos que o motor pode usar para esta conta
GET/api/strands/sessionsLista as sessões
POST/api/strands/sessionsCria uma sessão (title e model opcionais)
GET/api/strands/sessions/:sessionIdLê uma sessão, a transcrição dela e se há um turno em execução
PATCH/api/strands/sessions/:sessionIdAltera o título ou o modelo de uma sessão
DELETE/api/strands/sessions/:sessionIdExclui uma sessão com a transcrição e o workspace dela
POST/api/strands/sessions/:sessionId/messagesEnvia { "text": "..." } e transmite o turno como NDJSON
POST/api/strands/sessions/:sessionId/cancelPara o turno em execução

O stream de mensagens grava um evento JSON por linha: turn-start, text, reasoning, tool-start, tool-result, done (com o motivo da parada e o uso de tokens quando o provedor informa) e error. Fechar a conexão cancela o turno. Enviar uma mensagem enquanto um turno está em execução retorna 409.

Configuração​

VariávelPadrãoFinalidade
LIBRE_STRANDS_ACCESSnão definido (configuração administrativa, admins)Fixa disabled, admins ou all-users; qualquer outro valor deixa o motor travado como desligado

Solução de problemas​

Consulte Problemas do motor Strands.