这个报错的本质是:你在把 HumanMessage(通常是 LangChain 的消息对象)直接 json.dumps() / 作为参数发给需要 JSON 的接口时,HumanMessage 不是标准可序列化类型,所以报 not JSON serializable。
解决思路(常用)
1)把消息转换成“纯 JSON 字段”(推荐)
不要直接序列化 HumanMessage 对象,而是取出它的内容/role后再组装。
例如(伪代码,按你用的库微调):
from langchain_core.messages import HumanMessage
msgs = [HumanMessage(content="hi")]
payload_messages = [
{"role": "user", "content": m.content}
for m in msgs
]
# 再对 payload_messages 做 json 序列化/请求
如果你用的是 BaseMessage,一般也可以统一用:
m.content-
m.type/m.role(不同版本字段名可能略不同)
2)改用库自带的序列化/入参格式
很多模型/链组件(比如 OpenAI Chat 系列、LangChain 的某些调用)其实已经接受 messages 对象,不需要你手动 JSON。
排查点:你是不是把 messages 放进了 requests.post(json=...)?
- 若是:确认目标接口是否期望 LangChain 的
messages对象还是“JSON结构”。
3)如果你必须 json.dumps:实现自定义转换
临时兜底做法:
import json
from langchain_core.messages import HumanMessage
def default(o):
if isinstance(o, HumanMessage):
return {"role": "user", "content": o.content}
raise TypeError
print(json.dumps(obj, default=default))
但更建议按方案 1/2 从源头改 payload。
我需要你补充2点,才能给你精确改法
- 你是用
requests还是某个 SDK 发请求?把报错那行代码(尤其是构造 json 的部分)贴一下。 - 你的
HumanMessage是来自哪套库(LangChain / langchain-core / 其他),以及你发给哪个接口(URL/函数名)?
把这两点发我,我可以直接给你对应的正确 payload 写法。