JEV - Sair do ciclo: a confiança entra no código

Depois de a confiança ser escrita no ramo, a pessoa sai do caminho obrigatório de cada pedido e só trata os poucos cuja probabilidade ainda está espalhada. As ações de alto privilégio continuam a correr em código, acima de um limiar.

JEV - Sair do ciclo: a confiança entra no código

Coautor: folkbench.com (Folkbench é uma plataforma de avaliação e seleção que se pode rever, para APIs de IA, serviços de modelos e sites relacionados. Apoia-se em informação publicada sobre o serviço, preços, disponibilidade, latência e janelas de evidência para ajudar os utilizadores a comparar e a escolher um caminho.)

Dez textos nesta série:

Uma pessoa no meio do ciclo era um compromisso: o modelo podia dizer disparates, por isso uma pessoa ficava à frente de cada ação de alto privilégio. Deixe-a ali tempo bastante e a pessoa torna-se dívida de arquitetura. O caudal deixa de depender da largura de banda. Depende de haver alguém de turno. Jev vira isso ao contrário. A confiança escreve-se no ramo. A pessoa desce do tronco para a margem e trata só o troço curto em que a distribuição ainda está espalhada.

Porque é que a pessoa foi puxada para dentro

Um modelo de chat é um continuador de texto. A forma da saída é instável, e uma alucinação torna-se um incidente. Finanças, despacho e conformidade empilharam por isso duas camadas de defesa.

A camada de análise não para de engrossar

Para tirar JSON válido de um parágrafo, à volta crescem Pydantic, novas tentativas, listas de bloqueio de palavras-chave e uma segunda instrução. Um juízo passa a ser: escrever a instrução, esperar a geração, falhar a análise, instruir de novo, avaliar de novo. A latência cresce de uma chamada para um ciclo.

A fila humana torna-se o tronco

Quando a defesa ainda não promete nada, o produto diz: pendure aqui uma fila humana. O sistema torna-se «o modelo faz o rascunho, a pessoa decide».

  • O teto é a velocidade de uma pessoa e o turno dela, não a máquina.
  • A pessoa salta entre sistemas e lê prosa sem estrutura. A fadiga em si causa erros.
  • A computação que você comprou acaba como uma máquina de rascunhos à frente de quem tecla. Isso é pseudoautomação.

Escrever a confiança no ramo

Não se podia escrever o modelo direto num if, porque «tenho 90 por cento de certeza» era em si pouco fiável e difícil de comparar. O que Jev devolve é uma probabilidade sobre uma pergunta fechada. Alta o bastante para a política, o código corre. Espalhada, vai para a fila da margem.

request
  │
  ▼
Jev
  ├─ probability clears the threshold ─► code runs
  └─ probability does not             ─► a person at the edge

A probabilidade é recolhida primeiro

Não escreve o porquê. Comprime o sentido sobre as classes ou os degraus que você definiu, e devolve números. O lado esquerdo do muro absorve a confusão da linguagem natural. O lado direito é só um número que se pode testar.

O limiar é a rota

O limiar é política, não uma definição de fábrica do modelo. Uma ação de alto privilégio, como um reembolso, pode exigir que a probabilidade de «sim» ultrapasse 0.99. Acima disso, corre como um ramo duro. Abaixo disso, não force a automação. 0.99 aqui é um exemplo. Cada negócio escreve o seu.

A pessoa fica na margem

A pessoa já não está em cada nó do tronco. A fila humana deixa de ser o caminho obrigatório e passa a ser uma interceção de exceções. Leva a minoria desfocada, não cada pedido.

Um pedido, duas maneiras de o escrever

Gerar primeiro, analisar depois

def handle_ticket_legacy(ticket_text: str):
    prompt = f"""
    Read the ticket and return JSON:
    {{"intent": "REFUND"|"COMPLAINT"|"OTHER", "urgency": "HIGH"|"LOW"}}
    Ticket: {ticket_text}
    """
    raw = chat_model.complete(prompt)
    try:
        data = json.loads(raw)
    except json.JSONDecodeError:
        return push_to_human(ticket_text, reason="parse")
    if data.get("intent") == "REFUND" and data.get("urgency") == "HIGH":
        # no trustworthy confidence, so the privileged action still will not run itself
        return push_to_human(ticket_text, data)
    return default_route(data)

A análise tem de tratar campos em falta e formato partido. Mesmo quando a análise sucede, você não sabe quão estável ela era, e o ramo de alto risco continua a voltar a uma pessoa.

A distribuição entra no ramo

def handle_ticket_jev(ticket_text: str):
    refund = jev.noul(state=ticket_text, statement="this is a high-risk request that should enter refund review automatically")
    kind = jev.choice(
        state=ticket_text,
        options=["HIGH_RISK_REFUND", "NORMAL_INQUIRY", "SPAM"],
    )
    if kind.top == "HIGH_RISK_REFUND" and refund.p_yes >= 0.99:
        return execute_refund_review(ticket_text)
    if kind.top == "NORMAL_INQUIRY" and kind.probability >= 0.95:
        return auto_reply(ticket_text)
    return push_to_edge_human(ticket_text, confidence=kind.probability)

Isto não concede ao modelo um direito de reembolsar. Uma ação de alto privilégio continua a ser uma função que o código chama acima de um limiar. As verificações contabilísticas dentro dessa função não perdem uma linha. O modelo só fornece a probabilidade de uma pergunta fechada.

Lado a lado

Dimensão Gerar primeiro, pessoa no ciclo Distribuição escrita no ramo
Fluxo de controlo try-catch, nova tentativa, grades de proteção Um limiar e um ramo ordinário
Latência Uma geração, muitas vezes acima de um segundo; esperar por uma pessoa são horas Uma chamada fechada anda pelos 70–500 ms; uma pessoa só acontece na margem
Onde a pessoa se senta Muitas vezes no tronco Só quando a probabilidade não chega
Estado Um troço de texto no meio Passa, ou não passa

O determinismo volta ao if

O software quer um ramo que se possa testar. Depois de um modelo de chat entrar no tronco, uma frase que pode mudar de forma senta-se à frente do if. Uma pergunta fechada deixa essa mudança de forma à esquerda do muro. O lado direito continua a ser if e else.

Uma pessoa é o maior pedaço de fricção quando cada pedido espera um clique. Tire-a do tronco, e o tráfego que ultrapassa o limiar já não para para confirmação. Quando a probabilidade cai, o sistema desliza para a margem no local. Não bloqueia a cadeia inteira.

Uma pessoa no meio do ciclo foi o compromisso pago cedo. A cablagem madura não usa uma pessoa como peça. Usa uma pessoa para olhar os poucos casos que ainda estão espalhados, e para tratar as exceções extremas. A articulação fica com a inclinação. A pessoa fica com o troço que ainda não foi escrito na política.

Série