我正在使用AWS API Gateway使用GoFiber创建API,并通过sam local start-api
进行本地测试
API通过OpenAI生成一个提示,在我完成创建文本/图像的繁重工作之前,我通过审核API端点运行用户输入。如果我强制返回检查器函数ModeratePromptInput
的所有值,它将显示错误。但是,如果我在调用者中检查err != nil
,它将继续运行程序。我该怎么弥补?
以下是调用者(重要的部分):
// This is the function signature:
// func GenerateOutput(c *fiber.Ctx) (interface{}, error)
// ....
// Create OpenAI Client for dependency injection
oClient := openai.NewClient(os.Getenv("OPENAI_SECRET_KEY"))
// Moderate the input to prevent abuse (exit early if input is abusive)
err := actions.ModeratePromptInput(c, oClient)
if err != nil {
log.Printf("Error moderating prompt input: %v", err)
return nil, c.JSON(fiber.Map{
"error": "Error within error logic",
})
}
// Code continues here - I want it to stop on error
这是调节功能:
func ModeratePromptInput(c *fiber.Ctx, oClient *openai.Client) error {
promptInput := models.NewOutputRequest{}
if err := c.BodyParser(&promptInput); err != nil {
return err
}
moderationInput := openai.ModerationRequest{}
moderationInput.Input = promptInput.UserInput
res, err := oClient.Moderations(c.Context(), moderationInput)
if err != nil || res.Results == nil || len(res.Results) == 0 {
return c.Status(500).JSON(fiber.Map{
"error": "Could not moderate input",
})
}
if res.Results[0].Flagged {
return c.Status(403).JSON(fiber.Map{
"error": "Input is abusive",
"results:": res.Results,
})
}
return nil
}
我通过单步执行检查了自己,我用GitHub Copilot检查了,我用ChatGPT检查了,他们都说这是正确的。已封送/未封送的结构携带数据。请求和响应对象正确。但是,我没有得到我想的流动。是不是有什么我不知道的东西导致这个继续运行?
1条答案
按热度按时间kr98yfug1#
问题是以下语句大多数时候返回
nil
:看起来你想要的是:
但这仍然不起作用,因为func
GenerateOutput
将再次调用c.JSON
。我不认为你可以写两次回复。一个可能的修复方法是修改
ModeratePromptInput
如下:并修改
GenerateOutput
以根据错误值构造响应。