OpenAI veröffentlicht mehrere wichtige Updates

1. Öffnen Sie das GPT-3.5-Turbo-Modell (gpt-3.5-turbo-16k) mit 16k-Kontext, was dem Vierfachen des aktuellen entspricht 2. Neue GPT-4- und 3.5-Turbo-Modelle 3. Die neue Funktionsaufruffunktion in der Chat Completions API (es ist möglich, Netzwerkdaten in Echtzeit abzurufen) 4. Die Kosten für das Einbettungsmodell werden um 75 % reduziert 5. Die Eingabe-Token-Kosten von gpt-3.5-turbo wurden um 25 % reduziert (gute Nachrichten für Entwickler)

Die wahrscheinlich aufregendste dieser Funktionen ist dieFunktionsaufrufWir alle wissen, dass die chatgpt-Trainingsdaten auf Funktionen vor 2021 basieren. Wenn Sie Fragen zu Echtzeit stellen möchten, gibt es keine Möglichkeit, diese zu beantworten. Funktionsaufrufe ermöglichen es, Netzwerkdaten in Echtzeit abzurufen, z B. das Abfragen von Wettervorhersagen, das Überprüfen von Lagerbeständen, das Empfehlen eines aktuellen Films oder ähnliches.

Welche Modelle unterstützen Funktionsaufrufe?

gpt-3.5-turbo-0613 Und gpt-4-0613 Beide Modelle unterstützen Funktionsaufrufe.

Wie ist der Ablauf von Funktionsaufrufen?

1. Wenn ein Benutzer eine Frage stellt, rufen Sie einmal die Vervollständigungsschnittstelle mit einer Funktionsbeschreibung auf, und gpt beurteilt, ob der Aufruf der Funktion unterstützt wird, und extrahiert in diesem Fall die für die Funktion erforderlichen Parameter aus den Frageninformationen des Benutzers. 2. Nachdem der Entwickler die von gpt extrahierten Parameter erhalten hat, ruft er die Funktion auf und gibt das Ergebnis zurück 3. Senden Sie das Rückgabeergebnis der Funktion erneut an GPT zur Zusammenfassung und Zusammenfassung in natürlicher Sprache

Worauf Sie achten sollten:

  1. Der gesamte Prozess von gpt wird zweimal ausgeführt. Der erste Aufruf extrahiert die Funktionsparameter aus der Frage und der zweite Aufruf fasst die von der Funktion zurückgegebenen Ergebnisse zusammen
  2. Der Funktionsaufruf wird nicht von gpt, sondern vom Entwickler aufgerufen
Siehe auch  KI ist langweilig – Wie man ChatGPT jailbreakt

Geben Sie ein reales Beispiel

Hier verwende ich die Echtzeit-Wettervorhersage als Beispiel, um den Funktionsaufrufprozess zu demonstrieren. Die AutoNavi-API eines Drittanbieters, die ich für die Wettervorhersageschnittstelle verwende, ist kostenlos und hat ein Kontingent von Tausenden von Aufrufen pro Tag. Der Bewerbungsregistrierungsprozess entfällt hier, Recherche selbst durchführen.

Mit dieser Funktion werden die Wetterbedingungen und Parameter abgefragt city_name Dies ist der Name der Stadt, da die Gaode-API nur die Überprüfung des Wetters über den Stadtcode unterstützt. Daher habe ich eine Abfrage durchgeführt, um den entsprechenden Code basierend auf dem Stadtnamen zu finden

Zu den von der Schnittstelle zurückgegebenen Ergebnissen gehören Feldinformationen wie Temperatur, Windstärke, Windrichtung, Luftfeuchtigkeit und Wetter.

Nachdem die Wetterfunktion bereit ist, beginnt der Benutzer zu fragen: „Wie ist das Wetter in Shenzhen?“ und die Schnittstelle „ChatCompletion“ wird zum ersten Mal aufgerufen.

Hier spezifizieren wir afunctions Parameter, der beispielsweise den Namen der Funktion und den Parametertyp beschreibt, den wir hier definierencity_nameParameter, gpt extrahiert den Stadtnamen aus der Benutzerfrage.

Die von gpt an uns zurückgegebene Nachricht hatfunction_call Feld, und der Wert des Feldes city_name wird aus den Argumenten extrahiert.

Schritt 2: Rufen Sie die Funktion auf, nachdem Sie die Parameter aus dem zurückgegebenen Ergebnis extrahiert haben. Dieser Vorgang wird nicht an gpt übergeben, sondern der Entwickler ruft die Funktion selbst auf. Was gpt tut, ist, die für die Funktion erforderlichen Parameter zu extrahieren.

Beachten Sie, dass wir hier eine JSON-Konvertierung des vom Funktionsaufruf zurückgegebenen Ergebnisses durchführen müssen

Schritt 3: Fassen Sie die zurückgegebenen Ergebnisse in gpt zusammen

Beachten Sie dies in der letzten Nachricht in der NachrichtenlisteroleDie Rolle ist Funktion und das Endergebnis istsecond_responseDer Inhalt ist:

Siehe auch  Peugeot wird ChatGPT bis Ende 2024 in alle seine Fahrzeuge integrieren

72776Ba962E846538Fc715D553C191Fa

0B6A63F3Da32480C8Efd7Af5A2B3Fa73

9Ee1362387Db4Da79Fa880D2Ee71917A

910Cc12Be955467Eb5F105Edcb2Ffc99

7Da82D54F5B4494680973Bf7Bcdeabc6

const functionCalling = async ({
  isUseGoogleSearch,
  params,
  messages,
  historyMessage,
  model,
}) => {

  const searchGoogleGptFunction = {
    name: 'search_google_when_gpt_cannot_answer',
    description:
      '当 gpt 遇到无法回答的或者需要搜索引擎协助回答时从 google 搜索',
    parameters: {
      type: 'object',
      properties: {
        query: {
          type: 'string',
          description: '搜索句,支持中文或者英文',
        },
      },
    },
  }

  const getCurrentWeather = {
    name: 'get_current_weather',
    description: '获取指定地区的当前天气情况',
    parameters: {
      type: 'object',
      properties: {
        city: {
          type: 'string',
          description: '城市,例如:深圳',
        },
      },
      required: ['city'],
    },
  }

  params = {
    ...params,
    functions: [searchGoogleGptFunction, getCurrentWeather],
    function_call: isUseGoogleSearch ? 'auto' : 'none', //fun?.function_call, none
  }

  let completionRes = await axios.post(`${baseURL}/api/light/chat/openAi`, {
    model,
    messages,
    apiKey,
    params,
  })

  const { completion } = completionRes.data.data

  if (
    completion &&
    Array.isArray(completion.choices) &&
    completion.choices.length > 0
  ) {
    if (
      completion.choices[0].finish_reason === 'function_call' &&
      completion.choices[0]?.message?.function_call?.name ===
        'search_google_when_gpt_cannot_answer'
    ) {
      try {
        let myArguments = completion.choices[0]?.message?.function_call?.arguments
        console.log('myArguments', myArguments)
        myArguments = myArguments ? JSON.parse(myArguments) : {}
        let pageNum = 1
        searchCount = searchCount + 1
        let message = myArguments.query
        console.log('google搜索次数', searchCount)
        console.log('google搜索关键词', message, Date())

        let timer = setTimeout(() => {
          customSendEmail({
            subject: 'google搜索超时',
            html: `google搜索超时,${message},${pageNum}`,
          })
        }, 1000 * 60)

        try {
          let result = await axios.post(
            `${baseURL}/api/light/chat/googleSearchOnAzure`,
            {
              message,
              pageNum: 1,
              apiKey,
            }
          )
          clearTimeout(timer)

          const { searchResult } = result.data.data

          delete searchResult.queries

          if (searchResult && Array.isArray(searchResult.items)) {
            let googleResultList = searchResult.items.map((item) => {
              return {
                title: item.title,
                snippet: item.snippet,
              }
            })
            const googleResultForGPT = `这是我的提问:${historyMessage}\n这是我在google搜索“${message}”的结果:\n${JSON.stringify(
              googleResultList
            )}\n请结合搜索结果回答`
            console.log(googleResultForGPT)
            let messagesTemp = [
              ...messages,
              {
                role: 'function',
                name: completion.choices[0]?.message?.function_call?.name,
                content: googleResultForGPT,
              },
            ]

            completionRes = await axios.post(
              `${baseURL}/api/light/chat/openAi`,
              {
                model,
                messages: messagesTemp,
                apiKey,
                params,
              }
            )
            return completionRes
          }
        } catch (err) {
          console.log('错误1', err)

          if (global.isLocal === false) {
            customSendEmail({
              subject: 'chatgpt错误【2】',
              html: `chatgpt错误【2】
${err.stack}`,
            })
          }
        }
      } catch (err) {
        console.log('chatgpt错误【1】', err)

        if (global.isLocal === false) {
          customSendEmail({
            subject: 'chatgpt错误【1】',
            html: `chatgpt错误【1】
${err.stack}`,
          })
        }
      }
    } else if (
      completion.choices[0].finish_reason === 'function_call' &&
      completion.choices[0]?.message?.function_call?.name ===
        'get_current_weather'
    ) {
      try {
        let myArguments = completion.choices[0]?.message?.function_call?.arguments
        console.log('myArguments,get_current_weather', myArguments)
        myArguments = myArguments ? JSON.parse(myArguments) : {}
        let city = myArguments.city

        let resultCity = cityList.find(item => item.name.includes(city))
        let cityCode = '110000'
        if (resultCity && resultCity.adcode) {
          cityCode = resultCity.adcode
        }
        console.log('城市', city, cityCode)

        let result = await axios.get(
          `https://restapi.amap.com/v3/weather/weatherInfo?key=${weatherApiKey}&city=${cityCode}`
        )
        const searchResult = result.data

        if (searchResult && Array.isArray(searchResult.lives)) {
          const searchResultForGPT = `这是我的提问:${historyMessage}\n这是我查询到的结果:\n${JSON.stringify(
            searchResult.lives
          )}\n请结合搜索结果回答`
          console.log(searchResultForGPT)
          let messagesTemp = [
            ...messages,
            {
              role: 'function',
              name: completion.choices[0]?.message?.function_call?.name,
              content: searchResultForGPT,
            },
          ]

          completionRes = await axios.post(`${baseURL}/api/light/chat/openAi`, {
            model,
            messages: messagesTemp,
            apiKey,
            params,
          })
          return completionRes
        }
      } catch (err) {
        console.log('chatgpt错误【3】', err)

        if (global.isLocal === false) {
          customSendEmail({
            subject: 'chatgpt错误【3】',
            html: `chatgpt错误【3】
${err.stack}`,
          })
        }
      }
    }
  }
}
const { google } = require('googleapis')

const chatGoogleSearchOnAzure = async (req, res) => {
  let { message = '', pageNum = 1, apiKey = 'sk-xxx' } = req.body

  if (apiKey === 'xxx') {
    let start = (pageNum - 1) * 10

    const customSearch = google.customsearch('v1')
    const customSearchRes = await customSearch.cse.list({
      cx: googleCx,
      key: googleKey,
      q: message,
      start,
      num: 10,
      hl: 'zh-CN',
      safe: 'off',
      imgColorType: 'color',
    })

    const searchResult = customSearchRes.data

    res.send({
      code: 200,
      data: {
        searchResult: searchResult,
      },
      message: '成功',
    })
  } else {
    res.send({
      code: 400,
      message: '失败:参数apiKey',
    })
  }
}

Referenzlink:

Siehe auch  Siri to AppleCare, Mark Gurman verrät, wo Apple seine ChatGPT-ähnliche App, genannt Apple GPT, einsetzen könnte

https://wejson.cn/excel2json/

https://lbs.amap.com/api/webservice/guide/api/weatherinfo/

https://m.moji.com/weather/china/beijing/beijing

https://zhuanlan.zhihu.com/p/637425118

http://chat.xutongbao.top/

Anzeige

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein