🔥 用 solon-ai 写个简单的 deepseek 程序(构建全国产 ai 智能体应用)
用国产应用开发框架(及生态),对接国产 ai。构建全国产 ai 智能体应用。
1、先要申请个 apiKey
打开 https://www.deepseek.com 官网,申请个 apiKey 。(一万字略过)
2、试试:Hello deepseek
用 solon-initializr (https://solon.noear.org/start/),生成一个 solon-web 模板项目。之后:
- 在应用属性里添加配置(app.yml)
solon.ai.chat: deepseek: apiUrl: "https://api.deepseek.com/v1/chat/completions" # 使用完整地址(而不是 api_base) apiKey: "sk-9f4415ddc57049658189************" # 填写自己申请的 apiKey model: "deepseek-chat"
- 用配置器类构建通用聊天模型
@Configuration public class DeepseekConfig { @Bean public ChatModel chatModel(@Inject("${solon.ai.chat.deepseek}") ChatConfig config) { return ChatModel.of(config).build(); } }
- 添加测试用的控制器
@Controller public class DemoController { @Inject ChatModel chatModel; @Mapping("hello") public String hello(String message) throws IOException { return chatModel.prompt(message).call().getMessage().getContent(); } }
- 测试一下
启动项目。打开浏览器地址:http://localhost:8080/hello?message=hello
。效果良好:
3、尝试把输出改成 sse,方便打字效果的聊天窗口开发
这里需要添加两个插件依赖,协助流式输出 sse 数据。
插件 | 作用 |
---|---|
org.noear:solon-web-rx | 提供响应式输出(就是流式输出) |
org.noear:solon-web-sse | 提供sse渲染支持 |
加好依赖后,只需要改进下控制器的几行代码:
@Controller public class DemoController { @Inject ChatModel chatModel; @Produces(MimeType.TEXT_EVENT_STREAM_UTF8_VALUE) //这个很重要,申明用 sse 格式渲染 @Mapping("hello") public Flux<String> hello(String message) throws IOException { return Flux.from(chatModel.prompt(message).stream()) .filter(resp -> resp.hasChoices()) .map(resp -> resp.getMessage().getContent()); } }
- 测试一下
启动项目。再次打开浏览器地址:http://localhost:8080/hello?message=hello
。效果良好:
4、现在开始 RAG,以 “联网搜索” 作为知识库
这里把“联网搜索”,做为一个知识库使用(内部是动态搜索的)。用它作为 RAG 的外部检索支持。
- 应用属性加一块配置
solon.ai.chat: deepseek: apiUrl: "https://api.deepseek.com/v1/chat/completions" # 使用完整地址(而不是 api_base) apiKey: "sk-9f4415ddc57049658189************" # 填写自己申明的 apiKey model: "deepseek-chat" solon.ai.repo: websearch: apiUrl: "https://api.bochaai.com/v1/web-search" # 使用完整地址(而不是 api_base) apiKey: "sk-demo..."
- 配置器类也调整下
@Configuration public class DeepseekConfig { @Bean public ChatModel chatModel(@Inject("${solon.ai.chat.deepseek}") ChatConfig config) { return ChatModel.of(config).build(); } @Bean public Repository repository(@Inject("${solon.ai.repo.websearch}") AiConfig config) { return new WebSearchRepository(null, config); } }
- 再改改控制器(输出重新写回简单的方式,不然不好截图)
@Controller public class DemoController { @Inject ChatModel chatModel; @Inject Repository repository; @Mapping("hello") public String hello(String message) throws IOException { //检索 List<Document> context = repository.search(new QueryCondition(message).limit(4)); //消息增强 ChatMessage chatMessage = UserMessage.augment(message, context); //提交大模型并简单返回(不然,截图不好截) return chatModel.prompt(chatMessage).call().getMessage().getContent(); } }
- 测试一下
启动项目。打开浏览器地址:http://localhost:8080/hello?message=solon%20%E6%98%AF%E8%B0%81%E5%BC%80%E5%8F%91%E7%9A%84%EF%BC%9F
。效果良好:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
大模型选型攻略,限免!
赠书啦,欢迎大家在评论区聊聊「大模型选型那些事」,畅所欲言 我们将在评论区随机选出 3 名 OSCer,赠送《AI赋能:大模型概念、技术及企业级项目应用》一本 活动截止时间:2月28日18:00 面对市场上众多的大模型选择,如何进行科学的选型也成为了企业面临的一个重要问题。根据笔者的实践经验总结,我们会从大模型基础信息评估、大模型性能评估和大模型的备案信息评估三个维度来进行大模型的选型。 大模型基础信息评估 大模型基础信息评估作为选型的第一步,显得尤为关键。下面我们将从参数量、数据规模和维度、模型架构、模型能力应用领域、供应商企业特征以及社区支持与生态系统等六个角度,详细阐述大模型基础信息评估。 1.参数量 参数量是衡量大模型复杂度的重要指标,它直接影响到模型的表达能力和学习能力。根据大模型的缩放定律和涌现能力,参数量越大,模型的学习能力和表达能力通常越强。然而,参数量的增加也会带来计算资源的消耗和训练难度的提升。这也会影响到项目执行中的微调策略,以及上线运行时的计算资源。 因此,根据企业的计算资源和业务需求,选择适当参数量的模型。对于资源有限的企业,可以选择参数量适中的模型以平衡性能...
- 下一篇
AI 生成文章,作者是 AI?文本数据原作者?提问用户?
无限猴子与结构蜘蛛 假设有一只猴子,它会一直随机地在打字机上敲击键盘。那么只要给它的足够长的时间,它就几乎肯定可以敲出人类任何一本已有图书的内容,例如莎士比亚的全集。从数学上讲,在无限次尝试中,猴子可以敲打出任何一部作品的概率都无限趋近于1。 这就是著名的无限猴子定理,它是“荒诞”的。就像如果把一杯水倒入大海中,在之后的某个时刻,我们刚刚好可以打捞出一杯一模一样的水一般。 但是现在我们已经完全不需要畅想无限猴子了。在自然语言处理(NLP)和文本生成领域,要模仿特定的风格生成文本,如果结合大规模预训练模型、风格特征提取、文本生成调优等技术方法,就可以做到“以假乱真”。 一种关于AI的新型自指罗素悖论:由AI写作的一篇“我坚决不看任何AI写的东西” 这就是同样基于概率的deepseek晚近“震惊人类”的创作,它生成的文本几乎无法分辨是不是人写的,并能够模拟任何风格与作者的文本。 AI眼中的“文学风格”是什么样的? 如果说类似网文、公文等因其程式化、商业化的文体特征,既没有什么独一无二的“作者性”,也没有什么高明的文学性,很容易找到它们“批量生成方式”的话,那我们不妨直接摆上人类整个文学史上...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境