报错日志: {"level":"info","timestamp":"2026-10-28T08:53:36.517+0800","caller":"multiagent/eino_run_usage_accumulator.go:95","msg":"eino token usage summary","conversationId":"8ff82ae6-4d79-4bc8-bbad-6839c9602669","orchestration":"deep","reason":"partial","modelCalls":1,"promptTokens":62618,"completionTokens":8192,"totalTokens":70810,"cachedTokens":0,"reasoningTokens":0} {"level":"error","timestamp":"2026-10-28T08:53:36.532+0800","caller":"handler/multi_agent.go:380","msg":"Eino DeepAgent 执行失败","error":"[NodeRunError] error, status code: 400, status: 400 Bad Request, message: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)\n------------------------\nnode path: [node_1, ChatModel]","stacktrace":"cyberstrike-ai/internal/handler.(*AgentHandler).MultiAgentLoopStream\n\t/root/CyberStrikeAI/internal/handler/multi_agent.go:380\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/home/go/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174\ncyberstrike-ai/internal/app.setupRoutes.RBACMiddlewareWithDenyHook.func32\n\t/root/CyberStrikeAI/internal/security/rbac_middleware.go:57\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/home/go/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174\ncyberstrike-ai/internal/app.setupRoutes.AuthMiddleware.func31\n\t/root/CyberStrikeAI/internal/security/auth_middleware.go:45\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/home/go/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174\ncyberstrike-ai/internal/app.corsMiddleware.func1\n\t/root/CyberStrikeAI/internal/app/app.go:2220\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/home/go/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174\ngithub.com/gin-gonic/gin.CustomRecoveryWithWriter.func1\n\t/home/go/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/recovery.go:102\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/home/go/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174\ngithub.com/gin-gonic/gin.LoggerWithConfig.func1\n\t/home/go/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/logger.go:240\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/home/go/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/context.go:174\ngithub.com/gin-gonic/gin.(*Engine).handleHTTPRequest\n\t/home/go/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/gin.go:620\ngithub.com/gin-gonic/gin.(*Engine).ServeHTTP\n\t/home/go/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/gin.go:576\ngolang.org/x/net/http2.(*serverConn).runHandler\n\t/home/go/go/pkg/mod/golang.org/x/net@v0.53.0/http2/server.go:2496"} [GIN] 2026/10/28 - 08:53:36 | 200 | 168.209µs | 10.1.19.81 | GET "/api/agent-loop/tasks"
AI分析第一个 ChatModel 成功(usage 记录:prompt 62618 / completion 8192),exec 工具跑完、返回结果后,第二个 ChatModel 把工具结果塞回对话就 400 了。差异只在于「工具返回结果」这条消息。 错误在 line 1 column 2 (char 1) = body 开头就是 {+非法字符。这与「消息中间的工具结果坏掉」的直觉矛盾——除非工具结果被当成原始 JSON 片段(json.RawMessage)内联注入,而不是转义字符串