langchain4j与Ollama交互异常:角色值大小写导致聊天失效
问题判定:langchain4j v0.32.0的Bug,无对应配置项
问题本质:Ollama v0.2.3的
/api/chat接口严格要求消息角色为小写格式("user"/"system"/"assistant"),但langchain4j v0.32.0中的Role枚举默认会被序列化为大写值("USER"/"SYSTEM"/"ASSISTANT"),导致Ollama无法正确识别消息角色,进而返回与查询无关的随机响应。排除Ollama的问题:Ollama官方API规范明确角色字段为小写,且实际测试已验证——使用小写角色能得到正确响应,大写角色则失效,Ollama的行为符合自身定义的接口规则。
无可用配置项:langchain4j v0.32.0的Ollama集成模块未提供外部配置项来修改角色的JSON序列化规则,无法通过配置绕过这个问题,必须通过修改源码或自定义序列化逻辑解决。
已验证的解决方案
修改langchain4j的dev.langchain4j.model.ollama.Role枚举类,添加@SerializedName注解指定小写序列化值:
package dev.langchain4j.model.ollama; import com.google.gson.annotations.SerializedName; enum Role { @SerializedName("system") SYSTEM, @SerializedName("user") USER, @SerializedName("assistant") ASSISTANT; }
内容的提问来源于stack exchange,提问作者JanDasWiesel
相关产品推荐
相关产品推荐

