原本我的网站中使用的是 ChatGPT 大模型,但是你知道的,这不合规,所以我们需要对接国内已备案的大模型,对接多家国内模型来使用。
但是总不能一个模型一个接口这样设计吧?这一定会很糟糕,不接受反驳,一定会有大量的重复代码。
经过一番思考,最后决定使用工厂策略模式来实现,本文注重讲解业务思路方法,如果你有什么疑惑欢迎 +v 交流:chatgpt0ai0041128
这里重点讲解处理请求中的业务逻辑,我们如何一步步处理,最后无缝切换大模型
校验信息
说一下我这里检查到敏感词的做法,我并不会立马禁止回复,而是通过 sse 跟消息说检查到存在敏感词,稍晚一点会针对他的聊天记录做调查,如果确实有点不健康的则会考虑采取一些措施
根据使用模型获取 ApiKeyList
获取聊天记录
构建对象将信息发送给策略工厂处理
策略工厂里需要处理哪些内容呢?
(1)根据前面处理的一些信息使用对应模型的 sdk 处理请求结构
(2)发送请求响应
在这部分内容里就是对接各大模型独有的逻辑了,在此之前的逻辑都是对接各大模型共通的逻辑
响应完毕后保存消息,报错也保存
@Slf4j
public abstract class AiModelStrategy {
/**
* sse 流式对话
*/
public abstract void contextStreamChat(AiModeChatParams aiModeChatParams);
}
AiModeChatParams 实现也给你们贴一下:
@Data
@NoArgsConstructor
public class AiModeChatParams {
@ApiModelProperty("用户发送消息")
private String prompt;
@ApiModelProperty("会话 ID")
private String chatDialogueId;
@ApiModelProperty("模型选择")
private String chatModel = ChatCompletion.Model.GPT_3_5_TURBO_16K.getName();
@ApiModelProperty(value = "对话机器人ID")
private String robotModelId;
@ApiModelProperty("最大 token 数量")
private int maxTokens = 2048;
@ApiModelProperty("密钥集合")
private List<String> apiKeys = new ArrayList<>();
@ApiModelProperty("上下文消息")
private List<ChatMessage> chatMessageList;
@ApiModelProperty("请求路径")
private String apiHost;
@ApiModelProperty("SSE")
private EventSourceListener eventSourceListener;
@ApiModelProperty("上传图片")
private List<String> imageList;
}
@Service
@Slf4j
public class AiModelFactory {
@Autowired
private Map<String, AiModelStrategy> map = new ConcurrentHashMap<>();
public AiModelStrategy getStrategy(String componentName) {
LogPrintUtils.info(log, "进入外部产品工厂方法 : {}", componentName);
AiModelStrategy strategy = map.get(componentName);
if (strategy == null) {
strategy = map.get("stdNullStrategy");
}
LogPrintUtils.info(log, "带走了:{}", strategy);
return strategy;
}
}
@Service
public class AmXfxhStrategy extends AiModelStrategy {
@Override
public void contextStreamChat(AiModeChatParams aiModeChatParams) {
// 构建参数
// 发送请求
}
}
就这样,就这么简单,因为各大模型的请求构建发送都比较复杂一般也有专门的 pom 坐标所以就放入了策略工厂中,整个思路也应该说清楚了,如果有什么问题,欢迎评论区留言。
如果你想要体验 ChatGPT,未来想要体验更多模型整合和 prompt 应用,那么欢迎使用我的术士 AI:术士AI 2.0 (shushiai.com)
qq 群:762914795
到这里就结束了,因为前面两篇文章反馈好像不错,突然间就想要多写点文章
不过有很多人都是专门转载文章的 … 感觉可能应该是 csdn 的机器人