项目的起因是,在使用 SpringAi 1.0 的时候想要使用 Qwen 作为 ChatModel ,但发现 SpringAi 没有写对应的依赖,而且要用某一个 LLM 还要引用对应的依赖。后面就想自己抽象一层,能让 LLM 无缝接入,就开始看源码和 debug ,这样就有了初版。
后面看来几篇博文,表达的意思大概是现有的几款框架( LangChain 等)能够解决 80%的问题,但是剩下 20%是无法逾越的鸿沟,最终还是要深入底层修改 Prompt 等。所以要使用“搭积木”的方式搭建属于企业自身业务的框架。受此启发在 SpingAi 的基础上,搞了这么个项目。
ChatModel 接口,屏蔽底层实现差异,降低开发复杂度。@Bean(ChatModelConstants.KIMI_K2_CHAT_MODEL)
public KimiChatModel kimiK2ChatModel(@Qualifier("kimiApi") AiCommonApi kimiApi){
return (KimiChatModel) LLMEnum.KIMI.genChatModel(
KimiOptions.builder()
.model(ChatModelEnum.KIMI_K2)
.temperature(0.7)
.maxTokens(8048)
.build(),
kimiApi
);
}
@Bean(AgentConstants.RAG_AGENT)
public RagAgent ragAgent(@Qualifier(ChatModelConstants.QWEN_3_PLUS_CHAT_MODEL) QwenChatModel qwenChatModel,
RagTools ragTools){
return RagAgent.builder()
.chatModel(qwenChatModel)
.prompt(AgentPromptConstants.RAG_AGEMNT_SYSTEM_PROMPT)
.tools(ragTools)
.build();
}
@Override
public Map<Long,ChatRecordMsgJsonDto> queryMsg(List<Long> ids) {
if (CollectionUtils.isEmpty(ids)){
return Map.of();
}
return where(aiChatRecordMsgMapper)
.in(BaseDO::getId, ids)
.hasMap(
BaseDO::getId,
v-> JSONObject.parseObject(v.getMsgDetail().toString(),ChatRecordMsgJsonDto.class)
);
}
JDK21+Spring Ai 1.0+Spring Boot 3.4+PostgreSql+Redis7.x
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.