项目实训——后端篇5:实现SpringBoot后端访问部署在AutoDL上的大模型

1、AutoDL上的操作

autoDL每个实例都留了端口6006暴露在外以提供服务,这就给了我们通过这个端口访问部署在AutoDL上的MING的可能性

首先简单编写脚本启动在部署在AutoDL上的model_worker、controller和ming_api_server

import subprocess
import threading


def run_controller():
    subprocess.run(["python", "-m", "fastchat.serve.controller", "--host", "0.0.0.0", "--port", "21001"])


def run_model_worker():
    subprocess.run(["python", "-m", "fastchat.serve.model_worker", "--host", "0.0.0.0", "--controller-address",
                    "http://0.0.0.0:21001", "--port", "21002","--model-path", "/root/autodl-tmp/MING-MOE-4B","--model-name", "ming-moe-4B"])


def run_api_server():
    subprocess.run(["python", "-m", "ming_api_serve", "--host", "0.0.0.0", "--controller-address",
                    "http://0.0.0.0:21001", "--port", "6006"])


controller_thread = threading.Thread(target=run_controller)
controller_thread.start()


model_worker_thread = threading.Thread(target=run_model_worker)
model_worker_thread.start()

api_server_thread = threading.Thread(target=run_api_server)
api_server_thread.start()

不过想要访问该接口,需要以SSH隧道方式进行访问

幸运的是,文章autodl一键安装Langchain-Chatchat_langchain-chatglm3一键部署安装包-CSDN博客

中提供了一个ssh端口转发的工具,利用该工具我们便可以将远程服务的端口转发到本地上,并访问本地端口来访问autodl上的接口

把上面的登录指令和密码都复制到工具上

并转发到本地的6006端口,这样向地址http://127.0.0.1:6006/v1/chat/completions发出post请求便可以与AutoDL上的ming_api_server进行通信

可以看到能够正常返回json格式化信息

2、包装消息

MessageWrapper实现了对发送消息和返回的包装,以便序列化为Json

@Data
@NoArgsConstructor
@AllArgsConstructor
public class MessageWrapper {
    public String role;
    public String content;
}

3、存储聊天消息到数据库中

ChatMessage为消息对应的数据库实体类,与MessageWrapper不同的是,标注了对应用户的id

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@TableName("chat_message")
public class ChatMessage {

    @TableId(value = "id",type= IdType.AUTO)
    private Integer id;

    private Integer userId;

    private String role;

    private String content;
    
}

为访问对应数据库表格,建立对应的Mapper

@Mapper
public interface ChatMessageDao extends BaseMapper<ChatMessage> {

    @Select("select * from chat_message where user_id=#{userId} order by id asc")
    List<ChatMessage> findChatMessageByUserId(Integer userId);


    @Delete("delete * from chat_message where user_id=#{userId}")
    void clearChatMessageByUserId(Integer userId);

}

该Mapper提供了两个接口,一个是获取指定用户的所有消息记录,一个是清除指定用户的所有消息记录。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值