專案實踐 智慧型聊天機械人

2021-09-26 05:28:53 字數 3771 閱讀 9531

實現功能

準備工作

1.由於開發環境的需求,gcc的版本至少要在6.x以上,需要準備高版本的gcc

# sudo yum install centos-release-scl

# sudo yum install devtoolset-8

# scl enable devtoolset-8 bash

2.圖靈機械人

圖靈機械人能進行智慧型對話。接入圖靈機械人,依賴的是http協議,請求和相應的資料都是json格式。http本次不寫,直接使用第三方庫httplib。json進行資料序列號和反序列化功能需要我們完成,選擇乙個開源的c++庫:jsoncpp。

什麼是json

json是一種傳遞物件的語法,物件可以是name/value對,陣列和其他物件。

語法規則:

json 的語法規則十分簡單:

陣列(array)用方括號(「」)表示。

物件(object)用大括號(」{}」)表示。

名稱/值對(name/value)組合成陣列和物件。

名稱(name)置於雙引號中,值(value)有字串、數值、布林值、null、物件和陣列。

並列的資料之間用逗號(「,」)分隔

輸入引數

,

"userinfo":

}

專案模組

class util

file *fp = popen(command.c_str(), "r");

if(nullptr == fp)

if(is_print)

}pclose(fp);

return true;

} //編寫進度條,監測錄音進度

static void* threadrun(void* arg)

; const char* label = "|/-\\";

for(; i <= 50; i++)

printf("\n");

} static void printstart(std::string tips)

static void printend()

};pthread_t util::id;

採用圖靈機械人,進行智慧型對話,機械人最重要的功能:message轉成json、請求圖靈、拿回請求的訊息

class robot

return result;

} //序列化

std::string messagetojson(std::string &message)

//請求圖靈

std::string requesttl(std::string &request_json)

return response;

} //反序列化

std::string jsontoechomessage(std::string &str)

int code = root["intent"]["code"].asint();

if(!iscodelegal(code))

json::value item = root["result"][0];

std::string msg = item["values"]["text"].asstring();

return msg;

} public:

robot(std::string id = "1")

std::string talk(std::string message)

~robot()

};

class speechrec       

return result;

}

public:

speechrec()

//語音識別automatic speech recognition

bool asr(std::string path, std::string &out)

out = result["result"][0].asstring();

return true;

} //語音合成text to speech

bool tts(std::string message)

else

ofile.close();

return ret;

} ~speechrec()

};

完成核心邏輯類

class jarvis

bool play()

public:

jarvis()

//載入命令執行配置檔案

bool loadetc()

std::string sep = ":";

char line[256];

while(in.getline(line, sizeof(line)))

std::string k = str.substr(0, pos);

std::string v = str.substr(pos+sep.size());

k += "。";

commands.insert(std::make_pair(k,v));

}std::cerr << "load command etc done ... success" << std::endl;

in.close();

return true;

} //判定訊息是否是需要執行的命令,如果是命令,需要執行它,而不需要交給圖靈機械人進行對話

bool iscommand(std::string message, std::string &cmd)

cmd = iter->second;

} void run()

std::cout << "我# " << message << std::endl;

if(message == "你走吧。")

exit(0);

}std::string echo = rt.talk(message);

std::cout << "jarvis# " << echo << std::endl;

if(sr.tts(echo))}}

else

}#ifdef _log_

close(fd);

#endif

} ~jarvis()

呼叫邏輯:

#include "jarvis.hpp"

using namespace std;

int main()

js->run();

return 0;

}

makefile檔案

cc=g++

bin=jarvis

src=jarvis.cc

include=-ispeech

lib=-ljsoncpp -lcurl -lcrypto -lpthread

flags=-d_log_

$(bin):$(src)

$(cc) -o $@ $^ $(include) $(lib)

.phony:clean

clean:

rm -f $(bin)

聊天機械人

我你好!小愛同學 小愛你好,很高興認識你!charset utf 8 css document 休息一會 sleep 1 獲取 使用者傳送的 訊息 可選 後端 對於 使用者發過來的 時候 是否 使用 可選 根據 傳送 過來的 訊息 返回 不同的內容 messagelist array 床前明月光,有...

聊天機械人 智慧型回覆機械人研發

網上找到資料 倍感欣喜,這個資料太全面了。向科學致敬。自己動手做聊天機械人 四十二 重量級長文 從理論到實踐開發自己的聊天機械人 目前來說這幾個模型最為著名,有空可以拜讀下哈。可以參考我的這篇文章自己動手做聊天機械人 二十六 遞迴神經網路 rnn 或者直接看christopher olah的這篇博文...

機械人聊天軟體c C 聊天機械人

例項簡介 c 聊天機械人 例項截圖 核心 3181078聊天機械人 原始碼必讀.pdf 聊天機械人 1.ico 聊天機械人 1.ico form1.designer.cs form1.cs form1.resx program.cs properties assemblyinfo.cs resour...