code: 400 - {'error': {'message': "Invalid 'input[2].name': empty string. Expect...

2026年05月09日 14:56 processing

错误信息

Error code: 400 - {'error': {'message': "Invalid 'input[2].name': empty string. Expected a string with minimum length 1, but got an empty string instead. (request id: 202605090653213015162558268d9d6ObPR7axB)", 'type': 'invalid_request_error', 'param': 'input[2].name', 'code': 'empty_string'}} 这个是请求hermes herme配置的是中转api

AI 解决方案

错误分析

1. 错误翻译

原文:Invalid 'input[2].name': empty string. Expected a string with minimum length 1, but got an empty string instead.
译文:'input[2].name' 无效:空字符串。期望一个最小长度为1的字符串,但实际得到的是一个空字符串。

2. 原因分析
根本原因:您向API(通过中转服务)发送的请求体中,input数组里第三个元素(索引为2)的 name 字段值为空字符串 ("")
具体位置:错误明确指出了参数路径 input[2].name。API的验证规则要求此字段为非空字符串
上下文:这通常发生在构造对话或消息列表时,某个消息对象的 namerole 字段被错误地赋值或留空。

3决方案
检查并修正您构造请求体的代码,确保 input[2] 对象的 name 字段有有效值。以下是对比示例:

# ❌ 错误的请求数据结构 (input[2].name 为空)
request_data = {
    "input": [
        {"name": "user", "content": "你好"},  # input[0]
        {"name": "assistant", "content": "你好!"}, # input[1]
        {"name": "", "content": "今天天气怎么样?"}  # input[2] - 错误:name为空字符串
    ],
    # ... 其他参数
}

# ✅ 修正后的请求数据结构
request_data = {
    "input": [
        {"name": "user", "content": "你好"},  # input[0]
        {"name": "assistant", "content": "你好!"}, # input[1]
        {"name": "user", "content": "今天天气怎么样?"}  # input[2] - 修正:name为有效的"user"
    ],
    # ... 其他参数
}

请定位您代码中构建 input 数组的部分,特别是第三个元素,为其 name 字段赋予正确的值(通常是 "user""assistant")。

4. 预防措施
数据校验:在将请求发送到中转API之前,在代码层面增加对请求体的校验逻辑,确保所有必填字段(如 name)都符合格式要求(非空、有效枚举值等)。

  • 明确数据结构:使用数据模型(如Pydantic、Dataclass)来定义请求体的结构,这可以在序列化之前就捕获类似 name 为空的错误。

  •     from pydantic import BaseModel, Field
    
        class Message(BaseModel):
            name: str = Field(min_length=1)  # 强制要求name字段非空
            content: str
    
        # 构造数据时会自动校验
        messages = [
            Message(name="user", content="你好"),
            Message(name="assistant", content="你好!"),
            Message(name="user", content="今天天气怎么样?")  # name为空会在此处报错
        ]