AI Soru-Cevap
Seçilen AI servis sağlayıcısına metin biçiminde soru gönderin, geri çağrıları dönen soru tanımlayıcısıyla eşleştirin ve birikimli ya da parça parça gelen yanıt metnini gösterin.
AI asking request lifecycle
A request may receive its identifier synchronously or through a callback, followed by streamed answer updates and one terminal callback.
Ön Koşullar
AIBudsAISDK'yi başlatın, kayıtlı bir servis sağlayıcı seçin ve gerekiyorsa kimlik doğrulamayı tamamlayın.- Seçilen servis sağlayıcının
AIAskingServiceAPIprotokolünü uyguladığını doğrulayın. - Geri çağrıların tetiklediği arayüz işlerini ana kuyruğa gönderin.
AI desteğiyle uygulayın
Bu iş akışını AI ile uygulayın
Resmî “AIBuds AI Soru-Cevabını Uygulama” becerisini kullanarak iş akışını uygulamanıza uyarlayın.
https://docs-aibuds.github.io/tr/skills/implement-aibuds-ai-asking adresini okuyup yönergeleri izleyin. Bu beceriyle “AIBuds AI Soru-Cevabını Uygulama” iş akışını iOS projesinde uygulayıp doğrulayın.API Reference
Framework
AIBudsAI.xcframework
Import
- Swift
- Objective-C
import AIBudsAI
import AIBudsAIFoundation#import <AIBudsAI/AIBudsAI-Swift.h>Declaration
- Swift
- Objective-C
/// Sends a text question to the currently selected AI service and receives
/// the answer as a stream of updates.
///
/// - Parameters:
/// - question: The question or prompt to send.
/// - config: Configuration for the request. Defaults to `.default`.
/// - onStartAnswering: Called when the service starts answering. The
/// question identifier may be `nil` if it has not yet been assigned.
/// - onAnswer: Called for each answer update.
/// - questionId: The identifier of the question being answered.
/// - deltaText: Newly generated text in this update, if available.
/// - fullText: The accumulated answer text, if available.
/// - isFinal: `true` when this is the final answer update.
/// - onFinishAnswering: Called when answering finishes successfully.
/// - onError: Called when validation fails or the provider reports an error.
/// - Returns: The question identifier when the request is created; otherwise `nil`.
public static func send(question: String,
config: AIAskingConfig = .default,
onStartAnswering: ((_ questionId: String?) -> Void)? = nil,
onAnswer: ((
_ questionId: String,
_ deltaText: String?,
_ fullText: String?,
_ isFinal: Bool
) -> Void)? = nil,
onFinishAnswering: ((_ questionId: String) -> Void)? = nil,
onError: ((_ questionId: String, _ error: Error) -> Void)? = nil) -> String?/// Sends a text question and streams answer updates.
///
/// - Parameters:
/// - question: The question or prompt to send.
/// - config: Configuration for this request.
/// - onStartAnswering: Called when the provider starts answering.
/// - onAnswer: Returns the question ID, delta text, accumulated text, and
/// whether this is the final answer update.
/// - onFinishAnswering: Called when answering finishes successfully.
/// - onError: Called for synchronous validation or provider errors.
/// - Returns: The question identifier when created; otherwise `nil`.
+ (NSString * _Nullable)sendQuestion:(NSString * _Nonnull)question
config:(AIBudsAIAskingConfig * _Nonnull)config
onStartAnswering:(void (^ _Nullable)(NSString * _Nullable))onStartAnswering
onAnswer:(void (^ _Nullable)(NSString * _Nonnull, NSString * _Nullable, NSString * _Nullable, BOOL))onAnswer
onFinishAnswering:(void (^ _Nullable)(NSString * _Nonnull))onFinishAnswering
onError:(void (^ _Nullable)(NSString * _Nonnull, NSError * _Nonnull))onError;send ve AIAskingConfig başvurularına bakın.
Yapılandırma
AIAskingConfig.specifiedAgent isteğe bağlıdır ve servis sağlayıcıya özeldir. Sağlayıcının olağan araç seçimini kullanmak için nil bırakın. Demo'daki araç tanımlayıcısının başka hesap veya sağlayıcıda geçerli olduğunu varsaymayın.
Kullanım Örnekleri
Örnekler AIAskingDemoController akışını izler: tam birikimli yanıtı veya değişiklik parçasını kabul eder, boş olmayan son soru tanımlayıcısını korur ve son yanıt güncellemesini isteğin tamamlanmasından ayırır.
- Swift
- Objective-C
let question = input.trimmingCharacters(in: .whitespacesAndNewlines)
guard !question.isEmpty else { return }
let config = AIAskingConfig()
config.specifiedAgent = selectedAgentID
var activeQuestionID: String?
var answer = ""
let returnedID = AIBudsAISDK.send(
question: question,
config: config,
onStartAnswering: { questionID in
DispatchQueue.main.async {
activeQuestionID = questionID ?? activeQuestionID
}
},
onAnswer: { questionID, deltaText, fullText, isFinal in
DispatchQueue.main.async {
activeQuestionID = questionID
if let fullText {
answer = fullText
} else if let deltaText {
answer += deltaText
}
render(answer: answer, isFinalUpdate: isFinal)
}
},
onFinishAnswering: { questionID in
DispatchQueue.main.async {
activeQuestionID = questionID
setAsking(false)
}
},
onError: { questionID, error in
DispatchQueue.main.async {
if !questionID.isEmpty { activeQuestionID = questionID }
setAsking(false)
show(error)
}
}
)
activeQuestionID = returnedID ?? activeQuestionIDNSString *question =
[self.input stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet];
if (question.length == 0)
return;
AIBudsAIAskingConfig *config = [[AIBudsAIAskingConfig alloc] init];
config.specifiedAgent = self.selectedAgentID;
__block NSString *activeQuestionID = nil;
__block NSString *answer = @"";
NSString *returnedID = [AIBudsAISDK sendQuestion:question
config:config
onStartAnswering:^(NSString *questionID) {
dispatch_async(dispatch_get_main_queue(), ^{
activeQuestionID = questionID ?: activeQuestionID;
});
}
onAnswer:^(NSString *questionID, NSString *deltaText, NSString *fullText, BOOL isFinal) {
dispatch_async(dispatch_get_main_queue(), ^{
activeQuestionID = questionID;
answer = fullText ?: [answer stringByAppendingString:deltaText ?: @""];
[self renderAnswer:answer isFinalUpdate:isFinal];
});
}
onFinishAnswering:^(NSString *questionID) {
dispatch_async(dispatch_get_main_queue(), ^{
activeQuestionID = questionID;
[self setAsking:NO];
});
}
onError:^(NSString *questionID, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (questionID.length > 0)
activeQuestionID = questionID;
[self setAsking:NO];
[self showError:error];
});
}];
activeQuestionID = returnedID ?: activeQuestionID;Hata Yönetimi
İstek oluşturulmadan önce doğrulama başarısız olursa send, nil döndürüp onError öğesini eşzamanlı çağırabilir. Bu durumda hata geri çağrısındaki soru tanımlayıcısı boştur. İstek etkinken yinelenen gönderimi engelleyin ve arayüz durumunu iki nihai geri çağrıdan da geri yükleyin.
Notlar
isFinal, akıştaki son yanıt güncellemesini belirtir; başarılı istek tamamlanması içinonFinishAnsweringöğesini kullanın.- Servis sağlayıcı
fullText,deltaTextveya ikisini birden verebilir. Birikmiş metni yinelememek içinfullTextöğesini tercih edin. - Genel API şu anda etkin soru isteğini iptal eden bir yöntem sunmaz.