我正在使用 Vapor Swift 构建一个开放 AI 聊天流后端。它使用 MacPaw 的OpenAI包装器连接到 Open AI API 。但我不确定如何使用 SSE 将结果流式传输到客户端,而不是作为单个响应。
我当前的代码如下所示:
func postChatStreamHandler(_ req: Request) throws -> EventLoopFuture<Response> {
let openAI = OpenAI(configuration: configuration)
let promise = req.eventLoop.makePromise(of: Data.self)
let query = ChatQuery(model: .gpt4, messages: messages)
openAI.chatsStream(query: query) { partialResult in
switch partialResult {
case .success(let result):
if let detla = result.choices.first?.delta,
let data = try? JSONEncoder().encode(result) {
promise.succeed(data)
}
case .failure(let error):
...
}
} completion: { error in
...
}
return promise.futureResult.map …Run Code Online (Sandbox Code Playgroud) 我有一个使用 Vapor Fluent PostgreSQL 构建的已部署后端。
现在我需要new_field 向数据库中具有架构名称的表添加一个新的必需字段键schema_name 。我创建了一个新的迁移:
struct AddNewFieldToSchema: Migration {
func prepare(on database: Database) -> EventLoopFuture<Void> {
database.schema("schema_name")
.field("new_field", .string, .required)
.update()
}
func revert(on database: Database) -> EventLoopFuture<Void> {
database.schema("schema_name")
.deleteField("new_field")
.update()
}
}
Run Code Online (Sandbox Code Playgroud)
但运行后,它给我错误:
Fatal error: Error raised at top level: server: column "new_field" of relation "schema_name" contains null values (ATRewriteTable)
Run Code Online (Sandbox Code Playgroud)
我猜测这是因为使用旧数据模型创建的现有数据没有 的值new_field,因为如果数据库为空,这个新迁移运行正常。
我该如何解决这个问题?谢谢。