Improve handling of JSON Schema in OpenAI API Response Context (#819)
* feat: add jsonschema.Validate and jsonschema.Unmarshal * fix Sanity check * remove slices.Contains * fix Sanity check * add SchemaWrapper * update api_integration_test.go * update method 'reflectSchema' to support 'omitempty' in JSON tag * add GenerateSchemaForType * update json_test.go * update `Warp` to `Wrap` * fix Sanity check * fix Sanity check * update api_internal_test.go * update README.md * update README.md * remove jsonschema.SchemaWrapper * remove jsonschema.SchemaWrapper * fix Sanity check * optimize code formatting
This commit is contained in:
64
README.md
64
README.md
@@ -743,6 +743,70 @@ func main() {
|
||||
}
|
||||
```
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Structured Outputs</summary>
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"github.com/sashabaranov/go-openai"
|
||||
"github.com/sashabaranov/go-openai/jsonschema"
|
||||
)
|
||||
|
||||
func main() {
|
||||
client := openai.NewClient("your token")
|
||||
ctx := context.Background()
|
||||
|
||||
type Result struct {
|
||||
Steps []struct {
|
||||
Explanation string `json:"explanation"`
|
||||
Output string `json:"output"`
|
||||
} `json:"steps"`
|
||||
FinalAnswer string `json:"final_answer"`
|
||||
}
|
||||
var result Result
|
||||
schema, err := jsonschema.GenerateSchemaForType(result)
|
||||
if err != nil {
|
||||
log.Fatalf("GenerateSchemaForType error: %v", err)
|
||||
}
|
||||
resp, err := client.CreateChatCompletion(ctx, openai.ChatCompletionRequest{
|
||||
Model: openai.GPT4oMini,
|
||||
Messages: []openai.ChatCompletionMessage{
|
||||
{
|
||||
Role: openai.ChatMessageRoleSystem,
|
||||
Content: "You are a helpful math tutor. Guide the user through the solution step by step.",
|
||||
},
|
||||
{
|
||||
Role: openai.ChatMessageRoleUser,
|
||||
Content: "how can I solve 8x + 7 = -23",
|
||||
},
|
||||
},
|
||||
ResponseFormat: &openai.ChatCompletionResponseFormat{
|
||||
Type: openai.ChatCompletionResponseFormatTypeJSONSchema,
|
||||
JSONSchema: &openai.ChatCompletionResponseFormatJSONSchema{
|
||||
Name: "math_reasoning",
|
||||
Schema: schema,
|
||||
Strict: true,
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatalf("CreateChatCompletion error: %v", err)
|
||||
}
|
||||
err = schema.Unmarshal(resp.Choices[0].Message.Content, &result)
|
||||
if err != nil {
|
||||
log.Fatalf("Unmarshal schema error: %v", err)
|
||||
}
|
||||
fmt.Println(result)
|
||||
}
|
||||
```
|
||||
</details>
|
||||
See the `examples/` folder for more.
|
||||
|
||||
## Frequently Asked Questions
|
||||
|
||||
Reference in New Issue
Block a user