From: liangzhenying <867174124@qq.com> Date: Mon, 10 Feb 2025 07:10:35 +0000 (+0800) Subject: AI回复指令调试 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=27de52cd40852c3b31153a834251807a6617a760;p=mirrors%2FIOTBluetooth-iOS.git AI回复指令调试 --- diff --git a/IOTBluetooth/IOTBluetooth/Example/ChatCell.swift b/IOTBluetooth/IOTBluetooth/Example/ChatCell.swift index 2276150..6ab131c 100644 --- a/IOTBluetooth/IOTBluetooth/Example/ChatCell.swift +++ b/IOTBluetooth/IOTBluetooth/Example/ChatCell.swift @@ -34,7 +34,7 @@ class ChatCell:UITableViewCell{ msgLabel.snp.makeConstraints { make in make.top.bottom.equalToSuperview().inset(5) make.left.right.equalToSuperview().inset(10) - make.width.lessThanOrEqualTo(kScreenWidth - 100) + make.width.lessThanOrEqualTo(kScreenWidth - 180) } } @@ -45,7 +45,7 @@ class ChatCell:UITableViewCell{ var data:IBAiResponse!{ didSet{ if data.type == 1 { - bgView.backgroundColor = .lightGray + bgView.backgroundColor = .systemGreen bgView.snp.remakeConstraints { make in make.top.bottom.equalToSuperview().inset(10) // make.width.lessThanOrEqualTo(kScreenWidth - 40) @@ -53,14 +53,14 @@ class ChatCell:UITableViewCell{ } } else{ - bgView.backgroundColor = .systemGreen + bgView.backgroundColor = .lightGray bgView.snp.remakeConstraints { make in make.top.bottom.equalToSuperview().inset(10) // make.width.lessThanOrEqualTo(kScreenWidth - 40) make.left.equalToSuperview().inset(20) } } - msgLabel.text = data.value + msgLabel.text = data.totalContent } } } diff --git a/IOTBluetooth/IOTBluetooth/Example/ChatViewController.swift b/IOTBluetooth/IOTBluetooth/Example/ChatViewController.swift index 82bfb4f..14ad7c1 100644 --- a/IOTBluetooth/IOTBluetooth/Example/ChatViewController.swift +++ b/IOTBluetooth/IOTBluetooth/Example/ChatViewController.swift @@ -38,6 +38,7 @@ class ChatViewController: UIViewController{ tableView.delegate = self tableView.dataSource = self tableView.estimatedRowHeight = 60 + tableView.separatorStyle = .none tableView.register(ChatCell.self, forCellReuseIdentifier: ChatCell.ID) view.addSubview(tableView) tableView.snp.makeConstraints { make in @@ -51,11 +52,19 @@ class ChatViewController: UIViewController{ IBAiManager.shared.aiResponse = {[weak self] response in print(response.description) guard let self = self else {return} - if response.state == "end",response.type != 0 { - list.append(response) + if response.type == 1 || response.type == 2{ + if let model = list.last,model.reponseId == response.reponseId { + list.removeLast() + list.append(response) + } + else{ + list.append(response) + } tableView.reloadData() + if list.count > 0 { + tableView.scrollToRow(at: IndexPath(row: list.count - 1, section: 0), at: .none, animated: true) + } } - } // let chat = MixSdk.shared.chat diff --git a/IOTBluetooth/IOTBluetooth/IOTBluetooth.xcworkspace/xcuserdata/yaozuopan.xcuserdatad/UserInterfaceState.xcuserstate b/IOTBluetooth/IOTBluetooth/IOTBluetooth.xcworkspace/xcuserdata/yaozuopan.xcuserdatad/UserInterfaceState.xcuserstate index 4d1d74d..e104e4a 100644 Binary files a/IOTBluetooth/IOTBluetooth/IOTBluetooth.xcworkspace/xcuserdata/yaozuopan.xcuserdatad/UserInterfaceState.xcuserstate and b/IOTBluetooth/IOTBluetooth/IOTBluetooth.xcworkspace/xcuserdata/yaozuopan.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/IOTBluetooth/IOTBluetooth/IOTBluetooth.xcworkspace/xcuserdata/yaozuopan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/IOTBluetooth/IOTBluetooth/IOTBluetooth.xcworkspace/xcuserdata/yaozuopan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index d097835..a447329 100644 --- a/IOTBluetooth/IOTBluetooth/IOTBluetooth.xcworkspace/xcuserdata/yaozuopan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/IOTBluetooth/IOTBluetooth/IOTBluetooth.xcworkspace/xcuserdata/yaozuopan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -3,4 +3,22 @@ uuid = "DE90D99F-11DF-48BC-9070-3AF484DDB28C" type = "0" version = "2.0"> + + + + + + diff --git a/IOTBluetooth/IOTBluetooth/IOTBluetooth/IBAiManager.swift b/IOTBluetooth/IOTBluetooth/IOTBluetooth/IBAiManager.swift index 6674eb3..9f0e16b 100644 --- a/IOTBluetooth/IOTBluetooth/IOTBluetooth/IBAiManager.swift +++ b/IOTBluetooth/IOTBluetooth/IOTBluetooth/IBAiManager.swift @@ -20,13 +20,11 @@ public class IBAiManager{ public var chatGptKey:String = "" public var aiResponse:((_ response:IBAiResponse) -> Void)? - - var audioData = Data() - + + var responseId = "" var reply = "" - init(){ MixSdk.shared.isDebug = true setupChatCallBack() @@ -97,14 +95,16 @@ public class IBAiManager{ .parameters([]) .response {[weak self] result in guard let self = self else {return} + responseId = "\(Date().timeIntervalSince1970)" if result.isSuccess,let data = result.value as? Data{ receiveAiData(sbcData: data) } else{ Logger.log(result) - let model = IBAiResponse() + let model = IBAiResponse(responseId) model.type = 0 model.state = "end" + model.content = "录音解析错误" sendRelpy(model: model) } } @@ -115,9 +115,10 @@ extension IBAiManager{ let pcmData = MSAudioConvert.sbcTopcm(sbcData) if pcmData.count == 0{ Logger.log("sbc2pcm失败") - let model = IBAiResponse() + let model = IBAiResponse(responseId) model.type = 0 model.state = "end" + model.content = "语音识别失败" sendRelpy(model: model) return } @@ -126,19 +127,21 @@ extension IBAiManager{ guard let self = self else {return} if let text = text,text.count > 0{ Logger.log(text) - let model = IBAiResponse() + let model = IBAiResponse(responseId) model.type = 1 - model.value = text + model.content = text model.state = "end" + model.totalContent = text sendRelpy(model: model) - + responseId = "\(Date().timeIntervalSince1970)" MixSdk.shared.chat.send(content: text) } else{ Logger.log(error ?? "") - let model = IBAiResponse() - model.type = 0 + let model = IBAiResponse(responseId) + model.type = 3 model.state = "end" +// model.value = "语音识别错误" sendRelpy(model: model) } } @@ -155,19 +158,19 @@ extension IBAiManager{ reply = "" } else if model.type == "end" { - let model = IBAiResponse() - model.type = 2 - model.value = reply + let model = IBAiResponse(responseId) + model.type = 4 model.state = "end" - self.aiResponse?(model) -// sendRelpy(model: model) + model.totalContent = reply + sendRelpy(model: model) } else if model.type == "middle"{ reply += model.content ?? "" - let data = IBAiResponse() + let data = IBAiResponse(responseId) data.state = "middle" data.type = 2 - data.value = model.content ?? "" + data.content = model.content ?? "" + data.totalContent = reply sendRelpy(model: data) } } diff --git a/IOTBluetooth/IOTBluetooth/IOTBluetooth/IBChecker.swift b/IOTBluetooth/IOTBluetooth/IOTBluetooth/IBChecker.swift index cec406b..4851c5b 100644 --- a/IOTBluetooth/IOTBluetooth/IOTBluetooth/IBChecker.swift +++ b/IOTBluetooth/IOTBluetooth/IOTBluetooth/IBChecker.swift @@ -110,7 +110,7 @@ struct IBAiReponseChecker: IBChecker { Logger.log(value.description) var data = [value.type.byte] - if let value = value.value.data(using: .utf8),!value.isEmpty { + if let value = value.content.data(using: .utf8),!value.isEmpty { data += value.count.byte2 data += value.bytes } diff --git a/IOTBluetooth/IOTBluetooth/IOTBluetooth/Models/IBAiResponse.swift b/IOTBluetooth/IOTBluetooth/IOTBluetooth/Models/IBAiResponse.swift index 7ec3331..d30f040 100644 --- a/IOTBluetooth/IOTBluetooth/IOTBluetooth/Models/IBAiResponse.swift +++ b/IOTBluetooth/IOTBluetooth/IOTBluetooth/Models/IBAiResponse.swift @@ -8,17 +8,29 @@ import Foundation /// Ai回应模型 public class IBAiResponse { - /// 类型,0:AI回应错误 1:AI录音解析内容 2:AI回应内容(类型为0时,只发类型即可,后面字节均不发) + /// 类型, + /// 0:AI录音解析错误(只发类型即可,后面字节均不发) + /// 1:AI录音解析内容 + /// 2:AI回应内容 + /// 3:AI回应错误(只发类型即可,后面字节均不发) + /// 4:AI回应结束(只发类型即可,后面字节均不发) public var type: Int = 0 - /// 内容 - public var value: String = "" - /// 类型 start middle end public var state:String = "" - public init() { } + /// 回复id + public var reponseId: String = "" + /// 内容 + public var content: String = "" + /// 累积内容 + public var totalContent: String = "" + + + init(_ reponseId:String) { + self.reponseId = reponseId + } public var description: String { - return "IBAiResponse(type: \(type), value:\(value), state:\(state)" + return "IBAiResponse(type: \(type), state:\(state), content:\(content))" } }