跳到主要内容

AI 助手(TSAIAssistantInterface)

AI 助手包含两类能力:单次流式文本总结,以及由设备麦克风驱动的多轮 AI 语音对话。

前提条件​

TSAIContext *context = [TSAIKit sharedInstance].activeContext;
id<TSAIAssistantInterface> assistant = context.assistant;

调用前分别查询 TSAIFeatureAISummary 或 TSAIFeatureAIChat。语音对话还要求设备已连接并支持对应音频场景。

数据模型​

文本总结​

模型主要属性说明
TSAISummaryPartialResulttaskId、text累积的流式中间文本
TSAISummaryResulttaskId、text、duration最终总结结果

AI 语音对话​

模型主要属性说明
TSAIChatConfigaudioRouteConfiguration、languageHint、initialPrompt、agentId、speakerId音频路由、会话语言、角色和提示配置
TSAIChatConfigenableVoiceOutput、allowUserInterrupt是否输出语音、是否允许用户打断
TSAIChatConfigsilenceBeforeReplyInterval、autoEndSessionTimeoutVAD 回复等待和会话自动结束时间
TSAIChatContentcontentType、roundIndex、text、isTextFinal问题或回答文本及其终态
TSAIChatContentaudioChunk、audioFormat、isAudioFinal、intent增量音频、音频格式及业务意图
TSAIChatIntenttype、intentId、query、value、valueDictionary结构化设备控制或业务意图
TSAIChatEventeventType、timestampVAD、播放、网络等会话事件
TSAIChatReportstartTime、endTime、roundCount、endReason会话最终报告

使用 [TSAIChatConfig defaultConfig] 创建默认配置。

回调类型​

回调说明
TSAISummaryPartialBlock返回累积总结文本,可调用零次或多次
TSAISummaryCompletionBlock总结成功、失败或取消时调用一次
TSAIChatContentBlock高频返回文本、音频或意图内容
TSAIChatEventBlock返回低频会话生命周期事件
TSAIChatCompletionBlock会话结束时返回报告或错误
TSAIChatStateBlock返回面向 App 的会话状态

文本总结​

- (NSString *)summarizeText:(NSString *)text
onPartialResult:(nullable TSAISummaryPartialBlock)onPartialResult
completion:(nullable TSAISummaryCompletionBlock)completion;

- (void)cancelSummarizeWithTaskId:(NSString *)taskId;
NSString *taskId = [assistant summarizeText:sourceText
onPartialResult:^(TSAISummaryPartialResult *partial) {
TSLog(@"总结中: %@", partial.text);
}
completion:^(TSAISummaryResult *result, NSError *error) {
if (error) {
TSLog(@"总结失败: %@", error.localizedDescription);
return;
}
TSLog(@"总结完成: %@", result.text);
}];

// [assistant cancelSummarizeWithTaskId:taskId];

同步返回的 taskId 由客户端生成,会出现在所有中间结果和最终结果中。超过模型上下文长度时返回参数错误,不会自动截断输入。

AI 语音对话​

- (NSString *)startChatWithConfig:(TSAIChatConfig *)config
onContent:(nullable TSAIChatContentBlock)onContent
onEvent:(nullable TSAIChatEventBlock)onEvent
completion:(nullable TSAIChatCompletionBlock)completion;

- (void)stopChatWithTaskId:(NSString *)taskId;
TSAIChatConfig *config = [TSAIChatConfig defaultConfig];
config.languageHint = @"zh-CN";
config.enableVoiceOutput = YES;
config.audioRouteConfiguration = [TSAIAudioRouteConfiguration defaultConfiguration];

NSString *chatTaskId = [assistant startChatWithConfig:config
onContent:^(TSAIChatContent *content) {
if (content.text.length > 0) {
TSLog(@"AI 对话内容: %@", content.text);
}
}
onEvent:^(TSAIChatEvent *event) {
TSLog(@"AI 对话事件: %ld", (long)event.eventType);
}
completion:^(TSAIChatReport *report, NSError *error) {
if (error) {
TSLog(@"AI 对话结束: %@", error.localizedDescription);
return;
}
TSLog(@"完成 %ld 轮对话", (long)report.roundCount);
}];

// 用户结束时执行优雅停止,已缓冲音频仍会完成处理
// [assistant stopChatWithTaskId:chatTaskId];

对话内部完成设备 AI 激活、麦克风音频接入以及 ASR → LLM → TTS 管线。会话由 VAD 自动分轮,没有自然结束点,必须主动停止或等待 autoEndSessionTimeout。

设备事件与状态监听​

- (void)registerOnAIChatDeviceEvent:(nullable void (^)(TSAIChatDeviceEvent event))deviceEventBlock;
- (void)registerAIChatStateDidChanged:(nullable TSAIChatStateBlock)stateBlock;
[assistant registerOnAIChatDeviceEvent:^(TSAIChatDeviceEvent event) {
if (event == TSAIChatDeviceEventRequestStart) {
TSLog(@"设备请求进入 AI 对话");
}
}];

设备事件只是请求信号,不代表 SDK 会话已自动启动或停止。收到 RequestStart 后调用 startChatWithConfig: 准备会话,但不要立即打开页面;只有 onEvent 收到 TSAIChatEventTypeSessionStarted、确认设备同步成功后才能打开。RequestEnd 对应 stopChatWithTaskId:。

关键枚举​

TSAIChatContentType​

枚举值数值说明
TSAIChatContentTypeUnknown-1未知内容
TSAIChatContentTypeQuestion1用户问题文本
TSAIChatContentTypeAnswer2AI 回答文本
TSAIChatContentTypeAudioChunk3AI 回答的增量音频
TSAIChatContentTypeIntent4设备控制或业务意图

TSAIChatEventType​

枚举值数值说明
TSAIChatEventTypeUnknown-1未知事件
TSAIChatEventTypeSessionStarted1会话已启动
TSAIChatEventTypeUserSpeechStarted2用户开始说话
TSAIChatEventTypeUserSpeechEnded3用户结束说话
TSAIChatEventTypeAIPlaybackStarted4AI 语音开始播放
TSAIChatEventTypeAIPlaybackEnded5AI 语音播放结束
TSAIChatEventTypeAIPlaybackInterrupted6AI 语音播放被打断
TSAIChatEventTypeNetworkError7网络异常
TSAIChatEventTypeBleDisconnected8BLE 设备断连
TSAIChatEventTypeAutoEnding9会话即将自动结束

设备事件、会话状态与结束原因​

枚举枚举值与数值
TSAIChatDeviceEventRequestStart = 0、RequestEnd = 1、Interrupted = 2
TSAIChatStateDeviceClosed = 0、DeviceOpened = 1、Started = 2、Ended = 3、Interrupted = 255
TSAIChatEndReasonUnknown = -1、UserStop = 1、Timeout = 2、Cancelled = 3、Error = 4

表格中省略前缀的值应分别加上对应枚举名,例如 TSAIChatStateStarted。

注意事项​

  1. completion 是任务结束的权威信号,流式回调不替代终态回调。
  2. stopChatWithTaskId: 是优雅停止;未知或已结束的 taskId 调用无副作用。
  3. 页面销毁时注销设备事件和状态监听,避免旧页面继续接收事件。
  4. 音频回调频率较高,不要在回调中执行阻塞 I/O。