|
|
|
@ -28,6 +28,9 @@ import com.deep_voice.speech.tts.TtsEventType |
|
|
|
import com.deep_voice.bytedance_speech.BytedanceTTS |
|
|
|
import java.util.UUID |
|
|
|
import com.yunqiinnovation.agent_service.Utils |
|
|
|
import okhttp3.* |
|
|
|
import okhttp3.MediaType.Companion.toMediaType |
|
|
|
import okhttp3.RequestBody.Companion.toRequestBody |
|
|
|
|
|
|
|
/** |
|
|
|
* 代理服务事件监听接口 |
|
|
|
@ -72,6 +75,9 @@ object AgentService : CoroutineScope { |
|
|
|
|
|
|
|
// 会话ID,用于区分不同聊天上下文 |
|
|
|
private val sessionId = "default_agent" |
|
|
|
// 服务端连接 |
|
|
|
private var serverurl = "" |
|
|
|
private var usertoken = "" |
|
|
|
|
|
|
|
// 历史聊天消息缓存 |
|
|
|
private val historyMessages = JSONArray() |
|
|
|
@ -210,7 +216,9 @@ object AgentService : CoroutineScope { |
|
|
|
config["openaivisionModel"]?.toString() ?: "", |
|
|
|
config["mcpServer"]?.toString() ?: "" |
|
|
|
) |
|
|
|
|
|
|
|
serverurl = config["serverurl"]?.toString() ?: ""; |
|
|
|
usertoken = config["usertoken"]?.toString() ?: ""; |
|
|
|
Log.e(TAG, "liwei -----------读取服务地址和用户token: $serverurl $usertoken") |
|
|
|
|
|
|
|
// 加载最近的聊天记录 |
|
|
|
loadChatHistory() |
|
|
|
@ -783,6 +791,7 @@ object AgentService : CoroutineScope { |
|
|
|
var userMetadata = JSONObject() |
|
|
|
var reply = true; //是否回复 |
|
|
|
var broadcast = true //是否播发 |
|
|
|
|
|
|
|
// 如果有图片,添加图片信息到元数据 |
|
|
|
if (hasImage) { |
|
|
|
userMetadata.put("hasImage", true) |
|
|
|
@ -844,6 +853,26 @@ object AgentService : CoroutineScope { |
|
|
|
currsessionId, |
|
|
|
messagesWithSystemPrompt, |
|
|
|
object : StreamCallback { |
|
|
|
|
|
|
|
override fun onUsage( |
|
|
|
sessionid: String, |
|
|
|
prompt_tokens: Int?, |
|
|
|
completion_tokens: Int?, |
|
|
|
total_tokens: Int? |
|
|
|
) { |
|
|
|
try { |
|
|
|
sendStatisticsEvent( |
|
|
|
mapOf( |
|
|
|
"CHAT_PROMPT_TOKENS" to (prompt_tokens ?: 0), |
|
|
|
"CHAT_COMPLETION_TOKENS" to (completion_tokens ?: 0), |
|
|
|
"CHAT_TOTAL_TOKENS" to (total_tokens ?: 0) |
|
|
|
) |
|
|
|
) |
|
|
|
}catch (e: Exception) { |
|
|
|
Log.e(TAG, "liwei--------------- AI Call onUsage 异常", e) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
override fun onToken(sessionid: String, token: String) { |
|
|
|
try { |
|
|
|
if (sessionid != currsessionId) { |
|
|
|
@ -1634,4 +1663,36 @@ object AgentService : CoroutineScope { |
|
|
|
Log.i(TAG, "启动导航服务失败") |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* |
|
|
|
* 发送统计事件 |
|
|
|
* */ |
|
|
|
fun sendStatisticsEvent(actions:Map<String,Int>) { |
|
|
|
val client = OkHttpClient() |
|
|
|
|
|
|
|
// 外层 JSON 对象 |
|
|
|
val jsonObject = JSONObject() |
|
|
|
val actionsObject = JSONObject() |
|
|
|
|
|
|
|
for ((key, value) in actions) { |
|
|
|
actionsObject.put(key, value) |
|
|
|
} |
|
|
|
|
|
|
|
jsonObject.put("actions", actionsObject) |
|
|
|
|
|
|
|
val json = jsonObject.toString() |
|
|
|
val mediaType = "application/json".toMediaType() |
|
|
|
val body = json.toRequestBody(mediaType) |
|
|
|
|
|
|
|
val request = Request.Builder() |
|
|
|
.url("$serverurl/api/home/user_pushaction") |
|
|
|
.addHeader("Authorization", usertoken) // 添加 Token |
|
|
|
.post(body) |
|
|
|
.build() |
|
|
|
Thread { |
|
|
|
val response = client.newCall(request).execute() |
|
|
|
// println("sendStatisticsEvent Response: ${response.body?.string()}") |
|
|
|
}.start() |
|
|
|
} |
|
|
|
} |