fix: InitMultiAgent 携带 draft_id 等会商标识

与 Java 对齐:开跑前校验 draftId,并向 DeerFlow init 透传
draft_id / task_id(优先 draftKey) / room_session_id。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
gozerosandCursor committed 2026-11-05 11:15:56 +08:00
1 parent bd427b57a1
commit 5dd5049298
2 files changed
+37 -2

No files matched your search

+18 -1
View File
@@ -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) {
+19 -1
View File
@@ -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