news 2026/7/2 0:44:26

Solon AI 开发学习4 - chat - 模型实例的构建和简单调用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Solon AI 开发学习4 - chat - 模型实例的构建和简单调用

天模型接口(ChatModel)支持:

同步调用(call),一次性返回结果

支流式调用(stream,基于 reactivestreams 规范)。通过 sse 或 x-ndjson 流式返回结果。

Tool Call(或 Function Call) 与本地数据互动(需要 llm 支持)

提示语多消息输入输出(记忆体)

带图片消息

与 solon-flow 结合使用

1、聊天模型的构建

配置方式构建

solon.ai.chat:

demo:

apiUrl: "http://127.0.0.1:11434/api/chat" # 使用完整地址(而不是 api_base)

provider: "ollama" # 使用 ollama 服务时,需要配置 provider

model: "llama3.2"

headers:

x-demo: "demo1"

import org.noear.solon.ai.chat.ChatConfig;

import org.noear.solon.ai.chat.ChatModel;

import org.noear.solon.annotation.Bean;

import org.noear.solon.annotation.Configuration;

import org.noear.solon.annotation.Inject;

@Configuration

public class DemoConfig {

@Bean

public ChatModel build(@Inject("${solon.ai.chat.demo}") ChatConfig config) {

return ChatModel.of(config).build();

}

}

手动方式构建

@Configuration

public class DemoConfig {

@Bean

public ChatModel build() {

return ChatModel.of("http://127.0.0.1:11434/api/chat") //使用完整地址(而不是 api_base)

.provider("ollama")

.model("llama3.2")

.headerSet("x-demo", "demo1")

.defaultOptionAdd("stream_options", Utils.asMap("include_usage", true))

.build();

}

}

2、同步调用(call)

public void case1() throws IOException {

ChatResponse resp = chatModel.prompt("hello").call();

//打印消息

log.info("{}", resp.getMessage());

}

3、异步流式或响应式调用(stream)

流式返回为 org.reactivestreams.Publisher(reactivestreams 规范)

public void case2() throws IOException {

Publisher<ChatResponse> publisher = chatModel.prompt(ChatMessage.ofUser("hello")).stream();

//return publisher; //使用 solon-web-rx 时可直接返回;或者对接 solon-web-sse 或 websocket

publisher.subscribe(new SimpleSubscriber<ChatResponse>()

.doOnNext(resp -> {

log.info("{}", resp.getMessage());

}).doOnComplete(() -> {

log.debug("::完成!");

}).doOnError(err -> {

log.error("{}", err);

}));

}

可以直接订阅消费(如上)。也可对接各种流行的响应式框架,比如 mutiny、rxjava 或 reactor:

@Produces(MimeType.TEXT_EVENT_STREAM_UTF8_VALUE)

@Mapping("case2")

public Flux<SseEvent> case2(String prompt) throws IOException {

return Flux.from(chatModel.prompt(prompt).stream())

.map(resp -> resp.getMessage())

.map(msg -> new SseEvent().data(msg.getContent()))

.doOnError(err->{

log.error("{}", err);

});

}

4、模型日志

内部默认会打印 llm 请求与响应的日志,分别以 ai-request: 和 ai-response: 开头。日志级别为:DEBUG。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 11:23:28

Emby美化插件完整指南:打造专属影音中心的最佳方案

厌倦了Emby千篇一律的默认界面&#xff1f;想要打造专属的个性化影音中心却不知从何下手&#xff1f;这款Emby美化插件就是为你量身定制的界面改造神器&#xff01;无需任何编程基础&#xff0c;新手也能轻松上手&#xff0c;让你的Emby焕然一新。 【免费下载链接】emby-crx Em…

作者头像 李华
网站建设 2026/6/25 14:16:28

JSON 到底是什么?2025 年最全数据格式“避坑”指南

在当今的互联网世界&#xff0c;如果说 TCP/IP 是铺路石&#xff0c;那么 JSON 就是上面跑的“通用货币”。 无论你是做前端、后端&#xff0c;还是搞大数据、AI&#xff0c;只要涉及数据交换&#xff0c;就绕不开 JSON (JavaScript Object Notation)。它以“轻量级、易读、通用…

作者头像 李华
网站建设 2026/6/30 19:08:21

抛弃笨重虚拟机!MSYS2如何让你在Windows下获得Linux式开发快感

一位开发者删除了电脑上安装了多年的Cygwin&#xff0c;转向一个名为MSYS2的新工具&#xff0c;发现编译速度显著提升&#xff0c;中文支持也更好了。这款工具到底藏着什么秘密&#xff1f; 几年前&#xff0c;Windows开发者的世界还被分为两个阵营&#xff1a;要么完全妥协于W…

作者头像 李华
网站建设 2026/7/1 20:46:37

GroundingDINO配置实战指南:5分钟掌握两大模型核心差异

GroundingDINO配置实战指南&#xff1a;5分钟掌握两大模型核心差异 【免费下载链接】GroundingDINO 论文 Grounding DINO: 将DINO与基于地面的预训练结合用于开放式目标检测 的官方实现。 项目地址: https://gitcode.com/GitHub_Trending/gr/GroundingDINO 在当今计算机…

作者头像 李华
网站建设 2026/7/1 6:26:04

TinyML技术深度解析:从边缘计算到智能终端的终极指南

TinyML技术深度解析&#xff1a;从边缘计算到智能终端的终极指南 【免费下载链接】tinyml 项目地址: https://gitcode.com/gh_mirrors/ti/tinyml 在人工智能技术快速发展的今天&#xff0c;一个革命性的趋势正在悄然改变着我们对计算能力的认知——TinyML技术正在将强大…

作者头像 李华