首页 > HZERO Docker版, 默认 > HZERO PaaS平台-Docker版demo笔记(二)Docker版测试 问题21-25

HZERO PaaS平台-Docker版demo笔记(二)Docker版测试 问题21-25

2026年3月11日

问题二十一、如何用上最新的Kimi k2.5模型?

进入Kimi开放平台:platform.moonshot.cn

点击【开始构造】按照提示进行注册,认证,获得Apikey

Kimi K2.5的官方文档中的对接API调用说明:

$ curl https://api.moonshot.cn/v1/chat/completions \
    -H “Content-Type: application/json” \
    -H “Authorization: Bearer $MOONSHOT_API_KEY” \
    -d ‘{
        “model”: “kimi-k2.5”,
        “messages”: [
            {“role”: “user”, “content”: “你好”}
        ],
        “thinking”: {“type”: “disabled”}
   }’

新建最新的kimi K2.5模型对接时,返回错误:

模型清求产生未知异常,请稍后重试,异常信息为: [WebClientResponseException: 400 error,{“error”:”message”:”invaid temperature: only 0.6 is

allowed for this model”,”type”:”invalid request error”}}]

产研说 如果模型温度只能0.6吗。 这个暂不支持设置,需要用私有模型对接的方法做映射来处理:模型类型选择:对话-私有大模型

认证类型选:自定义键值认证。

自定义配置填写:Bearer+空格+APIKey

然后自定义请求映射和响应映射:

%dw 2.0 

output application/json

import dw::core::Binaries

import dw::core::URL                

// 核心优化:自动识别图片MIME类型,不再写死PNG

fun getImageMimeType(imageUrl: String) = do {

    // 方案1:从URL后缀识别(简单通用,无额外请求)

    var urlLower = lower(imageUrl) // Convert URL to lowercase

    var mimeType =

        if (urlLower endsWith “.png”) “image/png”

        else if (urlLower endsWith “.jpg”) “image/jpeg”

        else if (urlLower endsWith “.jpeg”) “image/jpeg”

        else if (urlLower endsWith “.webp”) “image/webp”

        else if (urlLower endsWith “.gif”) “image/gif”

        else “image/png” // Default to PNG if no match

    —

    mimeType

}

fun urlToBase64(imageUrl: String) = do {

    var bytes = readUrl(imageUrl, “application/octet-stream”)

    var base64 = Binaries::toBase64(bytes)

    var mimeType = getImageMimeType(imageUrl)

    —

    “data:” ++ mimeType ++ “;base64,” ++ base64

}

fun mappingMessages(messages) =

    messages map ((item) -> {

        role: item.role,

        content: item.content map ((contentItem) -> {

            `type`: if (contentItem.`type` == ‘image’)

                “image_url”

            else 

                contentItem.`type`,

            image_url: if (contentItem.image startsWith “http”)

                urlToBase64(contentItem.image)

            else 

                contentItem.image,

            text: contentItem.text

        })

    })

—        

{

        messages: mappingMessages(payload.messages),

        stream: payload.stream,

        temperature:0.6,

        max_tokens: payload.maxTokens,

        tools: payload.tools,

    model:”kimi-k2.5″

}

备注:我对接的时候,提示要求温度0.6,但 另一个同事对接的时候要求1.0 ,这个可以根据提示调整。

另外kimi更新了function call的调用规范要求,从functions: payload.functions改成了:tools: payload.tools,

%dw 2.0        

output application/json

fun mergeMessage(choices) = (

 choices reduce ((item, acc = “”) -> acc ++ item.message.content))

fun mergeStreamMessage(choices) = (

  choices reduce ((item, acc = “”) ->

    acc ++ (item.delta.content default “”)

  )

)

fun mappingUsage(usage) = (

  if(isEmpty(usage)) {

    promptTokens: 0,

    completionTokens: 1,

    totalTokens: 1

  } else {

    promptTokens: usage.prompt_tokens,

    completionTokens: usage.completion_tokens,

    totalTokens: usage.total_tokens

  }

)

fun mappingStreamUsage(choices) = do {

  var choice = choices[0]

  var usage = choice.usage

  —

  if(“stop” == choice.finish_reason)

    {

      promptTokens: usage.prompt_tokens,

      completionTokens: usage.completion_tokens,

      totalTokens: usage.total_tokens

    }

  else 

    {

      promptTokens: 0,

      completionTokens: 0,

      totalTokens: 0 

    }

}

fun mappingResult(payload) = (

  {

    created: payload.created,

          id: payload.id,

          isEnd: true,

          object: payload.object,

          message: mergeMessage(payload.choices),

    usage: mappingUsage(payload.usage)

  }

)

fun mappingStreamResult(payload) = (

  if (payload is Object)

   {

    created: payload.created,

          id: payload.id,

          isEnd: false,

          object: payload.object,

          message: mergeStreamMessage(payload.choices),

    usage: mappingStreamUsage(payload.choices)

  } else 

   {

    created: payload.created,

          id: payload.id,

          isEnd: true,

          message: “”,

          object: payload.object

    }

)

fun mappingDoneResult() = (

   {

          isEnd: true,

          message: “”

    }

)

— 

if (content == “[DONE]”)

    mappingDoneResult()

  else 

    if (payload.object == “chat.completion”)

      mappingResult(payload)

    else 

      mappingStreamResult(payload)

映射脚本是DW 2.0语法,DataWeave 2.0(DW 2.0)是 MuleSoft 专属的数据转换领域专用语法,核心用于不同系统间的数据映射、格式转换(如 JSON/XML/CSV 互转),语法设计上偏向函数式 + 声明式。 对这个语法豆包和元宝的排错能力有限,通常不能给出正确的建议。 如果有错误,建议用chatgpt排错。

配置后可成功测试:

问题二十二、AI平台对话助手应用上的偶发性问题

重点:此类问题都可以通过刷新页面解决。

有一次在对话助手,上传文件是碰到json 解析错误:

Hzero-aip-server服务的日志中可以看到错误信息:

2026-02-13T16:20:35.090+08:00 DEBUG 130241 — [hzero-aip] [  XNIO-1 task-3] o.h.s.i.mvc.InvokeDecryptionFilter       : Request cipher condition mismatch, receive POST “/v1/open/documents/personal”, headers={H-Invoke-Encryption: null}

2026-02-13T16:20:35.100+08:00 ERROR 130241 — [hzero-aip] [  XNIO-1 task-3] o.h.core.exception.BaseExceptionHandler  : Unknown runtime exception, Request: {URI=/v1/open/documents/personal}, User: CustomUserDetails{userId=2, username=admin, roleId=1, roleIds=[1, 2, 9], siteRoleIds=[1, 9], tenantRoleIds=[2], roleMergeFlag=false, secGrpIds=[], tenantId=0, tenantIds=[2, 0], organizationId=0, isAdmin=true, clientId=null, timeZone=’GMT+9, language=’zh_CN, roleLabels='[MODEL_PLATFORM_ADMIN, LOWCODE_PLATFORM_ADMIN], apiEncryptFlag=1}

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.lang.Long` from String “instance-monitor”: not a valid `java.lang.Long` value

at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:409) ~[spring-web-6.2.1.jar!/:6.2.1]

at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:357) ~[spring-web-6.2.1.jar!/:6.2.1]

at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:204) ~[spring-webmvc-6.2.1.jar!/:6.2.1]

at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:176) ~[spring-webmvc-6.2.1.jar!/:6.2.1]

然后我刷新也页面后这个错误就没有了。

刚开始以为是更换账户组合中的模型生效/失效引起的,但后来测试发现也未能重现这个问题。于是尝试重现问题:保持当前的AI对话助手窗口不刷新,更改多模态账户组合中的生效账户,然后再次上传图片,就会出现这种错误:

然后回到 对话助手界面,不刷新页面,直接上传文件,发现又是正常的,未能重现问题:

那上次碰到那个需要刷新页面的问题可能是session过期导致的?

但是我来回把两个模型生效/失效 切换多次,多试几次就能试出问题:

会出现模型XX不可用的错误:

这个时候,你刷新后再试就正常了:

总结:以后碰到此类莫名其妙的问题,现尝试刷新页面解决。

问题二十三、Agent编排:应用导航编辑保存出错问题

系统内置的Agent编排:应用导航编辑保存出错,界面上提示:请联系管理员,报错信息明细中提示:Expected one result (or null) to be returned by selectOne(), but found: 2″

打开HZERO-AIP服务(aip-server)的服务日志,看到报错也是期望获得单条数据的地方实际返回超过一条。没有debug模式的情况下,日志没有显示具体的SQL语句。

在hzero-aipserer-docker的容器配置docker-compose.yml中设置环境变量,- LOG_LEVEL=debug 启用debug模式,在重启该容器:

## 要求Docker/Docker CE >= 19.x

services:

  hzero-aip-server:

    image: hzero-aip-server-jk-demo:1.12

    container_name: hzero-aip-server

    ports:

      – “8270:8270”

      – “8271:8271”

    environment:

      – JAVA_OPTS=-Xms128m -Xmx2000m -Dspring.profiles.active=dev

      – AGENT=-javaagent:/license-agent112a.jar

      – LOG_LEVEL=debug

    deploy:  # 限制容器总内存(Docker Compose v2.3+)

      resources:

        limits:

          memory: 3000m  # 容器最大内存(建议为 JVM 内存的 1.5~2 倍)

networks:

  default:

    name: hzero-demo

external: true

然后再次执行,看日志:

把SQL语句和参数替换后再执行,返回结果有两条:

看SQL语句和实际数据,问题原因是这个Agent编排的历史版本的激活标志应该为0,但不知为何实际数据是1,所有要修复数据,改成0

修改后在界面上再次保存就不会报错,正常了。

另一个问题是,运行 企业应用导航的时候,可能会遇到提示“应用[企业应用导航]未分配编排或没有编排执行权限,请联系管理员”

解决这个问题可以在Agent编排的编辑处,权限管理从白名单改成黑名单即可:

然后运行这个应用的时候,可能没有效果:

这个原因可能是 企业应用导航这个Agent编排用到的菜单列表字典的向量化不正常:

图中的问题是 因为种子数据导入的时候,向量库集合 这个字段本应留空,然后部署后重新同步向量,让系统重新生成这个集合的。但实际上没有留空,导致系统以为向量库已经存在这个集合,但实际不存在,从而导致向量同步错误。

解决方案是,从后台数据库做datafix,把这个字段删除,重新同步:

然会回到界面:再次重新同步还是失败:

错误信息是:


2026-03-05T14:55:48.737+08:00 ERROR 8996 — [hzero-aip] [    dict-pool-7] .a.d.s.q.DictionaryScheduledSynchronizer : sync dictionary error

org.hzero.core.exception.ValidateFailureException: [collectionName must not be blank; ]
        at org.hzero.core.base.DefaultValidationResultProcessor.process(DefaultValidationResultProcessor.java:43) ~[hzero-starter-core-1.12.1.RELEASE.jar!/:1.12.1.RELEASE]
        at org.hzero.core.util.ValidUtils.valid(ValidUtils.java:59) ~[hzero-starter-core-1.12.1.RELEASE.jar!/:1.12.1.RELEASE]
        at org.hzero.core.base.BaseAppService.validObject(BaseAppService.java:35) ~[hzero-starter-core-1.12.1.RELEASE.jar!/:1.12.1.RELEASE]
        at org.hzero.aip.app.service.impl.VectorCollectionServiceImpl.create(VectorCollectionServiceImpl.java:95) ~[hzero-aip-server-1.6.1.ALPHA.6.13.jar!/:1.6.1.ALPHA.6.13]


解决方案:

把原来那个字典删除掉(删除之前先把字典值导出),然后重新新建一个词典,词典名称和词典编码(HAIP.APPLICATION_LINK)跟原来保持一致,新建之后再把词典值导入进来,执行导入的动作会自动同步向量,这次向量同步成功了。

看向量库集合,里面也确实有了,是自动新增的:

再次执行应用导航,成功了:

问题二十四、Agent编排:简易智能体 AutoAgent运行报错:

错误信息:

java.lang.ClassCastException: org.hzero.aip.model.domain.vo.response.content.FailureResp incompatible with org.hzero.aip.model.domain.vo.response.content.chat.ChatCommonResp
        at org.hzero.aip.model.infra.helper.SyncResponseHelper.apply(SyncResponseHelper.java:98)

Hzero-aip-app服务中的错误信息:

2026-03-05 11:31:18.231 | org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request on POST request for “https://ark.cn-beijing.volces.com/api/v3/chat/completions”: “{“error”:{“code”:”InvalidParameter”,”message”:”‘messages’ must contain the word ‘json’ in some form, to use ‘response_format’ of type ‘json_object’. Request id: 021772681472981c54cfbc8e773a7e1d131d5b1cad603e0f69745″,”param”:””,”type”:”BadRequest”}}”

产研说这个问题在 hzero-aip-app  1.6.1.ALPHA.7.1 中解决了,我现在的版本是hzero-aip-app  1.6.1.ALPHA.6.13, 执行升级,再测:OK了:

问题二十五、低代码平台在删除页面后再 删除业务对象失败

删除业务对象时报错:”exception”: “Not found [PAGE_STRUCTURE], [B0] PivotProvider

Modeler服务后台错误是:io.choerodon.core.exception.ext.IllegalArgumentException: Not found [PAGE_STRUCTURE], [BO] PivotProvider.

at org.hzero.boot.modeler.pivot.PivotProviderManager.getPivotProvider(PivotProviderManager.java:269) ~[hzero-boot-modeler-client-2.10.2-1.12.BETA.4.jar!/:2.10.2-1.12.BETA.4]

产研说是部署问题,删除一下 redis db1 下的 apaas:pivot:provider 这个key,然后重启一下 modeler 和 lowcode 应该就好了。

重启服务之后,再试依然报错:

服务中错误信息:io.choerodon.core.exception.ext.IllegalArgumentException: Not found [PAGE_STRUCTURE], [BO] PivotProvider.

看redis中的键值,只有7个,比正常的10个少了3个;

第二天所有服务重启之后,键值恢复到10个:但是_US和_CN中还是只有7个;

测试删除业务对象还是报同样错误。

不过 ,我发现非Docker环境是可以正常删除业务对象的,而非docker环境的redis中的键值比Docker环境中多,看起来是Docker环境的Redis中键值有缺失。

另外产业看到我的Docker环境中lowcode服务的版本 还是 2.10.0-1.12.RELEASE版本的,我比较了下非Docker环境版本是2.10.2-1.12.BETA.2的,modeler服务的版本是2.10.2-1.12.BETA.4,所以docker环境的版本要升级下。

执行:升级Docker环境的lowcode服务到2.10.2-1.12.BETA.4, 再次测试,可以正常删除业务对象了。 redis中 _CN 和 _US中键值的数量也不缺了。

问题解决。

 

 

关于作者:

昵称:Jack.shang
档案信息:jack.shang 程序员->项目经理->技术总监->项目总监->部门总监->事业部总经理->子公司总经理->集团产品运营支持
联系方式:你可以通过syfvb@hotmail.com联系作者
点击查看发表过的所有文章...
本文永久链接: http://blog.retailsolution.cn/archives/5655

 

 

对本文的评价:

 

 

分类: HZERO Docker版, 默认 标签:
本文的评论功能被关闭了.