NEWS

新闻

了解openKylin最新资讯,关注社区和产品动态。

NEWS

Learn about the latest news.

【小白课程】openKylin AI子系统—AI SDK功能详解

2024-07-11 09:36:09

目前AI技术迅猛发展,已成为全球技术研究的焦点,越来越多的开发者投入到人工智能技术的学习和应用中。openKylin作为中国领先的开源操作系统根社区,积极布局探索AI+OS深度融合技术。在AISubsystem SIG组的主导下,打造AI子系统,通过SDK的方式为AI应用提供能力。

openKylin(开放麒麟)

社区开发者可通过AI SDK提供的接口将AI能力集成到应用中。这种方式有助于开发者便捷的集成和调用,同时也支持大家根据AI SDK开发openKylin AI应用。下面,我们将重点介绍AI SDK,包括其特性介绍和使用方法等。



一、openKylin AI子系统技术框架


openKylin AI子系统包括AI SDK和Runtime两部分,其整体架构如下所示:

openKylin(开放麒麟)

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基础能力使用

安装开发包

    sudo apt-get install libkylin-ai-base-dev

    配置CMakeLists.txt

      find_package(PkgConfig REQUIRED)pkg_check_modules(AIBASE kylin-ai-base)include_directories(${AIBASE_INCLUDE_DIRS})target_link_libraries(TestSDK ${AIBASE_LIBRARIES})

      使用AI能力

        #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引擎开发接口目前尚未趋于稳定,后续可能会进行变动

        安装开发包

          sudo apt-get install libkylin-ai-engine-dev

          配置CMakeLists.txt

            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 : ...



              五、openKylin AI SDK后续规划


              openKylin社区AISubsystem SIG小组致力于openKylin AI子系统的规划、维护和升级工作。后续,团队将openKylin AI SDK以下能力进行升级:
              1. 提供AI基础能力同步接口
              2. 支持关键词语音唤醒等功能
              3. 提供AI Agent基础接口



              六、项目地址


              • https://gitee.com/openkylin/kylin-ai-sdk

              • https://gitee.com/openkylin/kylin-ai-runtime

              • https://gitee.com/openkylin/kylin-ai-engine