• 𝕊𝕚𝕤𝕪𝕡𝕙𝕖𝕒𝕟M
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    1 year ago

    This is a very useful trick, but since the June update you can also use the “function calling” feature to extract structured data. I converted the example in the blog post (I used GPT-4 to convert the TypeScript type into a JSON schema):

    curl https://api.openai.com/v1/chat/completions -u :$OPENAI_API_KEY -H 'Content-Type: application/json' -d '{
      "model": "gpt-3.5-turbo-0613",
      "messages": [
        {"role": "user", "content": "A user has performed the following searches and visited the following sites recently: weather in New York, NYC weather, NYC chance of rain today, is New York a rainy city (They may or may not have changed goals half way through this session.)"}
      ],
      "functions": [
        {
          "name": "report_browsing_goal_analysis",
          "description": "Reports the analysis the users recent browsing activity",
          "parameters": {
            "type": "object",
            "properties": {
                "goal": {
                    "type": "string",
                    "description": "The users consistent recent browsing goal"
                },
                "confidence": {
                    "type": "string",
                    "description": "How confident the analysis engine is in this goal",
                    "enum": ["very low", "low", "med", "high", "very high"]
                },
                "switched": {
                    "type": "boolean",
                    "description": "Whether or not the user seems to have switched goals recently"
                },
                "advice": {
                    "type": "array",
                    "description": "An array of up to 3 creative, specific, non-obvious ways the system recommends for the user to meet their current goal. (Do not return generic suggestions like subscribe to a newsletter or do a Google search, instead recommend specific actions that the user should consider.)",
                    "items": {
                        "type": "object",
                        "properties": {
                            "text": {
                                "type": "string"
                            },
                            "probabilityOfBeingUseful": {
                                "type": "string",
                                "enum": ["very low", "low", "med", "high", "very high"]
                            },
                            "creativity": {
                                "type": "string",
                                "enum": ["very low", "low", "med", "high", "very high"]
                            },
                            "funLevel": {
                                "type": "string",
                                "enum": ["very low", "low", "med", "high", "very high"]
                            }
                        },
                        "required": ["text", "probabilityOfBeingUseful", "creativity", "funLevel"]
                    },
                    "maxItems": 3
                }
            },
            "required": ["goal", "confidence", "switched", "advice"]
        }
        }
      ]
    }'
    

    This is what the API returned:

    {
      "id": "chatcmpl-7Xd4BPsW9QBuk46BJRZRCNoFpJtV9",
      "object": "chat.completion",
      "created": 1688249351,
      "model": "gpt-3.5-turbo-0613",
      "choices": [
        {
          "index": 0,
          "message": {
            "role": "assistant",
            "content": null,
            "function_call": {
              "name": "report_browsing_goal_analysis",
              "arguments": "{\n  \"goal\": \"weather in New York\",\n  \"confidence\": \"high\",\n  \"switched\": false,\n  \"advice\": [\n    {\n      \"text\": \"Check the hourly weather forecast for New York to plan your activities.\",\n      \"probabilityOfBeingUseful\": \"high\",\n      \"creativity\": \"high\",\n      \"funLevel\": \"low\"\n    },\n    {\n      \"text\": \"Subscribe to a weather alert service to stay updated on the weather in New York.\",\n      \"probabilityOfBeingUseful\": \"medium\",\n      \"creativity\": \"medium\",\n      \"funLevel\": \"low\"\n    },\n    {\n      \"text\": \"Join a local weather enthusiasts group to discuss weather patterns in New York.\",\n      \"probabilityOfBeingUseful\": \"low\",\n      \"creativity\": \"high\",\n      \"funLevel\": \"high\"\n    }\n  ]\n}"
            }
          },
          "finish_reason": "function_call"
        }
      ],
      "usage": {
        "prompt_tokens": 303,
        "completion_tokens": 194,
        "total_tokens": 497
      }
    }
    

    Here is just the JSON result extracted:

    {
      "goal": "weather in New York",
      "confidence": "high",
      "switched": false,
      "advice": [
        {
          "text": "Check the hourly weather forecast for New York to plan your activities.",
          "probabilityOfBeingUseful": "high",
          "creativity": "high",
          "funLevel": "low"
        },
        {
          "text": "Subscribe to a weather alert service to stay updated on the weather in New York.",
          "probabilityOfBeingUseful": "medium",
          "creativity": "medium",
          "funLevel": "low"
        },
        {
          "text": "Join a local weather enthusiasts group to discuss weather patterns in New York.",
          "probabilityOfBeingUseful": "low",
          "creativity": "high",
          "funLevel": "high"
        }
      ]
    }
    

    Pretty cool, isn’t it?

    (BTW this was GPT-3.5)