|
|
@ -662,7 +662,7 @@ object AgentService : CoroutineScope { |
|
|
val responseBuilder = StringBuilder() |
|
|
val responseBuilder = StringBuilder() |
|
|
var aiMetadata:String = "" |
|
|
var aiMetadata:String = "" |
|
|
var userMetadata = JSONObject() |
|
|
var userMetadata = JSONObject() |
|
|
|
|
|
var nobroadcast = false |
|
|
// 如果有图片,添加图片信息到元数据 |
|
|
// 如果有图片,添加图片信息到元数据 |
|
|
if (hasImage) { |
|
|
if (hasImage) { |
|
|
userMetadata.put("hasImage", true) |
|
|
userMetadata.put("hasImage", true) |
|
|
@ -717,7 +717,7 @@ object AgentService : CoroutineScope { |
|
|
callback = object : OpenAIService.StreamCallback { |
|
|
callback = object : OpenAIService.StreamCallback { |
|
|
override fun onToken(token: String) { |
|
|
override fun onToken(token: String) { |
|
|
responseBuilder.append(token) |
|
|
responseBuilder.append(token) |
|
|
if (speakResponse) { |
|
|
if (speakResponse && !nobroadcast) { |
|
|
ttsService?.speakStream(token) |
|
|
ttsService?.speakStream(token) |
|
|
} |
|
|
} |
|
|
// 发送流式回复token |
|
|
// 发送流式回复token |
|
|
@ -748,8 +748,6 @@ object AgentService : CoroutineScope { |
|
|
|
|
|
|
|
|
// 保存聊天记录 |
|
|
// 保存聊天记录 |
|
|
saveChatMessage(displayText, response,aiMetadata,userMetadata.toString()) |
|
|
saveChatMessage(displayText, response,aiMetadata,userMetadata.toString()) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 标记AI流式输出已完成 |
|
|
// 标记AI流式输出已完成 |
|
|
@ -792,7 +790,9 @@ object AgentService : CoroutineScope { |
|
|
"result" to functionCallResult.toString(), |
|
|
"result" to functionCallResult.toString(), |
|
|
)) |
|
|
)) |
|
|
Log.d(TAG, "mcp调用结果: $functionCallResult") |
|
|
Log.d(TAG, "mcp调用结果: $functionCallResult") |
|
|
aiMetadata = autoHandleFcunCallResult(functionCallResult); |
|
|
val (metestr, broadcast)= autoHandleFcunCallResult(functionCallResult); |
|
|
|
|
|
aiMetadata = metestr; |
|
|
|
|
|
nobroadcast = broadcast |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
) |
|
|
) |
|
|
@ -1108,8 +1108,9 @@ object AgentService : CoroutineScope { |
|
|
/* |
|
|
/* |
|
|
* 自动播放音乐 |
|
|
* 自动播放音乐 |
|
|
* */ |
|
|
* */ |
|
|
fun autoHandleFcunCallResult(functionCallResult: JSONObject): String{ |
|
|
fun autoHandleFcunCallResult(functionCallResult: JSONObject): Pair<String, Boolean>{ |
|
|
val metaStr = functionCallResult.optString("meta") |
|
|
val metaStr = functionCallResult.optString("meta") |
|
|
|
|
|
var broadcast = false; |
|
|
if (metaStr.isNotEmpty()) { |
|
|
if (metaStr.isNotEmpty()) { |
|
|
val meta = JSONObject(metaStr) |
|
|
val meta = JSONObject(metaStr) |
|
|
// Log.d(TAG, "mcp调用结果: $metaStr") |
|
|
// Log.d(TAG, "mcp调用结果: $metaStr") |
|
|
@ -1122,6 +1123,7 @@ object AgentService : CoroutineScope { |
|
|
val sgener = cardMusic.optString("sgener", "") |
|
|
val sgener = cardMusic.optString("sgener", "") |
|
|
val image = cardMusic.optString("image", "") |
|
|
val image = cardMusic.optString("image", "") |
|
|
processMusicPlay(mapOf("id" to id,"url" to url, "title" to name, "artist" to sgener,"coverUrl" to image)) |
|
|
processMusicPlay(mapOf("id" to id,"url" to url, "title" to name, "artist" to sgener,"coverUrl" to image)) |
|
|
|
|
|
broadcast = true; |
|
|
}else if (meta.has("card_musiclist")) { //音乐列表 |
|
|
}else if (meta.has("card_musiclist")) { //音乐列表 |
|
|
val cardMusiclist = meta.getJSONObject("card_musiclist") |
|
|
val cardMusiclist = meta.getJSONObject("card_musiclist") |
|
|
val musics = cardMusiclist.optJSONArray("musics") |
|
|
val musics = cardMusiclist.optJSONArray("musics") |
|
|
@ -1138,6 +1140,7 @@ object AgentService : CoroutineScope { |
|
|
} |
|
|
} |
|
|
if (playlist.isNotEmpty()) { |
|
|
if (playlist.isNotEmpty()) { |
|
|
Log.w(TAG, "自动播放音乐列表 ${playlist}") |
|
|
Log.w(TAG, "自动播放音乐列表 ${playlist}") |
|
|
|
|
|
broadcast = true; |
|
|
processMusicPlayList(playlist) |
|
|
processMusicPlayList(playlist) |
|
|
} else { |
|
|
} else { |
|
|
Log.w(TAG, "card_musiclist 中没有有效的音乐条目") |
|
|
Log.w(TAG, "card_musiclist 中没有有效的音乐条目") |
|
|
@ -1149,11 +1152,12 @@ object AgentService : CoroutineScope { |
|
|
val cardNavigation = meta.getJSONObject("card_navigation") |
|
|
val cardNavigation = meta.getJSONObject("card_navigation") |
|
|
val start = cardNavigation.optString("start", "") |
|
|
val start = cardNavigation.optString("start", "") |
|
|
val end = cardNavigation.optString("end", "") |
|
|
val end = cardNavigation.optString("end", "") |
|
|
|
|
|
broadcast = true; |
|
|
processNavigation(start,end); |
|
|
processNavigation(start,end); |
|
|
} |
|
|
} |
|
|
return metaStr; |
|
|
return Pair(metaStr, broadcast); |
|
|
} |
|
|
} |
|
|
return ""; |
|
|
return Pair("", false); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
|