From 5dd504929852d43771bb1a471f4268156182e439 Mon Sep 17 00:00:00 2001 From: gozeros Date: Thu, 5 Nov 2026 11:15:56 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20InitMultiAgent=20=E6=90=BA=E5=B8=A6=20dr?= =?UTF-8?q?aft=5Fid=20=E7=AD=89=E4=BC=9A=E5=95=86=E6=A0=87=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 与 Java 对齐:开跑前校验 draftId,并向 DeerFlow init 透传 draft_id / task_id(优先 draftKey) / room_session_id。 Co-authored-by: Cursor --- internal/deerflow/client.go | 19 ++++++++++++++++++- internal/worker/live_runner.go | 20 +++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/internal/deerflow/client.go b/internal/deerflow/client.go index 680a827..496c25f 100644 --- a/internal/deerflow/client.go +++ b/internal/deerflow/client.go @@ -79,8 +79,16 @@ func (c *Client) AssertModelAvailable(model string) error { return fmt.Errorf("所选模型「%s」不在可用列表中(或不可用)。请换可用模型后重新开始会商,不会自动改用其它模型", want) } +// InitMultiAgentOpts 内网 DeerFlow 校验会商标识时需要的附加字段。 +type InitMultiAgentOpts struct { + DraftID string + TaskID string + RoomSessionID string +} + // InitMultiAgent 建多席线程,返回 agentName → threadId。 -func (c *Client) InitMultiAgent(agentNames []string, mainAgent, model string) (map[string]string, error) { +// draft_id 在内网较新 Gateway 上是「会商标识」,缺了会 4xx。 +func (c *Client) InitMultiAgent(agentNames []string, mainAgent, model string, opts InitMultiAgentOpts) (map[string]string, error) { body := map[string]interface{}{ "agent_names": agentNames, "main_agent_name": mainAgent, @@ -88,6 +96,15 @@ func (c *Client) InitMultiAgent(agentNames []string, mainAgent, model string) (m if m := strings.TrimSpace(model); m != "" && !strings.EqualFold(m, "demo") { body["model"] = m } + if d := strings.TrimSpace(opts.DraftID); d != "" { + body["draft_id"] = d + } + if t := strings.TrimSpace(opts.TaskID); t != "" { + body["task_id"] = t + } + if r := strings.TrimSpace(opts.RoomSessionID); r != "" { + body["room_session_id"] = r + } threadIDs := map[string]string{} var errMsg string err := c.readSSE("/api/multi-agent/init", body, nil, func(event string, parsed map[string]interface{}) (bool, error) { diff --git a/internal/worker/live_runner.go b/internal/worker/live_runner.go index 6f56808..4223f3c 100644 --- a/internal/worker/live_runner.go +++ b/internal/worker/live_runner.go @@ -74,7 +74,25 @@ func (r *LiveChainRunner) Run(job *domain.AnalysisJob) { putProgress(job, 2, "正在初始化 DeerFlow 席位线程…") r.flush(job) r.pullModelFromDB(job) - tids, err := r.DF.InitMultiAgent(agentNames, r.Coord, job.Model) + if strings.TrimSpace(job.DraftID) == "" { + r.fail(job, "缺少会商标识(draftId)。请从页面重新「开始研讨」以先落盘草稿。") + return + } + roomSessionID := asStr(plan["roomSessionId"]) + if roomSessionID == "" { + roomSessionID = "rs_" + jobID + plan["roomSessionId"] = roomSessionID + job.Plan = plan + } + dfTaskID := strings.TrimSpace(job.DraftKey) + if dfTaskID == "" { + dfTaskID = job.TaskID + } + tids, err := r.DF.InitMultiAgent(agentNames, r.Coord, job.Model, deerflow.InitMultiAgentOpts{ + DraftID: job.DraftID, + TaskID: dfTaskID, + RoomSessionID: roomSessionID, + }) if err != nil { r.fail(job, err.Error()) return