AI Sohbeti
Desteklenen aygıtın başlattığı AI sesli sohbet oturumunu çalıştırın, diyalog verilerini ve intent'leri alın; gerektiğinde kodu çözülmüş PCM sesini etkin servis sağlayıcı oturumuna yönlendirin.
AIChatEventType olaylarını yorumlamak için AI Oturum Olayları, algılanan eylemleri çalıştırmadan önce doğrulamak için AI Intent Tanımları sayfasını kullanın.
Device-driven AI chat lifecycle
The device requests an AI chat and declares whether speech will arrive through Opus or an app-side SCO recording. Keep the device and AI session states coordinated until the final report arrives.
Ön Koşullar
AIBudsAISDKbaşlatılmış, aygıt bilgileri yapılandırılmış ve kayıtlı bir servis sağlayıcı seçilip doğrulanmıştır.- Servis sağlayıcı
AIChatServiceAPIdesteği sunar. - Aygıt AI sohbet oturumu olaylarını iletir ve Opus girişi için
DeviceAIChatAPIprotokolüne uyar. - Ses kanalını uygulamada bağımsız seçmek yerine aygıt olayındaki istekten okuyun.
AI desteğiyle uygulayın
Bu iş akışını AI ile uygulayın
Resmî “AIBuds AI Sohbetini Uygulama” becerisini kullanarak iş akışını uygulamanıza uyarlayın.
https://docs-aibuds.github.io/tr/skills/implement-aibuds-ai-chat adresini okuyup yönergeleri izleyin. Bu beceriyle “AIBuds AI Sohbetini Uygulama” iş akışını iOS projesinde uygulayıp doğrulayın.API Reference
Framework
AIBudsAI.xcframework
Import
- Swift
- Objective-C
import AIBuds
import AIBudsAI
import AIBudsAIFoundation#import <AIBuds/AIBuds-Swift.h>
#import <AIBudsAI/AIBudsAI-Swift.h>Declaration
- Swift
- Objective-C
/// Starts an AI chat session.
/// - Parameters:
/// - config: The chat session configuration.
/// - onStartSuccess: Called with the active session.
/// - onStartFailure: Called when the session cannot start.
/// - onChatData: Called when new conversational data arrives.
/// - onIntent: Called when the provider detects an intent.
/// - onVoiceData: Called when voice data is produced.
/// - onEvent: Called for session-level events.
/// - onError: Called for runtime session errors.
/// - onFinish: Called with the final session report.
public static func startAIChat(_ config: AIChatSessionConfig = .default,
onStartSuccess: ((_ session: AIChatSessionConvertible) -> Void)? = nil,
onStartFailure: ((_ error: Error) -> Void)? = nil,
onChatData: ((_ chatData: AIChatDataModel) -> Void)? = nil,
onIntent: ((_ intent: AIChatIntentModel) -> Void)? = nil,
onVoiceData: ((_ voiceData: AIChatVoiceDataModel) -> Void)? = nil,
onEvent: ((_ event: AIChatEventModel) -> Void)? = nil,
onError: ((_ error: NSError) -> Void)? = nil,
onFinish: ((_ report: AIChatSessionReportModel) -> Void)? = nil) -> Void
/// Stops the active AI chat session. This is safe when no session is active.
public static func stopAIChat()/// Starts an AI chat session.
/// - Parameters:
/// - config: The chat session configuration.
/// - onStartSuccess: Called with the active session.
/// - onStartFailure: Called when the session cannot start.
/// - onChatData: Called when new conversational data arrives.
/// - onIntent: Called when the provider detects an intent.
/// - onVoiceData: Called when voice data is produced.
/// - onEvent: Called for session-level events.
/// - onError: Called for runtime session errors.
/// - onFinish: Called with the final session report.
+ (void)startAIChatWithConfig:(AIBudsAIChatSessionConfig * _Nonnull)config
onStartSuccess:(void (^ _Nullable)(id <AIBudsAIChatSessionConvertible> _Nonnull))onStartSuccess
onStartFailure:(void (^ _Nullable)(NSError * _Nonnull))onStartFailure
onChatData:(void (^ _Nullable)(AIBudsAIChatDataModel * _Nonnull))onChatData
onIntent:(void (^ _Nullable)(AIBudsAIChatIntentModel * _Nonnull))onIntent
onVoiceData:(void (^ _Nullable)(AIBudsAIChatVoiceDataModel * _Nonnull))onVoiceData
onEvent:(void (^ _Nullable)(AIBudsAIChatEventModel * _Nonnull))onEvent
onError:(void (^ _Nullable)(NSError * _Nonnull))onError
onFinish:(void (^ _Nullable)(AIBudsAIChatSessionReportModel * _Nonnull))onFinish;
/// Stops the active AI chat session. This is safe when no session is active.
+ (void)stopAIChat;startAIChat ve stopAIChat başvurularına bakın.
Yapılandırma
AIChatSessionConfig, AIChatSettingsController tarafından kullanılan ayarları sunar:
| Özellik | Varsayılan | Amaç |
|---|---|---|
languageForSpeechInput | Uygulama dili | Seçilen sağlayıcının desteklediği, zh-CN gibi tireli konuşma giriş dili. |
audioChannel | .opusInA2dpOut | Sohbet oturumunun ses aktarımı. Oturumu başlatan aygıt olayıyla eşleşmelidir. |
allowUserToInterruptAIResponse | true | Kullanıcı girişinin AI yanıtını, genellikle ses oynatımını, kesip kesemeyeceği. |
maxPauseDurationBeforeAIResponds | 0.8 saniye | AI yanıt vermeden önce izin verilen en uzun konuşma duraklaması. |
autoEndSessionAfterNoInputDuration | 15.0 saniye | Oturum otomatik bitmeden önceki boşta kalma süresi. |
enableVoicePlayback | true | Oluşturulan sesin oynatılıp oynatılmayacağı. |
shouldSaveVoiceForDebugging | false | Tanılama ses verisinin saklanıp saklanmayacağı. Politika açıkça izin vermiyorsa üretimde kapalı tutun. |
additionalOptions | [:] | Sağlayıcıya özgü araç, konuşmacı, plan, istem, intent veya gürültü azaltma seçenekleri. |
autoSelectAgentIfNotSpecified | true | Sağlayıcıya özgü araç verilmediğinde SDK'nın araç seçip seçmeyeceği. |
Sabit kodlanmış sağlayıcı seçenek anahtarları yerine genel AdditionalOptionKey... sabitlerini kullanın.
Sohbet Oturumunu Yapılandırma
Demo, servis sağlayıcı seçimini oturum yapılandırmasından ayrı tutar. Kullanıcı sağlayıcıyı değiştirdiğinde önce onu seçin, desteklenen dilleri sorgulayın ve sohbeti başlatmadan önce uygulama tarafından başlatılan kimlik doğrulamayı tamamlayın. Araç ve konuşmacı kimlikleri, intent kodları, kullanım planları ve başlangıç istemleri sağlayıcı tarafından verilir; Demo'dan evrensel değerler gibi kopyalanmamalıdır.
- Swift
- Objective-C
let vendor: AIServiceVendor = .starBurst
AIBudsAISDK.setAIServiceVendor(vendor)
let supportedLanguages = AIBudsAISDK.allSupportedLanguages(for: vendor)
let language = supportedLanguages.first?.languageCode
var options: [String: Any] = [:]
if let agentID = providerAgentID {
options[AIChatSessionConfig.AdditionalOptionKeyStarburstAgentId] = agentID
}
if let speakerID = providerSpeakerID {
options[AIChatSessionConfig.AdditionalOptionKeyStarburstSpeakerId] = speakerID
}
let config = AIChatSessionConfig(
languageForSpeechInput: language,
audioChannel: .opusInA2dpOut,
allowUserToInterruptAIResponse: true,
maxPauseDurationBeforeAIResponds: 0.8,
autoEndSessionAfterNoInputDuration: 15,
enableVoicePlayback: true,
shouldSaveVoiceForDebugging: false,
additionalOptions: options
)
config.autoSelectAgentIfNotSpecified = providerAgentID == nilAIBudsAIServiceVendor vendor = AIBudsAIServiceVendorStarBurst;
[AIBudsAISDK setAIServiceVendor:vendor];
NSArray<AIBudsAIServiceLanguage *> *supportedLanguages =
[AIBudsAISDK allSupportedLanguagesForVendor:vendor];
NSString *language = supportedLanguages.firstObject.languageCode;
NSMutableDictionary<NSString *, id> *options = [NSMutableDictionary dictionary];
if (self.providerAgentID.length > 0) {
options[AIBudsAIChatSessionConfig.AdditionalOptionKeyStarburstAgentId] = self.providerAgentID;
}
if (self.providerSpeakerID.length > 0) {
options[AIBudsAIChatSessionConfig.AdditionalOptionKeyStarburstSpeakerId] =
self.providerSpeakerID;
}
AIBudsAIChatSessionConfig *config = [[AIBudsAIChatSessionConfig alloc]
initWithLanguageForSpeechInput:language
audioChannel:AIBudsAIChatAudioChannelOpusInA2dpOut
allowUserToInterruptAIResponse:YES
maxPauseDurationBeforeAIResponds:0.8
autoEndSessionAfterNoInputDuration:15.0
enableVoicePlayback:YES
shouldSaveVoiceForDebugging:NO
additionalOptions:options];
config.autoSelectAgentIfNotSpecified = self.providerAgentID.length == 0;.mltcloud için karşılık gelen AdditionalOptionKeyMltCloud... sabitlerini kullanın. StarBurst kullanım planını veya sağlayıcıya özgü tanımlayıcıyı yalnızca sağlayıcı yapılandırmanız geçerli değer veriyorsa ayarlayın.
Kullanım Örnekleri
Aygıt sohbeti genellikle .initiateWithSCO veya .initiateWithOpus ile başlatır. AI sohbetini başlatmadan önce istenen kanalı oturum yapılandırmasına kopyalayın. Opus'ta aygıttan alınan kodu çözülmüş PCM'yi iletin. SCO'da .sco oturumu başlatıldığında aygıt mikrofonu için uygulama tarafındaki SCO kaydı kurulur.
- Swift
- Objective-C
let config = AIChatSessionConfig.default
config.audioChannel = .opusInA2dpOut
config.languageForSpeechInput = "en-US"
AIBudsAISDK.startAIChat(
config,
onStartSuccess: { session in
currentSession = session
},
onStartFailure: { error in
print("Chat start failed: \(error)")
},
onChatData: { chatData in
conversation.append(chatData)
},
onIntent: { intent in
handle(intent)
},
onVoiceData: { voiceData in
handle(voiceData)
},
onEvent: { event in
handle(event)
},
onError: { error in
print(error.localizedDescription)
},
onFinish: { report in
currentSession = nil
save(report)
}
)Aygıt Opus sohbeti için kodu çözülmüş 16 bit PCM sağladığında saklanan oturuma iletin:currentSession?.appendInt16PCM?(decodedPCMData)
AIBudsAIChatSessionConfig *config = [AIBudsAIChatSessionConfig defaultConfig];
config.audioChannel = AIBudsAIChatAudioChannelOpusInA2dpOut;
config.languageForSpeechInput = @"en-US";
[AIBudsAISDK startAIChatWithConfig:config
onStartSuccess:^(id<AIBudsAIChatSessionConvertible> session) {
self.currentSession = session;
}
onStartFailure:^(NSError *error) {
NSLog(@"Chat start failed: %@", error);
}
onChatData:^(AIBudsAIChatDataModel *chatData) {
[self recordChatData:chatData];
}
onIntent:^(AIBudsAIChatIntentModel *intent) {
[self handleIntent:intent];
}
onVoiceData:^(AIBudsAIChatVoiceDataModel *voiceData) {
[self handleVoiceData:voiceData];
}
onEvent:^(AIBudsAIChatEventModel *event) {
[self handleEvent:event];
}
onError:^(NSError *error) {
NSLog(@"%@", error.localizedDescription);
}
onFinish:^(AIBudsAIChatSessionReportModel *report) {
self.currentSession = nil;
[self saveReport:report];
}];Gerektiğinde kodu çözülmüş PCM'yi iletin:[self.currentSession appendInt16PCM:decodedPCMData];
Oturumu Durdurma
Aygıt sonlandırma istediğinde aygıt akışı gerektiriyorsa durdu durumunu DeviceAIChatAPI üzerinden bildirin ve ardından şu çağrıyı yapın:
- Swift
- Objective-C
AIBudsAISDK.stopAIChat()
currentSession = nil[AIBudsAISDK stopAIChat];
self.currentSession = nil;Notlar
- Bu bir ses oturumu API'sidir; metin
sendMessageveya ileti geçmişi API'si değildir. AIChatSessionConvertibleöğesinionFinish, kurtarılamayan hata veya açık durdurmaya kadar saklayın.- SCO oturumlarında AIBuds AI SDK, aygıt mikrofonunu uygulamanın SCO bağlantısı üzerinden kaydeder. Opus oturumlarında aygıt Opus'u uygulamaya gönderir; kodu çözülmüş PCM'yi
appendInt16PCM(_:)ile iletin. - Gizlilik ve saklama politikalarınız açıkça izin vermiyorsa üretimde
shouldSaveVoiceForDebuggingöğesini etkinleştirmeyin.