Ana içeriğe geç

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.

Animated workflow

AI asking request lifecycle

A request may receive its identifier synchronously or through a callback, followed by streamed answer updates and one terminal callback.

Host app

Validate Question

Trim the input and reject an empty prompt before creating a request.

Host app

Configure Agent

Optionally select the provider-specific agent identifier.

AI service

Send Question

Call AIBudsAISDK.send and retain any synchronously returned identifier.

Start callback

Start Answering

Capture the question identifier when the provider starts answering.

AI service → app

Stream Answer

Prefer fullText when present; otherwise append the deltaText update.

delta or full text
Authoritative result

Finish or Fail

Re-enable UI and close request state from the terminal callback.

Treat onFinishAnswering or onError as terminal; isFinal only marks the final answer update.

Ö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 AIAskingServiceAPI protokolü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

AI ile geliştirin

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.
Resmî beceriyi görüntüle

API Reference

Framework

AIBudsAI.xcframework

Import

Swift
import AIBudsAI
import AIBudsAIFoundation

Declaration

Swift
/// 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?

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
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 ?? 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çin onFinishAnswering öğesini kullanın.
  • Servis sağlayıcı fullText, deltaText veya ikisini birden verebilir. Birikmiş metni yinelememek için fullText öğesini tercih edin.
  • Genel API şu anda etkin soru isteğini iptal eden bir yöntem sunmaz.