付公司网站费用怎么做分录小游戏秒玩入口

张小明 2026/1/12 9:39:02
付公司网站费用怎么做分录,小游戏秒玩入口,私域电商平台排名,中国最厉害的网站建设公司、支持哪些聊天模型#xff1f;支持聊天模型#xff0c;其实是支持接口风格。比如 DeepSeek-V3 官网的接口兼容 openai#xff1b;在 ollama 平台是另一种接口风格#xff1b;在阿里百炼则有两种接口风格#xff0c;一种兼容 openai#xff0c;另一种则是百炼专属风格支持聊天模型其实是支持接口风格。比如 DeepSeek-V3 官网的接口兼容 openai在 ollama 平台是另一种接口风格在阿里百炼则有两种接口风格一种兼容 openai另一种则是百炼专属风格在模力方舟ai.gitee则是兼容 openai。聊天模型的这种接口风格称为聊天方言简称方言。ChatConfig 通过 provider 或 apiUrl识别模型服务是由谁提供的。并自动选择对应的聊天方言适配。框架内置的方言适配有言方 配置要求 描述openai 兼容 openai 的接口规范默认ollama providerollama 兼容 ollama 的接口规范dashscope providerdashscope 兼容 dashscope 阿里云的平台百炼的接口规范v3.5.1 后基于 apiUrl 自动识别不要配置 provider那支持哪些聊天模型所有兼容 openai 的平台服务比如“模力方舟”、“硅基流动”、“魔搭社区魔力空间”、“Xinference”、“火山引擎”、“智谱”、“讯飞火星”、“百度千帆”、“阿里百炼” 等都兼容所有 ollama 平台上的模型都兼容所有 阿里百炼 平台上的模型同时提供有 “百炼” 和 “openai” 两套接口都兼容构建示例ChatModel chatModel ChatModel.of(http://127.0.0.1:11434/api/chat) //使用完整地址而不是 api_base.provider(ollama).model(llama3.2).headerSet(x-demo, demo1).build();2、自带的方言依赖包方言依赖包 描述org.noear:solon-ai 包含 solon-ai-core 和下面所有的方言包。一般引用这个org.noear:solon-ai-dialect-openai 兼容 openai 的方言包org.noear:solon-ai-dialect-ollama 兼容 ollama 的方言包org.noear:solon-ai-dialect-dashscope 兼容 dashscope 的方言包提醒一般匹配不到方言时要么是 provider 配置有问题要么是 pom 缺少相关的依赖包。3、聊天方言接口定义public interface ChatDialect extends AiModelDialect {//是否为默认default boolean isDefault() {return false;}//匹配检测boolean matched(ChatConfig config);//构建请求数据String buildRequestJson(ChatConfig config, ChatOptions options, ListChatMessage messages, boolean isStream);//构建助理消息节点ONode buildAssistantMessageNode(MapInteger, ToolCallBuilder toolCallBuilders);//构建助理消息根据直接返回的工具消息AssistantMessage buildAssistantMessageByToolMessages(ListToolMessage toolMessages);//分析响应数据boolean parseResponseJson(ChatConfig config, ChatResponseDefault resp, String respJson);//分析工具调用ListAssistantMessage parseAssistantMessage(ChatResponseDefault resp, ONode oMessage);}3、OllamaChatDialect 定制参考如果方言有组件注解会自动注册。否则需要手动注册ChatDialectManager.register(new OllamaChatDialect());方言定制参考import org.noear.snack4.ONode;import org.noear.solon.Utils;import org.noear.solon.ai.AiMedia;import org.noear.solon.ai.AiUsage;import org.noear.solon.ai.media.Audio;import org.noear.solon.ai.chat.ChatChoice;import org.noear.solon.ai.chat.ChatConfig;import org.noear.solon.ai.chat.ChatException;import org.noear.solon.ai.chat.ChatResponseDefault;import org.noear.solon.ai.chat.dialect.AbstractChatDialect;import org.noear.solon.ai.chat.message.AssistantMessage;import org.noear.solon.ai.chat.message.UserMessage;import org.noear.solon.ai.chat.tool.ToolCall;import org.noear.solon.ai.chat.tool.ToolCallBuilder;import org.noear.solon.ai.media.Image;import org.noear.solon.ai.media.Video;import org.noear.solon.core.util.DateUtil;import java.util.Date;import java.util.List;import java.util.Map;import java.util.stream.Collectors;/*** Ollama 聊天模型方言** author noear* since 3.1*///Componentpublic class OllamaChatDialect extends AbstractChatDialect {private static OllamaChatDialect instance new OllamaChatDialect();public static OllamaChatDialect getInstance() {return instance;}/*** 匹配检测** param config 聊天配置*/Overridepublic boolean matched(ChatConfig config) {return ollama.equals(config.getProvider());}Overrideprotected void buildChatMessageNodeDo(ONode oNode, UserMessage msg) {oNode.set(role, msg.getRole().name().toLowerCase());if (Utils.isEmpty(msg.getMedias())) {oNode.set(content, msg.getContent());} else {oNode.set(content, msg.getContent());AiMedia demo msg.getMedias().get(0);if (demo instanceof Image) {oNode.set(images, msg.getMedias().stream().map(i - i.toDataString(false)).collect(Collectors.toList()));} else if (demo instanceof Audio) {oNode.set(audios, msg.getMedias().stream().map(i - i.toDataString(false)).collect(Collectors.toList()));} else if (demo instanceof Video) {oNode.set(videos, msg.getMedias().stream().map(i - i.toDataString(false)).collect(Collectors.toList()));}}}Overridepublic ONode buildAssistantMessageNode(MapInteger, ToolCallBuilder toolCallBuilders) {ONode oNode new ONode();oNode.set(role, assistant);oNode.set(content, );oNode.getOrNew(tool_calls).asArray().then(n1 - {for (Map.EntryInteger, ToolCallBuilder kv : toolCallBuilders.entrySet()) {//有可能没有n1.addNew().set(id, kv.getValue().idBuilder.toString()).set(type, function).getOrNew(function).then(n2 - {n2.set(name, kv.getValue().nameBuilder.toString());n2.set(arguments, ONode.ofJson(kv.getValue().argumentsBuilder.toString()));});}});return oNode;}Overridepublic boolean parseResponseJson(ChatConfig config, ChatResponseDefault resp, String json) {//解析ONode oResp ONode.ofJson(json);if (oResp.isObject() false) {return false;}if (oResp.hasKey(error)) {resp.setError(new ChatException(oResp.get(error).getString()));} else {resp.setModel(oResp.get(model).getString());resp.setFinished(oResp.get(done).getBoolean());String done_reason oResp.get(done_reason).getString();String createdStr oResp.get(created_at).getString();if (createdStr ! null) {createdStr createdStr.substring(0, createdStr.indexOf(.) 4);}Date created DateUtil.parseTry(createdStr);ListAssistantMessage messageList parseAssistantMessage(resp, oResp.get(message));for (AssistantMessage msg1 : messageList) {resp.addChoice(new ChatChoice(0, created, done_reason, msg1));}if (resp.isFinished()) {long promptTokens oResp.get(prompt_eval_count).getLong();long completionTokens oResp.get(eval_count).getLong();long totalTokens promptTokens completionTokens;resp.setUsage(new AiUsage(promptTokens, completionTokens, totalTokens, oResp));if(resp.hasChoices() false) {resp.addChoice(new ChatChoice(0, created, stop, new AssistantMessage()));}}}return true;}Overrideprotected ToolCall parseToolCall(ONode n1) {int index -1; //n1.get(index).getInt();它是没有值的String callId n1.get(id).getString();ONode n1f n1.get(function);String name n1f.get(name).getString();ONode n1fArgs n1f.get(arguments);String argStr n1fArgs.getString();index name.hashCode();if (n1fArgs.isValue()) {//有可能是 json stringn1fArgs ONode.ofJson(argStr);}MapString, Object argMap null;if (n1fArgs.isObject()) {argMap n1fArgs.toBean(Map.class);}return new ToolCall(index, callId, name, argStr, argMap);}}
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

昆明网站定制开发网站开发后端所需要的语言

C015基于博途西门子1200PLC立体车库33控制系统仿真C015立体车库33S71200HMI主电路图外部接线图IO分配表参考文章资料包含: 1.程序和HMI仿真工程(博图V16及以上版本可以打开) 2.PLC端口定义IO分配表1份 3.PLC外部接线图CAD版本和PDF版本各1份 …

张小明 2026/1/3 13:54:05 网站建设

怎样注册网站免费的网站面板

还在为AI绘画无法精确控制构图而烦恼吗?ControlNet的出现彻底改变了这一现状。通过创新的神经网络结构设计,ControlNet能够在保持Stable Diffusion原有创造力的同时,实现对输出图像的精确控制。无论你是想要按照指定边缘线条生成图像&#xf…

张小明 2025/12/29 21:16:08 网站建设

网站源码带采集网站对联广告素材

LangFlow与Origin数据分析软件联动应用探索 在科研和工程实践中,我们常常面临一个矛盾:一方面,大语言模型(LLM)具备强大的语义理解与信息提取能力;另一方面,专业级数据可视化仍依赖如 Origin 这…

张小明 2026/1/11 20:31:27 网站建设

时尚女装网站设计图图网

工业控制设备中LCD显示屏低功耗实现:从硬件优化到系统级节能的实战路径在一间典型的工业自动化车间里,PLC操作面板上的TFT-LCD屏幕正持续显示着产线运行状态。它清晰、直观,是工程师与机器沟通的“窗口”。但很少有人意识到——这块看似不起眼…

张小明 2026/1/7 23:24:38 网站建设

邯郸企业做网站网页app制作教程

Postman便携版:3步开启Windows免安装API测试新时代 【免费下载链接】postman-portable 🚀 Postman portable for Windows 项目地址: https://gitcode.com/gh_mirrors/po/postman-portable 还在为复杂的API测试工具安装流程而头疼吗?Po…

张小明 2026/1/7 20:54:00 网站建设

清远市网站建设公司文交所网站开发

文章详细解析了AI行业五大核心岗位(AI产品经理、解决方案专家、应用工程师、算法工程师、运营/数据运营)的职责、薪资与技能要求。指出当前是入局AI的最佳时机,尤其对有产品、技术或行业背景的人士。AI产品经理需理解模型原理、掌握数据准备、…

张小明 2026/1/3 12:13:34 网站建设