我正在尝试读取流中的输出(当它出现时)而不是等待整个响应。
我使用了以下代码。
func caller() {
let completionAPIURL = URL(string: "https://api.openai.com/v1/completions")!
var request = URLRequest(url: completionAPIURL)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("<Token>", forHTTPHeaderField: "Authorization")
let requestBody = """
{
"model": "<model>",
"prompt": "<prompt>",
"max_tokens": 200,
"stream": true
}
"""
request.httpBody = requestBody.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Error: \(error)")
return
}
print((response as? HTTPURLResponse)?.statusCode)
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else {
print("Error: invalid HTTP response code")
return
}
guard let data = data else {
print("Error: missing response data")
return
}
let eventStreamString = String(data: data, encoding: .utf8)!
let eventStreamLines = eventStreamString.components(separatedBy: "\n")
for event in eventStreamLines {
let eventFields = event.components(separatedBy: ":")
if eventFields.count < 2 {
continue
}
if fieldName == "data" {
if fieldValue == "[DONE]" {
// Stream terminated
break
} else {
// Process event data
print(event)
}
}
}
}
task.resume()
}
问题是,它仍然等到整个响应到位,然后打印数据。我想要实现的是获取数据以及如何生成流,而不是在整个响应到位之后。
我是比较新手,希望得到详细的帮助。