¿Cuáles son los nuevos cambios en el complemento de la tabla después de instalar ChatGPT?—Mejora de llamada de función

Resumen: Este artículo fue publicado originalmente en CSDN por el equipo técnico de Grape City. Indique la fuente de la reimpresión: sitio web oficial de Grape City , Grape City proporciona a los desarrolladores herramientas, soluciones y servicios de desarrollo profesional para empoderar a los desarrolladores.

En el artículo "¿Cuáles son los efectos inesperados de la combinación de ChatGPT y SpreadJS?", se menciona un problema obvio con el complemento ChatGPT, es decir, "es posible que el complemento no analice el formato de resultado devuelto, lo que hace las operaciones subsiguientes son imposibles . La causa de este problema tiene algo que ver con el principio técnico de ChatGPT.

Limitaciones de las predicciones del modelo: ChatGPT se basa en modelos de lenguaje y su rendimiento está limitado por el entrenamiento del modelo y los conjuntos de datos. Para problemas complejos, es posible que los resultados no se devuelvan con precisión y que el complemento no analice el formato de resultado devuelto.

Sin embargo, con el lanzamiento de la capacidad de llamada de función de la API de finalización de chat el 13 de junio, este problema se resolvió bien. Esta actualización trae nuevos modelos, mayor contenido y precios más bajos, y las funciones de llamadas brindan una forma revolucionaria de interacción.

A través de las llamadas a funciones, el modelo de OpenAI puede generar parámetros JSON estructurados que los sistemas externos pueden usar directamente en función de su descripción de las funciones en el sistema, de modo que GPT pueda integrarse mejor con los sistemas externos.

Toma como ejemplo la "tabla dinámica sugerida" del artículo anterior. Para los datos de la tabla proporcionados, el modelo text-davinci-003 devolverá el contenido de texto sugerido:

"text": "\n\nFila: Vendedor\nColumna: Marca\nValor: Ventas\n\nA través de esta configuración, se pueden analizar las ventas totales de las diferentes marcas vendidas por cada vendedor."

Aunque hay símbolos como los saltos de línea que pueden analizar los valores requeridos de fila y columna, la estabilidad es muy incierta y es difícil usar el programa directamente.

Al usar la función de llamada, el establecimiento de la tabla dinámica será muy simple. Todavía tome el soporte de nodejs proporcionado oficialmente por OpenAI como ejemplo.

  1. Agregar descripción de funciones al cuadro de diálogo

  2. 1.  let messages = [
    2.  {
          
          "role": "user", "content": "最后的JSON数据第一行是数据字段,创建有分析意义的数据透视表\\n" + JSON.stringify(data)}
    3.  ]
    4.  let functions = [{
          
          
    5.  "name": "pivot_talbe_analyze",
    6.  "description": "对数据创建数据透视表,返回数据透视表结果",
    7.  "parameters": {
          
          
    8.  "type": "object",
    9.  "properties": {
          
          
    10.  "rowFieldName": {
          
          
    11.  "type": "string",
    12.  "description": "行字段名称"
    13.  },
    14.  "columnFieldName": {
          
          
    15.  "type": "string",
    16.  "description": "列段名称"
    17.  },
    18.  "dataFieldName": {
          
          
    19.  "type": "string",
    20.  "description": "值字段名称"
    21.  },
    22.  },
    23.  },
    24.  "required": ["rowFieldName", "dataFieldName"]
    25.  }]
    26.  
    27.  var response = openai.createChatCompletion({
          
          
    28.  "model": "gpt-3.5-turbo-0613",
    29.  "messages": messages,
    30.  "functions": functions,
    31.  "functions_call": {
          
          "name": "pivot_talbe_analyze"}
    32.  });
    

Un cuadro de diálogo puede tener varias descripciones de funciones, y cada descripción de función incluye el nombre, la descripción y los parámetros del método (la regla de descripción es JSON Schema) y esos parámetros son obligatorios.

Para crear una tabla dinámica seleccionando un área, debe proporcionar los nombres de campo de las tres dimensiones de fila, columna y valor, por lo que necesita tres parámetros: RowFieldName, columnFieldName y dataFieldName.

Además, el modo de función se puede seleccionar a través de la configuración de function_call.Cuando el campo de funciones no está vacío, el valor predeterminado es "auto", y la función pivot_talbe_analyze se especifica en el ejemplo.

La llamada de finalización devuelve directamente los tres parámetros en el nombre de la función y los parámetros:

{
    
    name: 'pivot_talbe_analyze', arguments: '{\\n "rowFieldName": "销售人员",\\n "columnFieldName": "品牌",\\n "dataFieldName": "销售额"\\n}'}
  1. Utilice GPT para obtener resultados y crear tablas dinámicas

La tabla dinámica creada por el método correspondiente en el sistema se puede llamar directamente a través del nombre de función y los parámetros devueltos.

let args = JSON.parse(completion.data.choices[0].message.function_call.arguments)

let pivotTable = sheet.pivotTables.add("PivotTable", "Table1", 2, 7, GC.Spread.Pivot.PivotTableLayoutType.outline, GC.Spread.Pivot.PivotTableThemes.medium2);

pivotTable.add(args.rowFieldName, args.rowFieldName, GC.Spread.Pivot.PivotTableFieldType.rowField);

if(args.columnFieldName)

pivotTable.add(args.columnFieldName, args.columnFieldName, GC.Spread.Pivot.PivotTableFieldType.columnField);

pivotTable.add(args.dataFieldName, "求和项:" + args.dataFieldName, GC.Spread.Pivot.PivotTableFieldType.valueField, GC.Pivot.SubtotalType.sum);

El resultado de obtener la tabla dinámica de SpreadJS es el siguiente:

let ptRange = pivotTable.getRange().content;

let ptData = sheet.getArray(ptRange.row, ptRange.col, ptRange.rowCount, ptRange.colCount);

1.GPT反馈公式调用结果

messages.push(completion.data.choices[0].message)

messages.push({
    
    "role": "function", "name": "pivot_talbe_analyze", "content": JSON.stringify({
    
    pivotTable: ptData})})

response = openai.createChatCompletion({
    
    

"model": "gpt-3.5-turbo-0613",

"messages": messages,

"functions": functions,

function_call: "none"

});

response.then(function(completion){
    
    

let desc = completion.data.choices[0].message.content;

GC.Spread.Sheets.Designer.showMessageBox(desc, "分析结果", GC.Spread.Sheets.Designer.MessageBoxIcon.info)

});

Agregue el historial y la información obtenida de la tabla dinámica a los mensajes, donde la regla del mensaje tiene más tipos de funciones y el contenido es el resultado de retorno de llamar a la función.

Establezca function_call en none al llamar, no use la función de llamada, GPT devuelve la siguiente información según el contexto:

{
    
    role: 'assistant', content: '以下是创建的数据透视表:\n\n\`\`\`\n[\n ["求和项:销售额", "品牌", null, null…\n]\n\`\`\`\n\n该数据透视表按照销售人员和品牌对销售额进行了汇总,可以更方便地进行数据分析和比较。'}

A continuación, se puede enviar una nueva solicitud para permitir que GPT analice y procese más los datos. Por supuesto, para algunas operaciones del sistema, podemos realizar el paso 2.

En resumen, a través de las llamadas a funciones, la interacción entre el propio sistema y el modelo openai es más fácil y el acoplamiento es más estrecho. El sistema inicia una solicitud al modelo ChatGPT a través de la interacción, y el modelo puede seleccionar de manera inteligente la función del sistema que necesita ser llamado, lo que mejora aún más la creatividad del sistema.

Sin embargo, aún debe recordarse que para el método de actualización y eliminación de datos del sistema de llamada, aún es necesario confirmarlo antes de ejecutarlo.

Enlace de extensión:

Ensayo - Cuando ChatGPT se encuentra con SpreadJS

POI abre el archivo de Excel y encuentra una práctica de solución de memoria insuficiente

Supongo que te gusta

Origin blog.csdn.net/powertoolsteam/article/details/131433149
Recomendado
Clasificación