github:https://github.com/zhumengyifang/ChattingRobot.git

github与blog展示代码稍有出入,请以github为准

让我自己做个聊天机器人怕是够呛了,所以研究了一下曲线救国的方法,使用免费的外接机器人api作为切入点实现自动聊天机器人的实现。

实现效果:

GitHub:https://github.com/zhumengyifang/ChattingRobot.git

如何创建项目:https://blog.csdn.net/weixin_40165163/article/details/89037098

好了新找一找免费的机器人接入点,我这里选择的是图灵机器人 http://www.turingapi.com/

注册之后创建一个属于自己的机器人:

之后进入设置拿到对应机器人的apikey:

 之后打开api使用文档,根据文档首先使用postman进行一个测试:

userId这里对应的应该是apiKey机器人下的userId来确定是在跟那个用户进行聊天,我这里是随便输入的,到时候最好生成一个guid来作为唯一标记。

项目结构:

main.go

package mainimport ("fmt""main/Util""time"
)const userId1 = "userId1"
const userId2 = "userId2"func main() {var chattingInfo = Util.BuildChatting("你好!", userId1)var userId = userId1for i := 0; i < 10; i++ {var json = Util.ConvertJson(chattingInfo)var resultText = chatting(userId, json)time.Sleep(time.Second)if i%2 != 0 {userId = userId1} else {userId = userId2}chattingInfo = Util.UpdateChatting(userId, resultText, chattingInfo)}}func chatting(userId string, json string) string {var body, resultErrs = Util.HttpPost(json)if resultErrs != nil {fmt.Println(resultErrs.Error())}var resultText, errs = Util.GetText(body)if errs != nil {fmt.Println(errs.Error())}fmt.Println()fmt.Println(userId + ":" + resultText)return resultText
}

modelUtil.go

package Utilimport ("main/model"
)const appKey = "6f884bbd0b9841bf846f13947a85b13c"func UpdateChatting(userId string, text string, chattingInfo model.Chatting) model.Chatting {chattingInfo.UserInfo.UserId = userIdchattingInfo.Perception.InputText.Text = textreturn chattingInfo
}func BuildChatting(text string, userId string) model.Chatting {chatting := model.Chatting{ReqType: 0}chatting.Perception = buildPerception(text)chatting.UserInfo = buildUserInfo(userId)return chatting
}func buildPerception(text string) model.Perception {perception := model.Perception{buildInputText(text)}return perception
}func buildInputText(text string) model.InputText {inputText := model.InputText{text}return inputText
}func buildUserInfo(userId string) model.UserInfo {return model.UserInfo{appKey, userId}
}

jsonUtil.go

解析json返回值也可以通过创建对象的方式去进行,我这里嫌麻烦 使用另一种方式:https://goframe.org/encoding/gjson/index

根据返回值进行选取我们需要的值:

package Utilimport ("encoding/json""errors""fmt""github.com/gogf/gf/g/encoding/gjson""main/model"
)func GetText(data string) (string, error) {if j, err := gjson.DecodeToJson([]byte(data)); err != nil {return "", errors.New("Get Text Error")} else {var result = j.GetString("results.0.values.text")return result, nil}
}func ConvertJson(chattingInfo model.Chatting) string {jsons, errs := json.Marshal(chattingInfo)if errs != nil {fmt.Print(errs.Error())}return string(jsons)
}

httpUtil.go

package Utilimport ("bytes""errors""fmt""io/ioutil""net/http"
)const url = "http://openapi.tuling123.com/openapi/api/v2"func HttpPost(json string) (string, error) {jsonStr := []byte(json)req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))req.Header.Set("Content-Type", "application/json")client := &http.Client{}resp, err := client.Do(req)if err != nil {fmt.Println(err.Error())}defer resp.Body.Close()body, _ := ioutil.ReadAll(resp.Body)if !(resp.StatusCode == 200) {return "", errors.New("Get Text Error")}return string(body), nil
}

model实体:

实体根据格式进行创建:

package modeltype Chatting struct {ReqType    int        `json:"reqType"`Perception Perception `json:"perception"`UserInfo   UserInfo   `json:"userInfo"`
}package modeltype InputText struct {Text string `json:"text"`
}package modeltype Perception struct {InputText InputText `json:"inputText"`
}package modeltype UserInfo struct {ApiKey string `json:"apiKey"`UserId string `json:"userId"`
}

因为不是以单个文件为单位运行,所以我们这次要设置为package方式

显示效果:

收工 洗漱睡觉!

go 语言 实现两个机器人聊天相关推荐

  1. 今天教你用 Python调用两个机器人聊天

    现在网上有很多非常智能(智障)的AI机器人接口,利用这些接口,我们可以实现一个机器人,可以和它对话聊天,为了增加机器人聊天内容的趣味性,今天我决定要搞两个机器人,看它俩聊天,看看会不会发生什么有趣的事 ...

  2. 10分钟用Python告诉你两个机器人聊天能聊出什么火花

    10分钟用Python告诉你两个机器人聊天能聊出什么火花 欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 现在不是讲各种各样的人工智能嘛,AI下棋,AI客服,AI玩家--其实我一直很好奇, ...

  3. 图灵语音机器人PHP源码,两个机器人聊天对话实现源码

    这是借助图灵机器人提供的免费API实现的两个机器人对话的功能,系统自动提取图灵平台提供的智能聊天库,自己还能导入自己的知识库让机器人更具个性化,更符合你的胃口, 图灵机器人接入文档地址http://w ...

  4. python写机器人程序_用Python写的一个多线程机器人聊天程序

    本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows).后来发现实现起来特别麻烦, 就想到python.听说这家伙在什么地方都能发挥作用.所以想用python来做通讯模块...所 ...

  5. 两种开源聊天机器人的性能测试(一)——ChatterBot

    因为最近在学习自然语言处理的相关知识,QQ小冰这个东西最近又很热,所以就试着玩了下两个开源聊天机器人,在这里分享一点小经验,希望对有共同兴趣的人能起到那么一点作用. 我主要测试了两个聊天机器人,一个是 ...

  6. 日常pytho3练习脚本之--两个逗比聊天机器人

    脚本后续更新及迭代将由kkitDeploy项目代替 https://github.com/luckman666/kkitdeploy_server 请大家持续关注kkitDeploy 这里首先感谢一下 ...

  7. python 机器人聊天_使用python构建您的第一个聊天机器人并将其集成到电报中

    python 机器人聊天 Did you know? 你知道吗? "Chatbots can cut operational costs by up to 30%. eCommerce ch ...

  8. java开发机器人聊天_聊天机器人与Web开发的未来

    java开发机器人聊天 Since Facebook launched their annual F8 conference for bot developers in 2016 and Micros ...

  9. pythonQQ机器人系列(基于go-cqhttp):使用requests和socket实现QQ机器人聊天(2-0)

    系列文章目录 基础:requests的基本使用:QQ机器人基础  传送门 pythonQQ机器人系列:使用requests实现QQ机器人聊天(0-2) 传送门 pythonQQ机器人系列:使用requ ...

最新文章

  1. 常问面试题总结(JAVA基础篇)
  2. RabbitMQ消费消息幂等性问题
  3. c语言斐波那契数列_视频丨神奇的斐波那契数列科学性与艺术性
  4. VMware与Centos7系统安装
  5. 生生世世 —— schedule 的轮回(七)
  6. linux 循环每个月,SHELL脚本每月最后一天判断
  7. java图片压缩不失真_软件分享 | Lit图片压缩
  8. 光动能表怎么维护_男士手表什么牌子好,男士手表品牌推荐, 天梭、阿玛尼、西铁城、天王表、罗西尼、卡西欧男手表推荐...
  9. UE3 性能调试:动态光照环境
  10. UITableViewController与UIViewController中使用UITableView
  11. Centos7 安装字体库中文字体
  12. 不用任何插件:小白如何白嫖百度网盘下载速度(不好用来打我,嘿嘿)
  13. 100条修身养性的句子
  14. 多项式时间 P问题 NP问题
  15. elementUI Drawer 抽屉打开时表单自动聚焦问题解决
  16. 戴尔服务器提升性能,解析戴尔12G服务器的主要性能提升和改进
  17. 如何在library中使用productFlavors
  18. Win10改Win7后USB没有被驱动
  19. 两个集合相等的例题_集合的相等答案
  20. 三级栏目html,易优CMS 栏目页分离调用二级栏目导航和三级栏目导航

热门文章

  1. C语言单元测试框架unit的使用
  2. 抽象类中调用自己的抽象方法
  3. 那些重要的质量管理图表,你都掌握了吗?
  4. Java拖拽排序工具类
  5. 中国儿童移动游戏市场解读 潜力巨大有待开发
  6. mysql完全限定表列名_mysql必知必会--联 结 表
  7. 使用UltraISO将Windows Server 2008 R2 ISO镜像文件烧录到U盘
  8. java ear包_简单介绍Java 的JAR包、EAR包、WAR包区别
  9. 超级搞笑----英语翻译的最高境界
  10. 顺序读写和随机读写区别和实现