事情是这样的,上个月我刷到一个视频,说现在用Python写个AI聊天机器人特别简单,几行代码就能搞定,我当时就笑了——这年头什么都能吹成“几行代码”,但我这人吧,好奇心重,加上最近公众号流量确实不咋地,就想着搞点东西出来写篇文章蹭蹭热度。
结果你猜怎么着?我真写出来了,而且效果出乎意料,更离谱的是,我同事路过我工位,看我对着终端窗口打字,以为我在跟某个朋友聊天,还问我“这谁啊聊这么嗨”,我说这是机器人,他愣了三秒钟,然后说“你糊弄鬼呢”。
好,废话不多说,直接上干货,这次我用的其实不是什么高深的东西,就是Python加OpenAI的API,再加了一层简单的记忆功能,对,就是让机器人能记住上下文,不然你问“我刚刚说了啥”它直接蒙圈,那就太蠢了。
先说说最基础的部分,你要是只想搞个能回话的玩意儿,其实几行代码真够,装个openai库,设好API Key,然后调一下ChatCompletion接口就完事了,网上教程一大堆,我不重复造轮子,但我得说,光这样搞出来的机器人太机械了,你跟它说“你好”,它回“你好!有什么可以帮助您的吗?”,一股子客服味儿,阅读量估计都骗不来几个。
所以我搞了点小动作,我给它加了个“人设”——假装它是一个懂技术又有点毒舌的程序员朋友,这个怎么搞?其实就是在系统提示词(system prompt)里写清楚:“你是一个有十年开发经验的Python后端,说话带点调侃,喜欢吐槽产品经理。”就这么简单,效果立竿见影,它回我的第一句话是:“又来了,这次想让我帮你写什么烂代码?”
.jpg)
我当时就乐了,这才是真实感嘛。
然后就是记忆的问题,OpenAI的API本身是不保存对话历史的,每次请求都是独立的,所以你如果不自己维护上下文,它每句话都是“重新开始”,我一开始用的是个全局列表,把每次的提问和回答都存进去,下次请求的时候一起发过去,但是问题来了——对话一长,token数爆表,钱包扛不住。
后来我想了个土办法:只保留最近五轮对话,再往前的就压缩成一句摘要存着,比如用户之前问过“怎么学Python”,我就压缩成“用户对入门学习路径感兴趣”,然后放回系统提示词里,这样既省token,又不至于完全失忆,这办法不完美,有时候它会把摘要理解偏,但大部分情况下够用了。
哦对,还有一个坑我得提一下,如果你直接用中文提问,有些模型返回的内容会有明显的“翻译腔”,比如它会说“作为一个AI语言模型,我……”这种话,我得说,真让人出戏,我在提示词里明确加了句“不要提到自己是AI,不要用生硬的礼貌用语”,效果好了不少,但也偶尔翻车,这玩意得反复调,没捷径。
最后我把它封装成了一个命令行工具,想聊就启动,按Ctrl+C退出,发给几个朋友试了试,有一个哥们儿聊了十分钟才发现对面是机器人,还说我“演技进步了”,我没告诉他真相。
怎么说呢,这玩意儿现在看起来还比较糙,没有图形界面,不能语音对话,但用来玩一玩,或者写篇文章骗骗流量,真的够了,你要是也想搞一个,别想得太复杂,先跑起来再说,代码写烂了可以改,但一直纠结完美就没意思了。
下一期我可以讲讲怎么给它加上语音输入,或者怎么部署到微信上,不过前提是——这条阅读量得过千,你懂的。
(免费申请加入)AI工具导航网

相关标签: # python实现ai聊天机器人
评论列表 (0条)