当前位置: 首页 > news >正文

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。

http://www.cnnetsun.cn/news/112309.html

相关文章:

  • 超越异步:如何在Node.js中构建极速数据库应用?
  • Boltz生物分子交互建模:从新手到专家的5个关键步骤
  • HoYo.Gacha专业抽卡分析工具完全使用手册
  • FastMCP高级特性之Composition
  • 安卓手机投屏到电脑的开源软件(scrcpy)
  • 边缘计算开源项目终极指南:让物联网设备秒变智能终端
  • ForensicsTool取证工具完整安装配置指南:快速掌握电子数据取证技能
  • DeepSeek-V3 KV缓存技术:让AI对话像翻书一样流畅
  • SpringBoot进阶教程(八十八)获取图片的宽高
  • PeachPie 1.1.13 发布支持最新PHP 8.5.0
  • 电视也可以玩街机经典游戏,你的客厅,早就该变成这样了!
  • 掌握3个Mock工具,轻松玩转单元测试
  • AutoGen到Microsoft Agent Framework终极迁移指南:从零开始构建现代化AI代理系统
  • 2008-2024年地级市女性奥运冠军数据
  • 2003-2024年上市公司人工智能采纳程度数据+Stata代码
  • 问了 3 个博士,导师不说,但目前最新论文卡人的已经不是知网查重
  • CST设计:可重构超表面宽带窄带可切换吸收与多波束技术
  • ai智能搜索文献:高效精准的学术资源检索新工具与应用研究
  • 英文文献的高效检索与阅读策略研究
  • 万字长文!Agent及其主流框架终极指南(附对比图),好Agent的标准:自己想、自己干、自己复盘!
  • 打造专属问答社区,开源系统助力内容创业新风口
  • Apache Impala为啥TBDS、华为MRS弃用?为什么不能做到无缝切换平缓迁移
  • 从开发到上线:智能Agent的Docker部署全链路实践(含YAML模板)
  • 智能连接与自动化引擎的全能表单系统,重新定义数据收集与业务流程的协同
  • 如何彻底解决企业级数据流程编排难题:Apache DolphinScheduler完整指南
  • 深度学习框架生态竞争格局:从Stable Diffusion WebUI Forge看技术选型逻辑
  • better-sqlite3深度解析:Node.js数据库操作的性能革命
  • 终极AI平台wgai:零门槛构建国产化智能识别系统
  • 基于VUE的企业协同管理系统 [VUE]-计算机毕业设计源码+LW文档
  • 如何快速使用bandcamp-dl:命令行音乐下载工具的完整教程