这里是hoppinzq,和他的小AI,然后这是一个演示项目,演示一些AI
| 技术栈&中间件&工具 | |
|---|---|
本项目是很多项目通过SpringHoppin框架集成的微服务版,算是一个Demo性质的项目,融合了注册中心、统一认证、网关、AI、博客、短视频、爬虫等一系列项目。
当然你可能只对AI感兴趣,我的意向也是这样。所以目前网站上只有关于AI的内容,AI的代码也是最完善的,其他待迁移。另外,你无需了解SpringHoppin是如何工作的。
前端框架使用Alpine和JQuery
部分代码未迁移或者部分迁移,如需完整源代码(在我的私有仓库),请联系微信:zhangqiff19
项目有57个模块,AI是其中一个模块,如果你只想要AI模块,可联系我或者自行拆分(应尽可能保留注册中心模块、auth认证模块、file文件模块、gateway网关模块)
,本项目尽可能完善AI模块,但是AI模块对我来说并不是重点。目前我已经仅最大可能拆分了,想要让openai-app服务正常工作的话,需要的模块还是很多~
/hoppin-ai [项目目录]
│
├─hoppinzq-center ------------------[注册中心模块,可以不启动]
├─hoppinzq-client ------------------[核心模块,SpringHoppin客户端依赖]
├─hoppinzq-common ------------------[核心模块,公共模块]
│─hoppinzq-gateway -------------------[核心模块,网关模块]
│─hoppinzq-html -------------------[前端页面,前后分离的]
│─hoppinzq-lucene -------------------[非核心模块,提供搜索引擎的能力]
│─hoppinzq-module-auth -------------------[核心模块,认证模块]
│─hoppinzq-module-auth-api -------------------[供外部服务调用认证模块的服务进行认证]
└─hoppinzq-module-auth-app -------------------[认证模块的具体实现代码]
│─hoppinzq-module-file -------------------[核心模块,文件模块]
│─hoppinzq-module-file-api -------------------[供外部服务调用]
└─hoppinzq-module-file-app -------------------[文件模块,集成了OSS、minio、ftp、ssh等文件操作能力]
│─hoppinzq-module-openai -------------------[AI模块,提供AI的能力]
│─hoppinzq-module-a2a -------------------[a2a模块]
│─hoppinzq-module-a2a-client -------------------[a2a的客户端模块]
│─hoppinzq-module-a2a-model -------------------[a2a model模块]
└─hoppinzq-module-a2a-server -------------------[a2a的服务端模块]
│─hoppinzq-module-langchain -------------------[langchain模块,没有代码]
│─hoppinzq-module-openai-model -------------------[hoppinAI模块model模块]
│─hoppinzq-module-openai-api -------------------[hoppinAI模块api模块]
│─hoppinzq-module-openai-app -------------------[hoppinAI模块具体代码]
│─hoppinzq-module-openai-core -------------------[hoppinAI核心模块]
└─hoppinzq-module-mcp -------------------[mcp模块]
│─hoppinzq-module-mcp-async-server -------------------[MCP Server异步]
│─hoppinzq-module-mcp-client -------------------[MCP客户端模块]
│─hoppinzq-module-mcp-server -------------------[MCP Server标准输入输出模块]
│─hoppinzq-module-mcp-server-sse -------------------[MCP Server SSE模块]
└─hoppinzq-module-mcp-spring-ai -------------------[基于springAI的MCP Server模块]
│─mcp-demo -------------------[演示用demo]
│─hoppinzq-module-spring-ai-mcp-client -------------------[springAI的MCP客户端模块]
│─hoppinzq-module-spring-ai-mcp-server -------------------[springAI的MCP Server 标准输入输出模块]
└─hoppinzq-module-spring-ai-mcp-server-sse -------------------[springAI的MCP Server 流式输出模块]
│─hoppinzq-mybatis -------------------[非核心模块,mybatis和拓展]
│─hoppinzq-redis -------------------[非核心模块,提供缓存的能力]
└─hoppinzq-service -------------------[核心模块,SpringHoppin服务端依赖]
要启动ai模块,你最好先启动注册中心和认证中心,然后再启动ai模块。当然不启动会一直在报错,但不影响使用。
OpenAiService service=new OpenAiService("api-key",
Duration.ofSeconds(60),"OpenAI代理地址");
final List<ChatMessage> messages=new ArrayList<>();
final ChatMessage userMessage=new ChatMessage(ChatMessageRole.USER.value(),"你好AI");
messages.add(userMessage);
ChatCompletionRequest chatCompletionRequest=ChatCompletionRequest
.builder()
.model("gpt-4o-mini")
.messages(messages)
.n(1)
.build();
ChatCompletionResult chatCompletion=service.createChatCompletion(chatCompletionRequest);我们有一套自动的CI/CD流程,考虑到对你们并没有什么用,就都去掉了,反正把注册中心、认证中心、openai-app打这三个jar包就行了。配置文件你得配好。
- 添加了对functionCall的支持,支持动态调用Java代码
- 添加了对MCP Client的支持,支持调用注册的MCP Server
- 添加了ZSON,用于处理大模型返回不规范的json,不过有了FunctionCall后,并没什么用。适用于以下场景:
1、非json数据:{"a":"acv","dd":"qwe"}希望对你有帮助 2、未闭合的json:{"a":{"b":[1,2, 3、多余的json:{{"name":"zhangsan"}} 4、单引号json:{'a':1,"v":"qwe"} 5、遗漏,json:{"name":"zhangsan""v":"qwe"} 6、多余,json:{"name":"zhangsan","v":"qwe",} 7、markdown的json:```json {"name":"zhangsan","v":"qwe"}``` 8、用=代替冒号的json:{"name"="zhangsan","v"="qwe"} 9、丢失冒号的json:{"name" "zhangsan","v" "qwe"} 10、未加引号的json:{"name":zhangsan,"v":1} 11、中文符号的json:{“name”:“张三”} 12、带注释的json:{“name”:“张三”//这是name} 13、值缺失:[1,2,,3] 14、带有未转义的控制字符的json:{"name":"zhangsan","v":"qwe\n"} - 所有openAI协议接口支持
- Deepseek 推理能力支持
- 增加了RAG知识库的支持
- 聊天页面重写
- 添加了计费接口和token工具类
- 封装hoppinai client端mcp调用的提示词
你是一个有用的助手,可以使用一些工具来回答用户的问题,现在有这些工具: 工具1: - 工具名称:search - 工具描述:搜索相关内容 - 工具参数: - search_content: - 类型:string - 描述:搜索的内容 - 是否必填:是 - search_type: - 类型:string - 描述:搜索内容的类型 - 默认值:music - 是否必填:否 - 可选值:[music, website, other] - search_num: - 类型:integer - 描述:搜索数目 - 默认值:10 - 最小值:1 - 最大值:30 - 是否必填:否 - 参数必填:[search_content] - 参数示例:{"search_content":"周杰伦","search_type":"music"} 根据用户的问题选择合适的工具。如果不需要工具,请直接回复。 重要提示:当您需要使用工具时,您必须只使用以下确切的JSON对象格式进行响应,而不能使用其他格式: { "tool":"tool_name", "arguments":{ "arguments_name":"value" } } 收到工具的响应后: - 1、将原始数据转换为自然的对话式响应。 - 2、保持回答简洁但信息丰富 - 3、关注最相关的信息 - 4、使用用户问题中的适当上下文 - 5、永远不要用完全相同的参数重新进行之前的工具调用 请仅使用上面明确定义的工具。 - 其他更新,我忘了
🌷微信:zhangqiff19
OpenAI
MCP
Trae
deepseek
Cursor
Cherry Studio
腾讯云
MIT
