SAPCAI
Swift Package 是一个模块,用于连接到端到端聊天机器人平台 SAP Conversational AI (CAI) 上的机器人。 它提供了一个可插拔的 SwiftUI AssistantView
来启动对话并呈现机器人的各种消息类型。
此 Swift Package 是 SAP BTP SDK for iOS 的一个开源补充。
最新版本
版本 1.0.x
在 SAP Conversational AI 中,您可以通过机器人的“连接”选项卡创建一个移动渠道。
该软件包旨在通过 Swift Package Manager 使用。要将 SAPCAI
添加到您的应用程序目标,请导航到 文件 > 添加包... >。 使用 搜索或输入包 URL 字段,使用存储库 URL https://github.com/SAP/cloud-sdk-ios-cai 找到该软件包。
您可以选择以下软件包产品之一添加到您的应用程序/框架目标。
软件包产品 | 何时使用 |
---|---|
SAPCAI | 您尚未嵌入来自 SAP BTP SDK for iOS 的二进制框架 |
SAPCAI-requiresToEmbedXCFrameworks | 您已经将 SAPCommon 和 SAPFoundation 二进制框架嵌入到您的目标 |
下面的代码片段演示了如何设置 CAIConversation
Combine 发布者来初始化 AssistantView
的 MessagingViewModel
。 对于原型设计,您可以将 iOS 客户端直接连接到 SAP Conversational AI Community Edition。 您必须将尖括号中的变量值(例如 <channelId>
)替换为您机器人特定的值。
请参阅 企业配置 指南,了解使用 SAPCAI
Swift 包并通过 SAP Mobile Services 间接连接到 SAP Conversational AI Enterprise Edition 所需的配置步骤。
import SAPCAI
import SAPFoundation
import SwiftUI
/*
Create the `CAIChannel` object by providing the channel id, channel token, and channel slug of your mobile channel. Values can be looked up in CAI platform.
If you do not want to hardcode channel information on the client, you can retrieve a list of channels for a given Application ID with `CAIChannelService`.
*/
let caiChannel = CAIChannel(id: "<channelId>", token: "<channelToken>", slug: "<channelSlug>")
// Create CAI service config for a SAPURLSession and URL pointing to CAI API endpoint
let serviceConfig = CAIServiceConfig(urlSession: SAPURLSession(), host: URL(string:"<Example: https://api.cai.tools.sap>")!)
// Provide the message delivery object for polling
let polling: MessageDelivering = PollMessageDelivery(channelId: "<channelId>", serviceConfig: serviceConfig)
// Create CAIConversation object and use it as publisher
let dataPublisher = CAIConversation(config: serviceConfig, channel: caiChannel, messageDelivery: polling)
// Create view model for `AssistantView`
let viewModel = MessagingViewModel(publisher: dataPublisher)
使用 SwiftUI 实现是首选方法。
// `NavigationView` must be present in your view hierachy as `AssistantView` makes use of `NavigationLink`
AssistantView()
.navigationTitle(Text("Chat")) // if you are in navigation controller
.environmentObject(viewModel)
.environmentObject(ThemeManager.shared)
.onDisappear {
// you cannot rely on the fact that onDisappear will be called only
// once because `AssistantView` might trigger further navigations
// causing the `AssistantView` to disappear and re-appear.
// Therefore cleanup logic should be handled elsewhere.
})
但 SAPCAI
也提供了一个 UIKit 包装器
let vc = MessagingViewController(MessagingViewModel(publisher: dataPublisher))
self.navigationController?.pushViewController(vc, animated: true)
一旦对话结束,您需要调用以下函数以避免内存泄漏和不必要的网络请求。 否则,MessagingViewModel
也无法被释放。
viewModel.cancelSubscriptions()
dataPublisher.resetConversation()
SAPCAI 使用 SDWebImage
及其图像缓存功能,但如果需要,应用程序开发人员有责任清除缓存。 例子
SDImageCache.shared.clearMemory()
SDImageCache.shared.clearDisk(onCompletion: nil)
SAPCAI
将提供两个标准主题
每个主题都将带有一个支持浅色和深色模式的调色板。
ThemeManager.shared.setCurrentTheme( .fiori(FioriColorPalette()) )
不再维护,因此标记为已弃用。 请勿使用!
ThemeManager.shared.setCurrentTheme( .casual(CasualColorPalette()) )
您还可以提供备用调色板或提供自定义主题。
在 SAP Conversational AI 中,您可以将持久静态菜单选项添加到您的聊天机器人,使用户能够在对话期间的任何时候快速触发链接或技能。
使用 CAIChannelService.loadPreferences
异步获取您的渠道偏好设置(包括持久静态菜单),然后设置 MessagingViewModel.menu
。
service.loadPreferences(channel: channel) { result in
DispatchQueue.main.async {
switch result {
case .success(let data):
viewModel.menu = data?.menu
case .failure:
break
}
}
}
AssistantView
根据 Commonmark 规范 呈现,未知语法将被视为文本。触发技能
按钮仍然启用。 此行为与 SAP CAI Web Client 不同。 一旦您单击按钮或输入内容,则无法在以后的时间点再次触发相应的技能,因为创建它的上下文可能不再有效。请在 GitHub 上提出问题。 SAP 客户可以继续通过 OSS 报告问题以进行 SLA 跟踪。
在 SAP CAI Answers 论坛中提出有关 CAI 的问题。
如果您想做出贡献,请查看贡献指南。
此存储库中的 CAITestApp
允许您
CAIChannelService
的使用以及如何在它之上构建一个简单的 SwiftUI 视图AssistantView
请参阅此处,了解如何维护测试应用程序的连接设置。