ChatGPT-3 R中的openai API:聊天完成时出错-如何定位问题?

cyvaqqii  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(1645)

我尝试在R中使用OpenAI API的聊天完成功能对大量报纸文章进行分类。通常情况下,它工作得很好,但对于许多文章,我得到了一个我不理解的错误。
这是我得到的错误:
www.example.com中的错误is.na(输出)||!is.character(output):
“length = 3”强制转换为“logical(1)”
一个例子是:

# libraries loaded at that moment
library(tidyverse)
library(httr)
library(tidytext)
library(purrr)

system_task <- "You will be provided one article per prompt by the Austrian Newspaper Der Standard. The article is written in German. Each prompt only contains one article. All of these mention the justice system (or actors in the justice system such as Staatsanwalt, WKSta, Richter or Gericht) or the Austrian Constitutional Court (called VfGH or Verfassungsgerichtshof). We want you to take multiple steps for each of these articles: 1) Summarize the article in 3 sentences.  Answer this question with the prefix '1)'. 2) Does the article mention that politicians critisize the judiciary or the VfGH? Answer this question with the prefix '2)'.3) Does the article mention that politicians attack the judiciary or the VfGH?  Answer this question with the prefix '3)' 4) If 2) or 3) is answered with yes: Who is criticized or attacked by whom, name the actors. Remember that we are not interested in conflict between politicians, only between politicians and the judiciary. Answer this question with the prefix '4)'"

article <- 'In der Adventzeit rücken Armut, Flucht, Krankheit und Obdachlosigkeit vermehrt in den Fokus der Öffentlichkeit. Nicht nur in der Weihnachtsgeschichte geht es um Armut, Flucht, Krankheit und Obdachlosigkeit. Im Advent rücken diese Themen wiederholt in das Blickfeld der Öffentlichkeit, denn für viele Familien ist Weihnachten aus finanziellen und gesundheitlichen Gründen keine besinnliche Zeit. Rund 140.000 Menschen in Österreich könnten ihre Wohnung nicht ausreichend heizen. Das sagte Caritas-Präsident Michael Landau am Sonntagvormittag in der ORF-"Pressestunde". Das Ziel der neuen Regierung müsse sein, Kinderarmut und Altersarmut zu senken. Landau hatte der türkis-blauen Regierung während der vergangenen Legislaturperiode eine "Demontage" des Sozialstaats vorgeworfen. Im ORF-Studio betonte er wiederholt seine "Erleichterung" über den Entscheid des Verfassungsgerichtshofs, die Kernpunkte der neuen Sozialhilfe von Türkis-Blau zu kippen. Die Höchstrichter hatten am Dienstag sowohl die starken Kürzungen für kinderreiche Familien als auch für Menschen mit schlechten Deutsch- oder Englischkenntnissen gekippt. "Die Mindestsicherung muss Armut vermeiden", sagte Landau. Eine Kürzung der Familienzuschläge auf 44 Euro ab dem dritten Kind – wie in der neuen Sozialhilfe von Türkis-Blau vorgesehen – "entspricht nicht der Lebenswirklichkeit von Menschen". Alleinerzieherinnen und kinderreiche, einkommensschwache Familien seien sowieso schon "in besonderer Weise armutsgefährdet". Die VfGH-Entscheidung sei eine Chance, Landau plädiert für eine Neuregelung unter Einbindung der Praktiker und Hilfsorganisationen. Auch im Pflegebereich brauche man dringend neue Lösungen. Die vorige Bundesregierung habe völlig zu Recht erkannt, dass dieses Thema viele Menschen berühre. Österreich ist pflegebedürftig, so Landau – er hoffe auf die neue Regierung, egal wie sie aussehe. Es brauche einen vergleichbaren Qualitäts-, Versorgungs- und Finanzierungsrahmen. Der Zugang zur Pflege müsse für alle flächendeckend leistbar sein und es brauche auch Anstrengungen, damit sich Menschen für den Pflegeberuf entscheiden. Die Zahl der pflegebedürftigen Menschen in Österreich ist gestiegen, damit haben sich laut Statistik Austria auch die Kosten für die Betreuung kräftig erhöht. Die Pflegekosten des Staats sind seit 2013 um ein Drittel angestiegen, zeigen aktuelle Zahlen. 13.000 Menschen mehr als im Vorjahr waren in Heimen und Pflegehäusern untergebracht. Bei den Hausbesuchen durch Pflegefachkräfte war der Anstieg geringer. Neben dem Plus der älteren, pflegebedürftigen Menschen habe sich aber auch die Abschaffung des Pflegeregress ausgewirkt. Sozialministerin Brigitte Zarfl hatte im November zwei Studien zur Zukunft der Pflege in Österreich präsentiert. Die Zahlen deuteten auf einen bevorstehenden Personalmangel hin. (red, 22.12.2019)'

expr <- POST(
      # API Link
      url = "https://api.openai.com/v1/chat/completions",
      # Authorizatiob
      add_headers(Authorization = paste("Bearer", chatGPT_API)),
      # output in json
      content_type_json(),
      # encode the value to json format
      encode = "json",
      # low randomness of answers
      temperature = 0,
      stop = none,
      # Controlling what to show as the output
      body = list(
        model = "gpt-3.5-turbo",
        messages = list(list(role = "user", content = article),
                        list(role = "system", content = system_task))))

有没有人知道问题可能在哪里,以及如何解决它?
我试着用tryCatch Package 它,但也不起作用:

chatGPT_response <- tryCatch(
    
    # Try to retrieve answer for OpenAI API
    expr = {
      POST(
      # API Link
      url = "https://api.openai.com/v1/chat/completions",
      # Authorizatiob
      add_headers(Authorization = paste("Bearer", chatGPT_API)),
      # output in json
      content_type_json(),
      # encode the value to json format
      encode = "json",
      # low randomness of answers
      temperature = 0,
      stop = none,
      # Controlling what to show as the output
      body = list(
        model = "gpt-3.5-turbo",
         messages = list(list(role = "user", content = article),
                        list(role = "system", content = system_task)
                        )))
      },
    # In case an error occurs while using API
    error = function(e){
      message(paste("For article there was an error."))
      return(NA)
    },
    # Notify about a possible warning while using API
    warning = function(w){
      message(paste("For article there was a warning."))
    }
  )
wnavrhmk

wnavrhmk1#

最后的帮助是切换到openai包。

library(tidyverse)
library(openai)
library(tidytext)
library(purrr)

system_task <- "You will be provided one article per prompt by the Austrian Newspaper Der Standard. The article is written in German. Each prompt only contains one article. All of these mention the justice system (or actors in the justice system such as Staatsanwalt, WKSta, Richter or Gericht) or the Austrian Constitutional Court (called VfGH or Verfassungsgerichtshof). We want you to take multiple steps for each of these articles: 1) Summarize the article in 3 sentences.  Answer this question with the prefix '1)'. 2) Does the article mention that politicians critisize the judiciary or the VfGH? Answer this question with the prefix '2)'.3) Does the article mention that politicians attack the judiciary or the VfGH?  Answer this question with the prefix '3)' 4) If 2) or 3) is answered with yes: Who is criticized or attacked by whom, name the actors. Remember that we are not interested in conflict between politicians, only between politicians and the judiciary. Answer this question with the prefix '4)'"

article <- 'In der Adventzeit rücken Armut, Flucht, Krankheit und Obdachlosigkeit vermehrt in den Fokus der Öffentlichkeit. Nicht nur in der Weihnachtsgeschichte geht es um Armut, Flucht, Krankheit und Obdachlosigkeit. Im Advent rücken diese Themen wiederholt in das Blickfeld der Öffentlichkeit, denn für viele Familien ist Weihnachten aus finanziellen und gesundheitlichen Gründen keine besinnliche Zeit. Rund 140.000 Menschen in Österreich könnten ihre Wohnung nicht ausreichend heizen. Das sagte Caritas-Präsident Michael Landau am Sonntagvormittag in der ORF-"Pressestunde". Das Ziel der neuen Regierung müsse sein, Kinderarmut und Altersarmut zu senken. Landau hatte der türkis-blauen Regierung während der vergangenen Legislaturperiode eine "Demontage" des Sozialstaats vorgeworfen. Im ORF-Studio betonte er wiederholt seine "Erleichterung" über den Entscheid des Verfassungsgerichtshofs, die Kernpunkte der neuen Sozialhilfe von Türkis-Blau zu kippen. Die Höchstrichter hatten am Dienstag sowohl die starken Kürzungen für kinderreiche Familien als auch für Menschen mit schlechten Deutsch- oder Englischkenntnissen gekippt. "Die Mindestsicherung muss Armut vermeiden", sagte Landau. Eine Kürzung der Familienzuschläge auf 44 Euro ab dem dritten Kind – wie in der neuen Sozialhilfe von Türkis-Blau vorgesehen – "entspricht nicht der Lebenswirklichkeit von Menschen". Alleinerzieherinnen und kinderreiche, einkommensschwache Familien seien sowieso schon "in besonderer Weise armutsgefährdet". Die VfGH-Entscheidung sei eine Chance, Landau plädiert für eine Neuregelung unter Einbindung der Praktiker und Hilfsorganisationen. Auch im Pflegebereich brauche man dringend neue Lösungen. Die vorige Bundesregierung habe völlig zu Recht erkannt, dass dieses Thema viele Menschen berühre. Österreich ist pflegebedürftig, so Landau – er hoffe auf die neue Regierung, egal wie sie aussehe. Es brauche einen vergleichbaren Qualitäts-, Versorgungs- und Finanzierungsrahmen. Der Zugang zur Pflege müsse für alle flächendeckend leistbar sein und es brauche auch Anstrengungen, damit sich Menschen für den Pflegeberuf entscheiden. Die Zahl der pflegebedürftigen Menschen in Österreich ist gestiegen, damit haben sich laut Statistik Austria auch die Kosten für die Betreuung kräftig erhöht. Die Pflegekosten des Staats sind seit 2013 um ein Drittel angestiegen, zeigen aktuelle Zahlen. 13.000 Menschen mehr als im Vorjahr waren in Heimen und Pflegehäusern untergebracht. Bei den Hausbesuchen durch Pflegefachkräfte war der Anstieg geringer. Neben dem Plus der älteren, pflegebedürftigen Menschen habe sich aber auch die Abschaffung des Pflegeregress ausgewirkt. Sozialministerin Brigitte Zarfl hatte im November zwei Studien zur Zukunft der Pflege in Österreich präsentiert. Die Zahlen deuteten auf einen bevorstehenden Personalmangel hin. (red, 22.12.2019)'

gpt_response <- create_chat_completion(
            model = "gpt-3.5-turbo",
            messages = list(
              list(
                "role" = "system",
                "content" = system_task
              ),
              list(
                "role" = "user",
                "content" = article
              )
            )
          )

response_text <- gpt_response |> 
      pluck('choices') |> 
      pull(message.content)

相关问题