Agent开发——一些拓展功能
做了一些简单的拓展功能:游戏监听、时间监听、联网搜索、Live2d动作联动
前言
一问一答的对话还是过于枯燥了,不如做一些在用户层面上的主动对话吧(其实本质上还是一问一答,只是用户看不到了)
游戏监听
首先明确需求,我们要做的是用户在启动游戏时,AI能够主动挑起话题。
首先,如何发现启动游戏?
游戏进程监听
遍历当前用户电脑上的所有运行着的进程,将其放入”initial_pids”即已启动的进程,以免我们的Agent启动后面临大量待处理的游戏进程监听结果。
随后,用户需要维护一个游戏信息的list,当检测到list中的进程启动后则触发对话
流程图如下

需要监听的游戏
目前还是需要手动写入的
如何获取对应进程的名称?
打开任务管理器,点击”详细信息“即可看到运行在电脑上的所有进程啦
1 | process_names: [["cloudmusic.exe","网易云音乐"], ["steam.exe","steam平台"],["BsgLauncher.exe","逃离塔科夫"],["bf6.exe","战地风云6"],["SlayTheSpire2.exe","杀戮尖塔2"]] |
实现
监听文件
1 | import psutil |
main主进程中启动监听线程:
1 | self.start_game_listener() |
时间监听
和上面的游戏监听的原理一致,也是主动对话的一坏
当时间来到特定节日或者当天的特定时间时,即可触发主动对话。
具体实现
为了当天的特殊日期不会重复,不得不开一个txt记录当天是否已经播报过了(while Ture下的涉及LLM调用的东西写起来一定要小心)
1 | import time |
联网搜索
简单的Tool
Tool的书写
使用的是langchain自带的duckduckgo的搜索
1 |
|
搜索结果如下:
1 | 搜索结果: |
prompt
1 | online_search_tool |
Live2d动作联动
我这里使用的是Live2dViewerEX来进行Live2d形象的呈现,使用ExAPI进行信号传输
我之前的Blog有相关的介绍:使用ExAPI让Live2D接入多智能体
这里以公模 桃濑日和 为例:
模型目录下有hiyori_m01.motion3.json到hiyori_m08.motion3.json的8个动作文件,在简单看了一遍之后将8个动作分为三类,开心、伤心(失望)、惊喜。接下来要做的事情就很简单了。
写一个Tool来让Agent控制动作即可
Tool书写
目前的写法比较粗浅
1 |
|
prompt
1 | get_motion_tool |
调用
llm对话结束后,调用动作发送给Live2d模型
1 | # Live2d三连 |
直接粗暴写成本地动作文件路径了,日后再改吧
1 | def send_motion(id:int): |