山东大学创新实训 对话接口设计

 本周主要设计了与后端交互的抽象接口,并实现了对话时模型逐字逐句往外蹦的效果。

交互接口设计

与模型交互时主要需要以下操作:

  1. 初始化:这一步了包含了链接模型、验证用户身份等基础操作,需要在程序开始时执行。
  2. 开始新对话:访问模型的接口开始一轮新的对话,并清除本地保存的上一轮对话的信息。
  3. 继续对话:将用户的对话提交给模型,然后将模型的回答返回给用户;需要注意保存好当前对话的上下文,来保证对话的连贯性。

因此我定义模型对话的接口如下:

mixin LLMAPI{
  Future init();    //初始化
  Future<String> getMessage(String msg);    //继续对话
  Future reset();    //新对话
  static LLMAPI? _instance;
  static LLMAPI get instance;
}

如下是一个简单的本地的接口测试用实现,这个实现只会返回同一句话

import '../LLMAPI.dart';

class LLMAPITXT with LLMAPI{
  @override
  Future<String> getMessage(String msg) async{
    return "没有后端\n临时测试文本";
  }

  @override
  Future init() async{
  }

  @override
  Future reset() async{
  }

}

逐字逐句蹦出来

从日常的大模型使用过程中可以看到,大模型通常是生成一部分就输出一部分,有种逐字逐句蹦出来的感觉。为了实现这种感觉,我将接口获取的数据分割开来,一点一点地加入进界面。

结合上一部分加入的接口,现在将输入框输入完后的代码改为如下:

onSubmitted: (str)async{
   if(str.isEmpty)return;
   log(str);
   chater.chat(str);
   c.inputController.text="";
   c.gen.value=true;

   chater.gen("");
   var msg=await c.api.getMessage(str);
   for(int i=0;i<msg.length;i++){
       chater.gen(msg.substring(i,i+1));
       await Future.delayed(Duration(milliseconds: 50));
   }

   chater.finishGen();
   c.gen.value=false;
},

最终效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值