灵云人工智能论坛

 找回密码
 立即注册
搜索
查看: 9355|回复: 0

NLU调用客服云实现多轮会话 [复制链接]

Rank: 10Rank: 10Rank: 10

超级版主 活跃会员 突出贡献 优秀版主 荣誉管理 论坛元老 智多星 小助手 大助手

发表于 2017-8-7 22:16:37 |显示全部楼层
以windows c++版本为例,说明NLU调用客服云实现多轮会话的过程。注意以下红色字体部分。#include "hci_nlu.h"
#include "common/FileReader.h"
#include "common/CommonTool.h"
#include <string>
using std::string;

//函数声明
void PrintNluResult(NLU_RECOG_RESULT &nlu_result);
bool Recog(const string &cap_key, const string &recog_config, const string &text_file);

//主功能函数
void FunctionFunc(const string &cap_key,const string &data_path,const string &test_data_path)
{
        HCI_ERR_CODE err_code = HCI_ERR_NONE;

        //初始化NLU模块
        string init_config = "initCapkeys=";
        init_config += cap_key;
        init_config += ",dataPath=";
        init_config += data_path;
        err_code = hci_nlu_init(init_config.c_str());
        if (err_code != HCI_ERR_NONE)
        {
                printf("hci_nlu_init return (%d:%s) \n",err_code,hci_get_error_info(err_code));
                return;
        }
        printf( "hci_nlu_init success\n" );

        //识别
        string text_file = test_data_path + "/nlu.txt";
        string recog_config="intention=baike,robotid=37042c188c5b4885de37e9b2d7c74eb1,channelid=2,resver=2";//云端必须传intention,如:intention=weather
        Recog(cap_key, recog_config, text_file);

        //NLU 反初始化
        hci_nlu_release();
        printf("hci_nlu_release\n");
}

//NLU语意识别
bool Recog(const string &cap_key, const string &recog_config, const string &text_file)
{
        HCI_ERR_CODE err_code = HCI_ERR_NONE;
               
        //载入NLU文本
        HciExampleComon::FileReader nlu_text;
        HciExampleComon::FileReader nlu_text_next;
        if (nlu_text.Load(text_file.c_str(),1) == false)
        {
                printf( "Open input text file %s error!\n" ,text_file.c_str() );
                return false;
        }

        if (nlu_text_next.Load("./next.txt",1) == false)
        {
                printf( "Open input text file %s error!\n" ,text_file.c_str() );
                return false;
        }

        //去掉3个字节的bom头
        char *text = NULL;
        if (nlu_text.buff_[0]==0xEF && nlu_text.buff_[1]==0xBB && nlu_text.buff_[2]==0xBF)
        {
                text = (char *)nlu_text.buff_ + 3;
        }
        else
        {
                text = (char *)nlu_text.buff_;
        }

        char *text_next = NULL;
        if (nlu_text_next.buff_[0]==0xEF && nlu_text_next.buff_[1]==0xBB && nlu_text_next.buff_[2]==0xBF)
        {
                text_next = (char *)nlu_text_next.buff_ + 3;
        }
        else
        {
                text_next = (char *)nlu_text_next.buff_;
        }
       
        // 启动 NLU Session
        int nSessionId = -1;
        string strSessionConfig = "capkey=" + cap_key;
        //此处也可以传入其他配置,参见开发手册,此处其他配置采用默认值
        printf( "hci_nlu_session_start config[ %s ]\n",strSessionConfig.c_str() );
        err_code = hci_nlu_session_start( strSessionConfig.c_str(), &nSessionId );
        if( err_code != HCI_ERR_NONE )
        {
                printf( "hci_nlu_session_start return (%d:%s)\n", err_code ,hci_get_error_info(err_code));
                return false;
        }
        printf( "hci_nlu_session_start success\n" );

        //识别
        NLU_RECOG_RESULT nlu_result;
        NLU_RECOG_RESULT nlu_result_next;
        printf( "hci_nlu_recog config[ %s ]\n", recog_config.c_str() );

        err_code = hci_nlu_recog( nSessionId, text, recog_config.c_str(), &nlu_result );
        if (err_code == HCI_ERR_NONE)
        {
                printf( "\nhci_nlu_recog success\n" );
                // 输出识别结果
                PrintNluResult( nlu_result );
                // 释放识别结果
                hci_nlu_free_recog_result( &nlu_result);
        }
        else
        {
                printf( "hci_nlu_recog return (%d:%s)\n", err_code ,hci_get_error_info(err_code));
        }

        err_code = hci_nlu_recog( nSessionId, text_next, recog_config.c_str(), &nlu_result_next );
        if (err_code == HCI_ERR_NONE)
        {
                printf( "\nhci_nlu_recog success\n" );
                // 输出识别结果
                PrintNluResult( nlu_result_next );
                // 释放识别结果
                hci_nlu_free_recog_result( &nlu_result_next);
        }
        else
        {
                printf( "hci_nlu_recog return (%d:%s)\n", err_code ,hci_get_error_info(err_code));
        }
       
        // 终止 NLU Session
        hci_nlu_session_stop( nSessionId );
        printf( "hci_nlu_session_stop\n" );
        return true;
}


//输出NLU翻译结果
void PrintNluResult(NLU_RECOG_RESULT &nlu_result)
{
        HciExampleComon::SetSpecialConsoleTextAttribute();
        printf( "\n NluResult result:\n");
        if (nlu_result.pNluRecogResultCount != 0)
        {
                //打印本地识别结果
                for (int i=0;i<nlu_result.pNluRecogResultCount;i++)
                {
                        HciExampleComon:rintUtf8String(nlu_result.pNluRecogResultList.pszResult);
                }
        }
        HciExampleComon::SetOriginalConsoleTextAttribute();
}


附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册
踩过的脚印

举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|任务|灵云 ( 京ICP证030095号 )

GMT+8, 2019-8-21 07:07 , Processed in 0.085127 second(s), 20 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部