Algumas dicas para otimização de desempenho de chamadas openAi ChatGPT

Demonstração da fonte: GitHub - ddiu8081/chatgpt-demo: Um repositório de demonstração baseado na API OpenAI.

Treino torcido:

A interface de bate-papo (https://api.openai.com/v1/chat/completions) fornecida pela openai possui um modelo grande (175 bilhões de parâmetros ou algo assim) e é difícil concluir uma única solicitação http. usa o método de retorno de fluxo, saltando palavra por palavra e renderizando pouco a pouco, como o código na demonstração:

export const parseOpenAIStream = (rawResponse: Response) => {
  const encoder = new TextEncoder()
  const decoder = new TextDecoder()
  if (!rawResponse.ok) {
    return new Response(rawResponse.body, {
      status: rawResponse.status,
      statusText: rawResponse.statusText,
    })
  }

  const stream = new ReadableStream({
    async start(controller) {
      const streamParser = (event: ParsedEvent | ReconnectInterval) => {
        if (event.type === 'event') {
          const data = event.data
          if (data === '[DONE]') {
            controller.close()
            return
          }
          try {
            // response = {
            //   id: 'chatcmpl-6pULPSegWhFgi0XQ1DtgA3zTa1WR6',
            //   object: 'chat.completion.chunk',
            //   created: 1677729391,
            //   model: 'gpt-3.5-turbo-0301',
            //   choices: [
            //     { delta: { content: '你' }, index: 0, finish_reason: null }
            //   ],
            // }
            const json = JSON.parse(data)
            const text = json.choices[0].delta?.content || ''
            const queue = encoder.encode(text)
            controller.enqueue(queue)
          } catch (e) {
            controller.error(e)
          }
        }
      }

      const parser = createParser(streamParser)
      for await (const chunk of rawResponse.body as any)
        parser.feed(decoder.decode(chunk))
    },
  })

  return new Response(stream)
}

Semelhante a este método de processamento.

No entanto, a transmissão de fluxo não é necessariamente aplicável a todos os serviços.Se o fluxo for alterado para falso, a resposta da interface provavelmente atingirá o tempo limite.

Portanto, algumas estratégias de otimização são necessárias:

1. Reduza a inteligência

Escolha um modelo com energia mais baixa, mas tentei o modelo gpt3 e ele não fala palavras humanas

Na interface de /v1/completions, apenas text-davinci-003 é aceitável

 Explique a diferença entre /v1/completions e v1/chat/completions, /v1/chat/completions passa uma matriz de mensagens para concluir a associação de contexto, enquanto /v1/completions passa um parâmetro de prompt de string, mas ainda pode ser adicionado em de forma que suas respostas sejam sensíveis ao contexto.

mas! ! text-davinci-003 ​​​​​​​​O custo é 10 vezes maior que o do turbo! ! ! ! ! ! !

Isso é absolutamente inaceitável! ! !

2. Reduza o parâmetro de temperatura

Isso terá um efeito de luz. Se você não precisar responder a diferentes respostas para a mesma pergunta todas as vezes, poderá reduzir esse valor ou até mesmo reduzi-lo para 0

3. Otimize o comprimento de retorno 

Isso terá o maior impacto, e o teste pessoal é o mais eficaz. Adicione uma configuração de resposta antes da pergunta. Por exemplo, a resposta não deve exceder 100 palavras. Responda às perguntas a seguir de forma concisa. Isso minimizará o tempo de retorno, pois a interface é cobrada de acordo com o número de palavras chamadas e o número de palavras retornadas (ChatGPT (GPT3.5) nome do modelo oficial da API é "gpt-3.5-turbo" e "gpt-3.5- turbo-0301 ". O preço da chamada API é 10 vezes mais barato do que o modelo GPT text-davinci-003. A taxa de chamada é de $ 0,002/1000tokens, o que equivale a quase 0,1 yuan para 4000 ~ 5000 palavras. Este número inclui o número de palavras na pergunta e o resultado retornado.), então chatgpt mantém o princípio de tantos bb quanto possível, e menos para deixá-lo mais bb pode economizar dinheiro.

 

Observe que não há necessidade de definir max_tokens no parâmetro, pois ele apenas cortará sem pensar.Se a configuração for menor que a resposta de saída original, a resposta ficará incompleta.

おすすめ

転載: blog.csdn.net/sm9sun/article/details/129799647