【小白课程】openKylin AI子系统—AI SDK功能详解
目前AI技术迅猛发展,已成为全球技术研究的焦点,越来越多的开发者投入到人工智能技术的学习和应用中。openKylin作为中国领先的开源操作系统根社区,积极布局探索AI+OS深度融合技术。在AISubsystem SIG组的主导下,打造AI子系统,通过SDK的方式为AI应用提供能力。
社区开发者可通过AI SDK提供的接口将AI能力集成到应用中。这种方式有助于开发者便捷的集成和调用,同时也支持大家根据AI SDK开发openKylin AI应用。下面,我们将重点介绍AI SDK,包括其特性介绍和使用方法等。
一、openKylin AI子系统技术框架
openKylin AI子系统包括AI SDK和Runtime两部分,其整体架构如下所示:
openKylin AI子系统整体采用C-S架构进行设计,应用通过AI SDK的API与Runtime进行交互。Runtime负责对接端侧和云端大模型,提供AI能力,未来还会丰富更多的场景化服务。 此外,Runtime还通过AI引擎代理与具体的大模型进行交互,通过插件化设计AI引擎代理,未来可方便地适配更多的大模型,而无需修改系统的核心逻辑。 而任务管理模块则负责管理调度每个AI相关的任务,合理分配任务线程,控制系统功耗情况。未来将会接入分级冻结机制,实现更好的资源分配。
二、openKylin AI SDK特性介绍
1. 提供C语言接口
openKylin AI SDK将AI能力统一抽象封装为C语言接口,屏蔽了各个大模型的接口差异,开发者甚至不需要有AI相关的知识储备即可完成AI能力的集成,降低了使用门槛,目前均支持异步接口。
2. 支持模型切换
openKylin AI SDK默认提供端侧模型和云端模型的能力,云端包括百度和科大讯飞等厂商,开发者可根据需求进行切换,也可以通过AI助手的模型配置界面进行配置。
3. 支持AI引擎订制
openKylin AI SDK中所有的AI能力通过插件的形式进行集成,开发者可根据自身的需求实现具体的插件完成模型对接。
三、openKylin AI SDK能力介绍
1. 自然语言处理
提供了基础的文本对话能力,内置了多种提示词,开发者不需要编写具体的提示词,通过指定提示词模板id即可,包括中英文翻译、文本扩写、文本润色、内容质检、邮件回复、总结概括、工作总结、代码生成和会议信息提取等,提供了10个主要接口。
2. 图像处理
提供了文生图和OCR等能力,共计12个主要接口。
3. 音频处理
包括语音合成/识别等能力,共计16个主要接口。
4. 模型配置功能
支持设置AI能力使用的模型、设置模型的具体配置信息等,共计8个主要接口。
四、openKylin AI SDK使用方法
1.AI基础能力使用
安装开发包 配置CMakeLists.txt 使用AI能力sudo apt-get install libkylin-ai-base-dev
find_package(PkgConfig REQUIRED)pkg_check_modules(AIBASE kylin-ai-base)include_directories(${AIBASE_INCLUDE_DIRS})target_link_libraries(TestSDK ${AIBASE_LIBRARIES})
#include <kylin-ai/base.h>
#include <kylin-ai/config.h>
// 自然语言处理
NlpSession session;
int ret = nlp_create_session(&session);
std::cout << "Create nlp session ret: " << ret << std::endl;
ret = nlp_init_session(session);
std::cout << "Init nlp session ret: " << ret << std::endl;
nlp_set_result_callback(session, [](NlpTextData text_data, void* user_data) {
std::cout << "Nlp result: " << text_data.text << std::endl;
}, nullptr);
nlp_text_chat_async(session, "你是谁?");
// 音频处理
SpeechSession session;
int ret = speech_create_session(&session);
std::cout << "Create speech session ret: " << ret << std::endl;
ret = speech_init_session(session);
std::cout << "Init speech session ret: " << ret << std::endl;
speech_set_recognized_callback(session, [](RecognitionResult text, void* user_data) {
std::cout << "Recognized: " << text.text_data << "Error: " << text.error_code << std::endl;
}, nullptr);
std::vector<char> data = readAudioData("/path/to/pcm");
speech_recognize_once_async(session, "", data.data(), data.size());
// 图像处理
VisionSession session;
int ret = vision_create_session(&session);
std::cout << "Create vision session ret: " << ret << std::endl;
ret = vision_init_session(session);
std::cout << "Init vision session ret: " << ret << std::endl;
vision_set_prompt2image_callback(session, [](VisionImageData image_data, void* user_data){
std::cout << "Vision callback " << image_data.data_size << " Error:" << image_data.error_code << std::endl;
}, nullptr);
ret = vision_prompt2image_async(session, "向日葵");
// 模型配置
std::string config = R"(
{
"appId": "xxxx",
"apiKey": "xxxx",
"secretKey": "xxxx"
}
)";
int setConfigRet = capability_settings_set_model_config(
CAPABILITY_NLP, PUBLIC_CLOUD, "baidu", config.c_str());
std::cout << "Set baidu vision config ret: " << setConfigRet << std::endl;
setConfigRet = capability_settings_set_model(CAPABILITY_NLP, PUBLIC_CLOUD, "baidu");
std::cout << "Set baidu vision model ret: " << setConfigRet << std::endl;setConfigRet = capability_settings_set_model(CAPABILITY_NLP, PUBLIC_CLOUD, "baidu");std::cout << "Set baidu vision model ret: " << setConfigRet << std::endl;
2.AI引擎订制
注意:AI引擎开发接口目前尚未趋于稳定,后续可能会进行变动
安装开发包 配置CMakeLists.txt 云端引擎实现 五、openKylin AI SDK后续规划sudo apt-get install libkylin-ai-engine-dev
find_package(KylinAiEngine CONFIG REQUIRED)kylin_ai_add_engine_plugin(test-engine-plugin LARGE_MODEL xx.cpp)
#include <kylin-ai/ai-engine/large-model/aiengine.h>
class TestAiEngine : public ai_engine::lm::AbstractAiEnginePluginFactory {
public:
std::string engineName() const override;
std::vector<ai_engine::lm::AiCapability> aiCapabilities() const override;
std::unique_ptr<ai_engine::lm::nlp::AbstractNlpEngine> createNlpEngine() override;
std::unique_ptr<ai_engine::lm::speech::AbstractSpeechEngine> createSpeechEngine() override;
std::unique_ptr<ai_engine::lm::vision::AbstractVisionEngine> createVisionEngine() override ;
};
AI_LARGE_MODEL_ENGINE_FACTORY(TestAiEngine);
class TestNlpEngine : public ai_engine::lm::nlp::AbstractCloudNlpEngine {
public:
void setConfig(const std::string &config) override;
void setChatResultCallback(ai_engine::lm::nlp::ChatResultCallback callback) override;
void setContextSize(int size) override;
void clearContext() override;
bool initChatModule(ai_engine::lm::EngineError &error) override;
bool chat(const std::string &message, ai_engine::lm::EngineError &error) override;
void stopChat() override;
bool destroyChatModule(ai_engine::lm::EngineError &error) override;
}
class TestSpeechEgine : ...
class TestVisionEngine : ...
六、项目地址
https://gitee.com/openkylin/kylin-ai-sdk
https://gitee.com/openkylin/kylin-ai-runtime
https://gitee.com/openkylin/kylin-ai-engine