xaiofugeGLM项目总结

## ChatGLM项目的总结
这里面主要包含项目中重要的逻辑,是准备面试用的。
具体的总体架构设计参考这个仓库https://github.com/Halukisan/MyChatGLM
### 支付领域
下图是关于支付的大概流程,里面的细节以及各种补偿处理,后续补充(可能在文章其他部分写着)。
1. 可能出现HTTP请求超时
2. 支付回调时系统宕机
3. 支付成功发送MQ消息丢失
4. 长时间未支付,超时

用户下单部分是通过购物车下单,然后创建订单然后支付,用户下单后,要先落库,再去创建支付单,根据创建的结果,再去更新库。
更新时可发送消息eventBus.post(tradeNo),mq中会进行发货处理,对于这整个流程会有三个任务:
1. 订单获取,查看订单状态
2. 订单补货
  超时三分钟,已支付,待发货未发货的订单。这是一个定时任务,数据库中查询已支付的未发货的订单,如果由,再次eventBus.post(orderId)
   ```sql
      select order_id as orderId
      From openai_order
      Where order_status = 1
        AND pay_status = 1
        AND NOW()>=order_time + INTERVAL 3 MINUTE
      ORDER BY id ASC
      LIMIT 10;
   ```

4. 超时关单
定时任务中调用接口查询数据库中是否由未支付订单
```sql
  select order_id as orderId
  From openai_order
  where order_status = 0 AND NOW() >= order_time + INTERVAL 30 MINUTE
  ORDER BY id ASC
  LIMIT 50;
```
如果有,修改订单状态,组装支付宝client用AlipayTradeCloseRequest实现关单

![image](https://github.com/Halukisan/ProjectLearn/assets/102407304/d1496b51-9800-49ce-893f-b8a50e4491d1)
![image](https://github.com/Halukisan/ProjectLearn/assets/102407304/0e1c24aa-ef09-4936-be64-8afab75bb4a4)

### 敏感词过滤
1. 检测用户是否在白名单上。如果在,返回成功,不对聊天内容进行修改
2. 如果用户不在白名单上,则创建一个新的聚合对象,用于存储过滤后的聊天内容
3. 对于原始聊天内容中的每条消息,使用words对象来替换其中的敏感词,并将修改过的消息存储在新的聊天中
4. 返回成功响应,返回数据
![image](https://github.com/Halukisan/ProjectLearn/assets/102407304/4b6a01db-5aa4-44f8-9db8-050cdf554741)

### SDK开发
1. 定义实体类
2. 配置基础信息
3. 配置拦截器,将请求的头部添加到Authorization等信息,最后通过chain.proceed(request)执行新构建的请求
4. 会话工厂中配置日志,开启HTTP客户端,创建API服务,封装工厂,提供接口
5. 拦截器头部中的Authorization,由签名工具包创建JWT Token
6. Token:30分钟过期,缓存29分钟

![image](https://github.com/Halukisan/ProjectLearn/assets/102407304/bbfc9551-eac5-4345-b01f-99c48c367e46)

### 流式应答-后端
1. SDK中Completions方法,创建request对象,包含URL、请求方式、请求体信息等,然后返回:
   ```java
    return this.factory.newEventSource(request.eventSource,Listener);
   ```
   向API发送Post请求,并将EventSource与指定的eventSourceListener关联,以便处理从服务器端推送的事件流
```java
chatGLMOpenAiSession.completions(request,new EventSourceListener(){
  @Override
 public void onEvent......
log.info(data);
chatCompletionsReponse reponse = JSON序列化data数据为......
......
responseBodyEmitter.send(response,getData());
}
)
```

### 流式应答-前端
**用户提问**
1. 获取当前对话session
2. 更新消息,加入新的会话消息
3. 使用当前会话的属性获取会话开始时的活动消息,用户会点击新会话来清除当前的会话索引
4. 格式化活动消息
5. 创建消息系统作为发送消息的占位符
6. 调用接口,将用户发送的消息传递给后端

**模型流式应答**
1. 读取返回来的body
2. 创建文本解码器
3. 创建可读流对象
4. 异步push()方法,用于向回答队列中塞入应答消息的内容

后端流式应答接口为前端提供的数据结构是一字一字返回
![image](https://github.com/Halukisan/ProjectLearn/assets/102407304/5cbcfd08-93f6-4266-83b4-84ff5797e1a1)


### 什么是跨域

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值