Algunos consejos para optimizar el rendimiento de las llamadas openAi ChatGPT

Fuente de demostración: GitHub - ddiu8081/chatgpt-demo: un repositorio de demostración basado en la API de OpenAI.

Entrenamiento torcido:

La interfaz de chat (https://api.openai.com/v1/chat/completions) proporcionada por openai tiene un modelo grande (175 mil millones de parámetros o algo así), y es difícil completar una sola solicitud http. Algunas prácticas comunes toma el método de retorno de flujo, saltando palabra por palabra y luego renderizando poco a poco, como el código en la demostración:

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)
}

Similar a este método de procesamiento.

Sin embargo, la transmisión de flujo no es necesariamente aplicable a todos los servicios.Si el flujo se cambia a falso, la respuesta de la interfaz probablemente se agote.

Por lo tanto, se necesitan algunas estrategias de optimización:

1. Reducir la sabiduría

Elija un modelo con menos energía, pero probé el modelo gpt3 y no habla palabras humanas en absoluto

En la interfaz de /v1/completions, solo se acepta text-davinci-003

 Explique la diferencia entre /v1/completions y v1/chat/completions, /v1/chat/completions pasa una matriz de mensajes para completar la asociación de contexto, mientras que /v1/completions pasa un parámetro de solicitud de cadena, pero aún se puede agregar en tal manera que sus respuestas sean sensibles al contexto.

¡pero! ! text-davinci-003 ​​​​​​​​¡ El costo es 10 veces mayor que el del turbo! ! ! ! ! ! !

¡Esto es absolutamente inaceptable! ! !

2. Reducir el parámetro de temperatura

Esto tendrá un efecto de luz. Si no necesita responder diferentes respuestas a la misma pregunta cada vez, puede reducir este valor, o incluso reducirlo a 0

3. Optimizar la longitud de retorno 

Esto tendrá el mayor impacto y la prueba personal es la más efectiva. Agregue una configuración de respuesta delante de la pregunta. Por ejemplo, la respuesta no debe exceder las 100 palabras. Responda las siguientes preguntas de manera concisa. Minimizará el tiempo de devolución, porque la interfaz se factura de acuerdo con la cantidad de palabras llamadas y devueltas (ChatGPT (GPT3.5), el nombre oficial del modelo API es "gpt-3.5-turbo" y "gpt-3.5-turbo-0301 " El precio de la llamada API es 10 veces más barato que el modelo GPT text-davinci-003. La tarifa de la llamada es de $ 0.002/1000 tokens, lo que equivale a casi 0.1 yuan por 4000 ~ 5000 palabras. Este número incluye la cantidad de palabras en la pregunta y el resultado devuelto.), por lo que chatgpt mantiene el principio de tantos bb como sea posible, y menos para permitirle más bb puede ahorrar dinero.

 

Tenga en cuenta que no es necesario configurar max_tokens en el parámetro, ya que solo cortará sin pensar.Si la configuración es más baja que la respuesta de salida original, la respuesta estará incompleta.

Supongo que te gusta

Origin blog.csdn.net/sm9sun/article/details/129799647
Recomendado
Clasificación