
项目的起因是,在使用 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
1 snow0 2025 年 8 月 1 日 Agent 有类似 LangChain 里面的高阶功能 loop 、策略配置吗 我看上面代码构建的 Agent 只循环一次 |
2 cKnight OP @snow0 可以看下项目里面使用 Agent 快速搭建 OWL 的那个例子,在这个 OwlAgentStrategy 类中。项目主要是想要快速构建单个 Agent ,然后如何搭配使用要看自己具体的需求。未来会对 Prompt 进行优化,更加系统化和规范化。 |
4 snow0 2025 年 8 月 1 日 @serverKnignt #2 我学习下 |