Edge 研究了三个小时的flasksocket, 然后发现这个项目基本上已经寄了. 代替它的socketio兼容性又极差, 想不到办法跟php联动. 别无办法, 后面应该只能把整个后端的重心放到php上来-php能够构建比较可靠的ws. 其实到底要不要用ws, 应该也不是非用不可. 但是如果开发的时候全部用单向的连接, 要拓展就有点不留后路了. 累死了. 我决定明天再去测试一下php的ws连接能否正常建立. 按理说, flask作为ws客户端应该是可行的, php就可以作为连接中转, 也算是勉强能在比较合适的环境下完成全双工的连接. 我会测试这一想法的可行性. 我知道这个看起来很蠢, 但还是画了一下: 这样设计部署应该就能够避免flask透心凉级别的ws服务端了. ps.我想到了更好的办法, 但是明天再说吧.
Edge 简单地打通了一下websocket流程. 出乎意料的是, python本身的websocket功能居然比专做api的flask还好用得多. 我感觉最近的工作-尤其是python网络接口和换手机-有点太超出我的舒适区了, 干得比较难受. 但是总归得做的. 这里是切分token的效果, 在前端上应该会很容易做. 相当于是能够实现流式传输的了. 虽然由于项目结构的问题, maica多半是做不到流式传输的(有后处理) 但是接口的泛用性也是有必要的.
Edge 进展: 敲完了简单的登录逻辑. 虽然说简单, 但是写起来还是相当麻烦的, 花了我至少两个小时. 简单解释一下maica拟定使用(很可能确实会使用)的服务模式: 账号本质上是论坛账号, 直接对接论坛数据库, 同步改动 能从论坛读取任何必要的用户信息并用于服务 登录不使用账号密码, 在一个指定网页中提交自己的账号信息以注册一个token(令牌). 令牌是单向加密的, 只有maica服务器能解密. 当然是用rsa. 每一个令牌对应的账号能存储数个session(会话), 每个会话大概都…相当于一条if线吧. 每个session存储最多一定字节数的对话历史(可能在4.8万字左右, 大概也就是32k vl模型的检索能力上限) maica核心能够"记住"8000token以内的对话内容, 更久远的对话记录交由vl检索呈递(未来可能加入的功能) 用户可以选择使用指定的会话和清空会话, 这方面跟openai也差不多. 会话, 历史记录, 或者说maica的记忆全部与账号绑定. 任何形式的maica调用都需要校验令牌. 会开放完全能力接口, 有可能会开放一部分"组件接口". 你可以通过集成maica组件和你自己的ai/其它供应商的ai, 替代maica的一部分或全部的, 核心或agent模型. 因此, maica的整体构想十分开源友好和开发友好. 我们仍在测试开发的早期, 因此尚不能定义maica的使用规则. 如果希望二次开发, 必须仔细阅读(到时候会有的)反滥用准则. 账号的任何滥用行为会受到处分.
Edge 今天上午的工作: 接口序列化, 完善逻辑. 下午去做拼合history, session存储可能要到明天. 虽然写开发类的东西比较繁琐, 但是至少自己看得懂. 这方面我比较担心p现在的情况, 就像是"安卓泥潭". 我把构想中三套后端的功能全部写到一起了. 毕竟我觉得初期构想已经足够完善, 没必要在后端上给自己找那么多麻烦. python写起来确实非常方便.
Edge 进展: 后端总驱动程序已经完成大概一半, 部分功能已经可以运行, 我也已经编写了接口的基本文档. 接下来我必须进入agent和sf_extraction工作, 所幸agent方面可以参照的例子比角色扮演多多了. 说个大话在前, 我觉得maica推进到公开试运行可能只需要不到两个月. 我希望我的乐观是正确的. 另: 到手的黑莓键盘有点毛病, 我给退回去返修了. 真是不省心. 新的机器仍然没空去拼完, 可能会最近去抽点空吧. 反馈学习的代码应该没有必要单独做, 现在的数据存储模式很适合直接整理投入复训. 总感觉处于一个已经要忙死了的状态了.
Edge 进展: 通过system向模型传入agent信息被证明为可行, 但其实现方式稍微有点…和想象中不一样. 我需要再次修改一部分引擎的代码, 不过总体来说不算太差的结果. 通过system让模型输出情绪表达字段的尝试失败了, 但我们还有fallback方案. 我会尽快根据实验结果编写接口. 同时, 解析存档的方法也和最开始设想的不一样. 计划赶不上变化是正常的, 总的来说一切都还在设计范围之中.
Edge 进展: 写了一个简单的agent驱动. 但是目前因为模型还没练明白, 所以需要等练完再打磨. agent的大多数使用案例都是独立工作, 通过agent向另一个模型递交信息的尝试十分罕见. 我希望不是因为存在致命问题. 另外的好消息是, qwen1.5系列的模型已经全部支持到32768token了, 所以原计划做辅助检索模型的分支可以砍掉. 再怎么说3.2万字的历史也足够了. 我觉得正常人类记住最近说的3.2万字都有点不太现实了. 训练agent模型需要的时间也相当长. agent模型的int4量化版本已经被证明可以加速运行在48g显存上, 所以接下来就是等了. 在等它的时间我会去装三号机. 还是那个忙死了. ps: 截图之后我发现search用错成match了, 不用提醒我.
Edge 进展: 看上去还不错. 我希望这个线是能用的, 如果不行的话还得花钱去配. 我觉得已经该给它起名字了. 叫密斯特拉怎么样? 这个节点将作为maica多模态能力和agent模型的计算服务器, 以及工作站. 同时还集齐了10个显卡盒子:
Edge 进展: "前体驱动"的设计思路已被证明为可行. 简单来说, 原理是: 用户输入query(现在几点了) => 前体驱动截获query => 前体模型分析问题, 调用api(time_acquire) => 前体获知信息(time: 8:40) =>前体整合信息, alter核心模型的systemprompt(已知现在是8:40) => 模型参考agent信息做出回答(现在是8:40哦. [player]) 现在不是八点四十, 我只是临时写了一个时间用于测试. 那不重要. 接下来我会调整和训练出一个更强大的agent模型, 目前7b基本模型训练出来的agent表现很差. 这个点子从思路上被实实在在地证明了, 让我有点兴奋. 这一特殊模式能够在数据集有限, 人力不足的情况下让模型既专注于角色扮演, 具有充分的可拓展性, 又有类似agent模型的信息获取和灵活利用能力. 说不定我会是第一个这样做的人. 这一有创意的设计模式能够保证maica的人类交互效果远高于简单的角色扮演模型.