日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

基于AIML2.0写一个机器人

發布時間:2023/12/31 ChatGpt 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于AIML2.0写一个机器人 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

因為本猿自入行以來都有在開發和維護語音識別這類的產品。只不過是基于像科大訊飛,云知聲這類語音引擎,所以對語言識別這塊比較好奇,因為好奇,所以也很無奈……之前有嘗試過正則式匹配,結果你懂的。

去年年底偶爾看到了AIML(全名為Artificial Intelligence Markup Language(人工智能標記語言)),然后翻了兩篇入門博客,感覺這是個好東西。然后,下載了別人的例子來運行,這回讓我難受了,源碼什么都沒修改,運行結果盡然和人家博客寫的不一致,而且還老掛。又耗了一個星期去查找資料,發現相關博客基本都是基于AliceBot做的Demo,也都有強調Alice不支持中文需要自己修改,而且Alice官網好像也沒有了。當然Iveely Liu也寫了一個aiml解析,結合Iveely搜索引擎做了個智能問答機器人(http://www.cnblogs.com/liufanping/p/5879822.html),幾個工程代碼量比較大,對搜索引擎技術又比較陌生;于是,我找了AIML2.0文檔,決定嘗試自己去寫一個AIML解析器。

年前花了半個月的時間,終于把AIML基本的標簽解析弄得差不多了。下面簡單介紹一些AIML 2.0。

通配符:

AIML1.0提供了*和_,表示“出現一次或者多次”(以下我簡稱它們為“1+統配符”)

AIML2.0新添加了^和#,表示“出現零次或者多次”(以下我簡稱它們為“0+統配符”)

它們的優先級關系:# -> _ -> ^ -> *;


<aiml>標簽

AIML文件的根標簽,包含aiml文件的內容;

集合SET <set>:

AIML2.0在匹配模型中提供了集合元素匹配

<category>

category表示AIML的基本知識單元

<topic>標簽

表示基本知識庫單元的主題分類

<pattern>標簽

描述知識單元匹配模型

<that>標簽

描述上一次匹配的知識單元的匹配模型

<template>標簽

描述AIML知識單元的響應,最簡答的就是直接返回純文字,但大多數情況以文字與標簽結合形式出現。

<random>標簽

描述隨機響應

<condition>標簽

描述條件響應

<li>標簽

描述單條響應

<loop>標簽

用于處理<li>標簽循環響應

<star>標簽

用于提取<pattern>中通配符和集合元素的匹配內容

<thatstar>

用于提取<that>中通配符和集合元素的匹配內容

<topicstar>

用于提取<topic>中通配符和集合元素的匹配內容

<set>和<get>標簽

這里的<set>標簽包含在<template>中,用于設置變量的值,<get>用于獲取某些變量的值

<srai>標識

內容會作為輸入繼續匹配

<sr/>標簽

<sr/> = <srai><star /></srai>


好了,先簡單的介紹這些簡答的標簽;下面我們來看看AIML知識庫的幾個例子:

最簡單的問候語知識單元:

????????<category>

<pattern>你好</pattern>

<template>你好!</template>

</category>

當輸入“你好”時,機器人回應:“你好!”


隨機響應:

????????<category>

????????????<pattern>你有錢嗎?</pattern>

????????????<template>

????????????????<random>

????????????????????<li>談錢傷感情好嗎!</li>

????????????????????<li>作為一個碼農,我真心是窮!</li>

????????????????????<li>你猜!</li>

????????????????</random>

????????</template>

????</category>

????當輸入“你有錢嗎?”,機器人從給定的響應中隨機響應一條。


條件響應:

?<category>

????<pattern>你有*嗎</pattern>

????<template>

????????<think><set name="star"><star/></set></think>

????????<condition name="star">

????????????<li value="錢"><srai>你有錢嗎?</srai></li>

????????????<li value="money"><srai>你有錢嗎?</srai></li>

????????????<li value="女朋友"><srai>你親愛的是誰?</srai></li>

????????????<li value="老婆"><srai>你親愛的是誰?</srai></li>

????????????<li>你是在問我有沒有<star />嗎?</li>

??????????</condition>

??????</template>

</category>

????這里你肯能注意到了,"你有*嗎"其實是可以匹配“你有錢嗎?”的,那么這里怎么處理,AIML中精確匹配優先模糊匹配。


響應繼續輸入:

<category>

????<pattern>現在幾點鐘</pattern>

????<template>

????????<date format="hh點mm"></date>

????</template>

</category>

<category>

????<pattern>#現在的時間|#幾點了|#現在幾點鐘了|#現在幾點鐘#</pattern>

????<template>

????????<srai>現在幾點鐘</srai>

????</template>

</category>

<category>

????<pattern>#現在的時間|#幾點了|#現在幾點鐘了|#現在幾點鐘#</pattern>

????<that>現在幾點鐘</that>

????<template>現在<date format="hh點mm"></date>,你剛問過的。</template>

</category>


? ? 以下貼我測試AIML文件內容,因為現在還在優化解析,所有知識庫都是隨便寫的,大家見諒:

test.aiml

<?xml version="1.0" encoding="UTF-8"?>

<aiml>

????<category>

????????<pattern>我叫*</pattern>

????????<template>你好,<star /></template>

????</category>

????<category>

????????<pattern>#騙你的</pattern>

????????<template>

????????????<random>

????????????????<li>你真不是個好人。</li>

????????????????<li>你是個壞人。</li>

????????????</random>

????????</template>

????</category>

????<category>

????????<pattern>我叫*</pattern>

????????<that>#騙你的</that>

????????<template>以后都不敢相信你了</template>

????</category>

????<category>

????????<pattern>#你叫什么名字</pattern>

????????<template>我叫<bot name="name"/></template>

????</category>

????<category>

????????<pattern>透漏點#</pattern>

????????<that>你有*嗎</that>

????????<template>

????????????<random>

????????????????<li>打死不說!</li>

????????????????<li>無聊吧,你!</li>

????????????????<li>聊點別的吧!</li>

????????????</random>

????</template>

</category>

<category>

????????<pattern>你有*嗎</pattern>

????????<template>

????????????<think><set name="star"><star/></set></think>

????????????<condition name="star">

????????????????<li value="錢"><srai>你有錢嗎?</srai></li>

????????????????<li value="money"><srai>你有錢嗎?</srai></li>

????????????????<li value="女朋友"><srai>你親愛的是誰?</srai></li>

????????????????<li value="老婆"><srai>你親愛的是誰?</srai></li>

????????????????<li>你是在問我有沒有<star />嗎?</li>

????????????</condition>

????????</template>

????</category>

????<category>

????????<pattern>你有錢嗎?</pattern>

????????<template>

????????????<random>

????????????????<li>談錢傷感情好嗎!</li>

????????????????<li>作為一個碼農,我真心是窮!</li>

????????????????<li>你猜!</li>

????????????</random>

????????</template>

????</category>

????<category>

????????<pattern>你親愛的是誰?</pattern>

????????<template>

????????????<think>

????????????????????<set name="lover"><bot name="lover"/></set>

????????????</think>

????????????<condition name="lover">

????????????????<li value="無">?

????????????????????<random>

????????????????????????<li>我是一只單身狗!</li>

????????????????????????<li>單身狗只愛自己!</li>

????????????????????????<li>沒有女朋友,求介紹!</li>

????????????????????</random>

?????????????</li>

????????????<li><bot name="lover"/>,是我最最親愛的她!</li>

????????</condition>

????</template>

</category>

<category>

????????<pattern>你個混蛋!</pattern>

????????<template>

????????????<srai>你好瘋!</srai>

????????</template>

</category>


<category>

????????<pattern>導航去*</pattern>

????????<template>不好意思,我還不會!你用百度地圖吧,聽說很好用?</template>

</category>


<category>

????????<pattern>從*導航去*</pattern>

????????<template><star index="1"/><star index="2"/>,你用百度地圖吧,聽說很好用?</template>

</category>


<category>

????????<pattern>你好#</pattern>

????????<template>

????????????<think>

????????????????<set name="star"><star /></set>

????????????</think>

????????????<condition name="star">

????????????????<li>你好<star/></li>

????????????????<li value="美">

????????????????????<random>

????????????????????????<li>謝謝,你也很美哦!</li>

????????????????????????<li>是嗎?很美嗎?</li>

????????????????????????<li>來給我拍張照。</li>

????????????????????????<li>說得人家都不好意思了~</li>

????????????????</random>

????????????</li>

????????????<li value="無恥">信你才怪!</li>

????????????<li value="帥">知道就可以了,不要說出來。</li>

????????????<li value="厲害">哈哈,被你發現啦!</li>

????????</condition>

????</template>

</category>


<category>

????????<pattern>賣萌</pattern>

????????<template>

????????????<random>

????????????????<li>喵喵~</li>

????????????????<li>么么噠~!!</li>

????????????????<li>人家才不要賣萌~!</li>

????????????????<li>給我滾蛋~!</li>

????????????????</random>

????????????</template>

</category>


<category>

<pattern>你是不是傻</pattern>

<template>你才傻!</template>

</category>

<category>

<pattern>傻不傻*</pattern>

<template>不傻!</template>

</category>


<category>

<pattern>#傻不傻</pattern>

<template>你才傻!</template>

</category>


<category>

<pattern>*</pattern>
<template>聽不懂你說什么!</template> </ category >
< category >
<pattern>你好</pattern>

<template>你好!</template>

</category>

</aiml>


name.aiml

<?xml version="1.0" encoding="UTF-8"?>

<aiml>

<category>

<pattern>我叫什么名字?</pattern>

<template>

<random>

<li>我能猜的著才怪呢?</li>

<li>我們認識嗎?</li>

<li>對不起,我不認識你。</li>

</random>

</template>

</category>

<category>

<pattern>我叫什么名字?</pattern>

<that>我的名字叫*</that>

<template>

<random>

<li>你在考我嗎?你叫<thatstar/></li>

<li><thatstar/>你別鬧了!</li>

<li><thatstar/>你改名字了嗎?!</li>

</random>

</template>

</category>


<category>

<pattern>#我叫*</pattern>

<template>

<srai>我的名字叫<star index="2"/></srai>

</template>

</category>

<category>

<pattern>我的名字叫*</pattern>

<template>

<!-- <think><set name="clientName"><star /></set></think> -->

很高興認識你,<set name="clientName"><star /></set>

</template>

</category>

</aiml>


time.aiml

<?xml version="1.0" encoding="UTF-8"?>

<aiml>

<!-- 時間 -->

<category>

<pattern>現在幾點鐘</pattern>

<template>

<date format="hh點mm"></date>

</template>

</category>

<category>

<pattern>#現在的時間|#幾點了|#現在幾點鐘了|#現在幾點鐘#</pattern>

<template>

<srai>現在幾點鐘</srai>

</template>

</category>

<category>

<pattern>#現在的時間|#幾點了|#現在幾點鐘了|#現在幾點鐘#</pattern>

<that>現在幾點鐘</that>

<template>現在<date format="hh點mm"></date>,你剛問過的。</template>

</category>

<!-- 日期 -->

<category>

<pattern>今天幾號</pattern>

<template>今天<date/></template>

</category>

<category>

<pattern>#今天的日期|#今天幾月幾號|#今天幾月幾日|今天幾號#</pattern>

<template><srai>今天幾號</srai></template>

</category>

<category>

<pattern>#今天的日期|#今天幾月幾號|#今天幾月幾日|今天幾號#</pattern>

<that>今天幾號</that>

<template>今天<date/>,今天是不是對你很重要啊?</template>

</category>

</aiml>


? ? 以下是運行的結果:


目前完成的進度感覺已經可以做做一些智能客服了,后續想定義一些自定義標簽做意圖識別。今天就先這樣吧。





總結

以上是生活随笔為你收集整理的基于AIML2.0写一个机器人的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。