找回密码
 立即注册
首页 业界区 业界 通义深度搜索-生成对话

通义深度搜索-生成对话

溶绚 2 小时前
产品链接
面向深度的查询问答和调研分析需求场景,多步骤推理规划研究路径,生成有洞察、可溯源、图文并茂的长文报告-大模型服务平台百炼(Model Studio)-阿里云帮助中心
本产品(通义深度搜索)对外服务接口目录。所有接口使用 DashScope HTTP 协议对外提供服务。
基于智能体应用管理提供的 agent_id 与 agent_version 信息,提供场景化对话、研究、写作相关能力。
请求语法
  1. POST /deep-search-agent/chat/completions HTTP/1.1
复制代码
请求参数

参数名类型是否必须说明streambool是必须填 true,当前版本仅支持流式响应。若提供false或不提供,请求将失败inputobject是输入字段input.request_idstr否请求ID(业务自定义)input.messagesarray[object]是对话消息input.messages.[].rolestr是角色,枚举值为:user、assistantinput.messages.[].contentstr是生成内容parametersobject是配置参数字段parameters.agent_optionsobject是智能体专用参数parameters.agent_options.agent_idstring是应用IDparameters.agent_options.agent_versionstring是应用版本parameters.agent_options.session_filesarray[string]否动态文件 ID 列表,文件 ID 的获取参考文件上传文档,最大支持传入10个文件ID返回参数

参数名类型是否必须说明request_idstr是请求ID(dashscope 平台)codestr是状态码(成功:200)messagestr是状态信息outputobject是输出字段output.request_idstr否请求ID(业务自定义)output.choicesarray[object]是模型输出信息output.choices.[].finish_reasonstr是生成结束原因,仅尾包输出stopoutput.choices.[].messageobject是对话消息output.choices.[].message.rolestr是角色,枚举值为:user、assistant、tooloutput.choices.[].message.contentstr | array[object]是生成内容/工具返回内容,当生成配置开启输出报告时,报告消息体类型为array[object]output.choices.[].message.reasoning_contentstr否思考内容,如果 content内没有内容,则尝试获取最后一轮深度思考中的reasoning_content内容output.choices.[].message.tool_callsarray[object]否工具调用信息output.choices.[].message.tool_calls[0].argumentsdcit[str,object]否工具调用参数output.choices.[].message.tool_calls[0].namestr否工具调用名称output.choices.[].message.additional_kwargs.extra_jsonAny否工具调用返回时,携带结构化输出信息output.choices.[].message.extradict否步骤状态信息output.choices.[].message.extra.groupstr否执行阶段output.choices.[].message.extra.step_changestr否步骤变化事件output.choices.[].message.extra.stepstr否当前步骤output.choices.[].message.response_metadatadict否请求模型调用详细信息output.usageobject否用量统计output.usage.input_tokensint否输入 tokensoutput.usage.output_tokensint否输出 tokensoutput.usage.total_tokensint否总 tokens计划枚举

执行阶段(**group**描述说明planning计划中对应plan模型,即系统处于任务规划阶段,该阶段包含 start 和 end 事件generating生成中表示为写作模型,表示系统正处于报告生成阶段,此阶段不区分详细事件变化,无 start/end 事件;step 状态仅包括 thinking 和 generating,且不会调用工具。当前步骤(**step**描述和说明planning计划中thinking思考中reporting总结中(法律场景特有)generating生成中tool_calling工具调用中tool_calling_工具调用中,附带工具名称

  • 由于模型原因 step_change 值可能为不存在,请尽可能使用持久化的标志step
  • 空包情况下 step、step_change、group 字段的值可能不存在
  • plan、think、generation 均由 xxx_start 事件 和 xxx_end 事件两个事件组成
  • tool_call 由 tool_call_start、tool_calling、tool_return 三个事件组成
  • tool_call_start 表示工具调用开始(开始流式收集工具调用信息,此时还无法吐出工具调用详情(name、args等))、tool_calling 表示获取到完整工具调用的参数并会抛出完整的工具调用参数tool_return 表示工具调用返回结果,同时会携带结构化的工具返回信息。
步骤变化事件 (**step_change**)事件发生时 **step** 的值事件名称解释说明plan_startplanning开始规划step 状态变为 planning, 表示对应状态的开头(包含当前包)。plan_endplanning结束规划step 开始变成其他状态,事件发生时 step 仍为 planning,表示对应状态的结尾(包含当前包)。think_startthinking开始思考与 plan 事件同理think_endthinking结束思考与 plan 事件同理report_startreporting开始总结与 plan 事件同理report_endreporting结束总结与 plan 事件同理generation_startgenerating开始生成与 plan 事件同理generation_endgenerating结束生成与 plan 事件同理tool_call_starttool_calling开始工具调用表示工具调用开始(开始流式收集工具调用信息,此时还无法吐出工具调用详情(name、arguments等))。tool_callingtool_calling_{工具名称}工具调用中会输出tool_call的具体参数和工具名称,tool_calling状态变为tool_calling_{工具名称}。tool_returntool_calling_{工具名称}工具返回会携带工具返回信息, step 开始变成其他状态,事件发生时 step 仍为 tool_calling_{工具名称}。示例

请求示例
  1. {
  2.     "input": {
  3.         "messages": [
  4.             {
  5.                 "role": "user",
  6.                 "content": "现在日期"
  7.             }
  8.         ]
  9.     },
  10.     "parameters": {
  11.         "agent_options": {
  12.             "agent_id": "aid-xxx",
  13.             "agent_version": "beta"
  14.         }
  15.     }
  16. }
复制代码
返回示例
  1. data: {
  2.     "code": "200",
  3.     "message": "",
  4.     "output": {
  5.         "choices": [{
  6.             "finish_reason": "",
  7.             "message": {
  8.                 "content": "",
  9.                 "additional_kwargs": {},
  10.                 "response_metadata": {},
  11.                 "tool_calls": [],
  12.                 "reasoning_content": "",
  13.                 "role": "assistant",
  14.                 "extra": {
  15.                     "group": "planning",
  16.                     "step_change": "think_start",
  17.                     "step": "thinking"
  18.                 }
  19.             }
  20.         }]
  21.     },
  22.     "usage": null,
  23.     "request_id": "5b853312-8d0c-42ff-9d26-08339d5ff38e"
  24. }
复制代码
当生成配置开启输出报告时,模型尾包会给出 html 和 md 的存储地址和路径,content 中 type 的含义参考如下

  • file_path:文件存储路径用于后续导出pdf和二次获取以下文件下载链接
  • md_file_url:md下载链接
  • html_file_url:html下载链接
  1. {
  2.   "status_code": 200,
  3.   "code": "",
  4.   "message": "",
  5.   "output": {
  6.     "choices": [
  7.       {
  8.         "finish_reason": "stop",
  9.         "message": {
  10.           "content": [
  11.             {
  12.               "type": "file_path",
  13.               "text": "msearch/agents/files/upload/536fa835-a381-4870-99c1-79dee3ab946c"
  14.             },
  15.             {
  16.               "type": "md_file_url",
  17.               "text": "https://msearch-cloud.oss-cn-hangzhou.aliyuncs.com/msearch/agents/files/upload/536fa835-a381-4870-99c1-79dee3ab946c.md?x-oss-signature-version=OSS4-HMAC-SHA256&x-oss-date=20250904T151053Z&x-oss-expires=900&x-oss-credential=LTAI5tCLjk1ruCfq2caq****%2F20250904%2Fcn-hangzhou%2Foss%2Faliyun_v4_request&x-oss-signature=9f9af4642f3611b1b8210bd801f10610236656a016e6bda67e2239ecf59b644f"
  18.             },
  19.             {
  20.               "type": "html_file_url",
  21.               "text": "https://msearch-cloud.oss-cn-hangzhou.aliyuncs.com/msearch/agents/files/upload/536fa835-a381-4870-99c1-79dee3ab946c.html?x-oss-signature-version=OSS4-HMAC-SHA256&x-oss-date=20250904T151053Z&x-oss-expires=900&x-oss-credential=LTAI5tCLjk1ruCfq2caq****%2F20250904%2Fcn-hangzhou%2Foss%2Faliyun_v4_request&x-oss-signature=34164425671a0f26a39adacd12735d9ec127aec8caa68f8e1de6e252f5889a9c"
  22.             }
  23.           ],
  24.           "additional_kwargs": {},
  25.           "response_metadata": {
  26.             "model_name": "deep-research-generation",
  27.             "agent_name": "writing_agent"
  28.           },
  29.           "tool_calls": [],
  30.           "reasoning_content": "",
  31.           "role": "assistant"
  32.         }
  33.       }
  34.     ]
  35.   },
  36.   "usage": null,
  37.   "request_id": "3070fa78-c5d5-4bad-b2fc-e20787f6eb75"
  38. }
复制代码
调用示例

Python示例:
  1. # coding=utf-8
  2. import os
  3. import json
  4. import requests
  5. split_line = "\n-------------------------------------生成报告链接---------------------------------------------------\n"
  6. chat_completions_url = 'https://dashscope.aliyuncs.com/api/v2/apps/deep-search-agent/chat/completions'
  7. headers = {
  8.     'Authorization': f'Bearer {os.getenv("DASHSCOPE_API_KEY", "")}',  # 配置 API KEY
  9.     'Content-Type': 'application/json'
  10. }
  11. if __name__ == "__main__":
  12.     params = {
  13.         "input": {
  14.             "messages": [{"role": "user", "content": "目前国内主流多模态模型分别有哪些,根据性能和效果做下评估"}]  # 传入请求消息
  15.         },
  16.         "parameters": {
  17.             "agent_options": {  # 设置 agent 选项
  18.                 "agent_id": "${agent_id}",  # 应用ID,可在应用管理页面获取到,例如:aid-8fd***e00
  19.                 "agent_version": "${agent_version}"  # 应用版本,beta 测试版本 / release 发布版本
  20.             }
  21.         },
  22.         "stream": True
  23.     }
  24.    
  25.     response = requests.post(chat_completions_url, headers=headers, json=params, stream=True)
  26.    
  27.     resultlist = []
  28.     stage = ''
  29.     action = ''
  30.     content = ''
  31.     reasoning_content = ''
  32.     for chunk in response.iter_lines():
  33.         if chunk:
  34.             chunk_str = chunk.decode('utf-8').strip()
  35.             if chunk_str.startswith('data:'):
  36.                 json_str = chunk_str[len('data:'):].strip()
  37.                 try:
  38.                     obj = json.loads(json_str)
  39.                     # 检查异常
  40.                     if obj.get('code') != '200':
  41.                         print("服务异常:", obj)
  42.                     # 获取消息体
  43.                     msg = obj.get('output', {}).get('choices', [{}])[0].get('message', {})
  44.                     extra_flags = msg.get('extra', {})  # 获取模型状态标记字段
  45.    
  46.                     if stage != extra_flags.get('group', ''):  # 获取 模型当前阶段
  47.                         print(f"agent stage: {extra_flags.get('group', '')}")
  48.                     stage = extra_flags.get('group', '')
  49.    
  50.                     if action != extra_flags.get('step', '') and extra_flags.get('step', ''):  # 获取 模型当前阶段
  51.                         print(f"agent action: {extra_flags.get('step', '')}")
  52.                     action = extra_flags.get('step', '')
  53.    
  54.                     role = msg.get('role', '')  # 获取模型角色 assistant or role
  55.                     content = msg.get('content')  # 获取生成内容
  56.                     toolcalls = msg.get('tool_calls', [])  # 获取工具调用
  57.                     if toolcalls:
  58.                         print(f'{toolcalls}')
  59.    
  60.                     if not content:  # 如果 content内没有内容,则尝试获取最后一轮深度思考中的reasoning_content内容
  61.                         content = msg.get('reasoning_content', '')
  62.    
  63.                     if isinstance(content, str):
  64.                         if role == "tool":
  65.                             print("\n" + content + "\n", end='')  # 前后都换行
  66.                         else:
  67.                             print(content, end='')  # 流式输出
  68.                     else:
  69.                         # 注意 content 可能不是字符串
  70.                         print(split_line, content)
  71.                     # 可按需保存
  72.                     resultlist.append(obj)
  73.                 except Exception as e:
  74.                     print("异常解析:", e)
复制代码
java示例:
  1. import java.io.*;
  2. import java.net.*;
  3. import java.util.*;
  4. import com.alibaba.fastjson.*;
  5. import java.nio.charset.StandardCharsets;
  6. public class DeepSearchStreamDemo {
  7.     // 配置 API KEY
  8.     public final static String CHAT_COMPLETIONS_URL = "https://dashscope.aliyuncs.com/api/v2/apps/deep-search-agent/chat/completions";
  9.     public final static String API_KEY = System.getenv("DASHSCOPE_API_KEY");
  10.     public static void main(String[] args) throws Exception {
  11.         // 构造参数
  12.         Map<String, Object> params = new HashMap<>();
  13.         // input.messages
  14.         List<Map<String, Object>> messages = new ArrayList<>();
  15.         Map<String, Object> msgObj = new HashMap<>();
  16.         msgObj.put("role", "user");
  17.         msgObj.put("content", "${prompt}");
  18.         messages.add(msgObj);
  19.         // input
  20.         Map<String, Object> input = new HashMap<>();
  21.         input.put("messages", messages);
  22.         // parameters.agent_options
  23.         Map<String, Object> agentOptions = new HashMap<>(); //
  24.         agentOptions.put("agent_id", "${agent_id}");// 应用ID,可在应用管理页面获取到,例如:aid-8fd***e00
  25.         agentOptions.put("agent_version", "${agent_version}"); // 应用版本,beta 测试版本 / release 发布版本
  26.         // parameters
  27.         Map<String, Object> parameters = new HashMap<>();
  28.         parameters.put("agent_options", agentOptions);
  29.         params.put("input", input);
  30.         params.put("parameters", parameters);
  31.         params.put("stream", true);
  32.         String body = JSON.toJSONString(params);
  33.         // HTTP 请求
  34.         URL apiUrl = new URL(CHAT_COMPLETIONS_URL);
  35.         HttpURLConnection conn = (HttpURLConnection) apiUrl.openConnection();
  36.         conn.setRequestMethod("POST");
  37.         conn.setDoOutput(true);
  38.         conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
  39.         conn.setRequestProperty("Content-Type", "application/json");
  40.         // 发送 body
  41.         try (OutputStream os = conn.getOutputStream()) {
  42.             os.write(body.getBytes(StandardCharsets.UTF_8));
  43.         }
  44.         // 处理流式响应
  45.         InputStream inputStream = conn.getInputStream();
  46.         BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
  47.         String line;
  48.         String stage = "";
  49.         String action = "";
  50.         List<JSONObject> resultList = new ArrayList<>();
  51.         while ((line = reader.readLine()) != null) {
  52.             if (!line.trim().isEmpty()) {
  53.                 String chunkStr = line.trim();
  54.                 if (chunkStr.startsWith("data:")) {
  55.                     String jsonStr = chunkStr.substring(5).trim();
  56.                     try {
  57.                         JSONObject obj = JSON.parseObject(jsonStr);
  58.                         // 检查异常
  59.                         if (!"200".equals(obj.getString("code"))) {
  60.                             System.out.print("服务异常: " + obj);
  61.                         }
  62.                         // 获取  output->choices[0]->message
  63.                         JSONObject msg = null;
  64.                         if (obj.containsKey("output")) {
  65.                             JSONObject output = obj.getJSONObject("output");
  66.                             if (output != null && output.containsKey("choices")) {
  67.                                 JSONArray choices = output.getJSONArray("choices");
  68.                                 if (choices != null && !choices.isEmpty()) {
  69.                                     JSONObject firstChoice = choices.getJSONObject(0);
  70.                                     if (firstChoice.containsKey("message")) {
  71.                                         msg = firstChoice.getJSONObject("message");
  72.                                     }
  73.                                 }
  74.                             }
  75.                         }
  76.                         if (msg == null) {
  77.                             continue;
  78.                         }
  79.                         // 获取 extra_flags 字段
  80.                         JSONObject extraFlags = msg.containsKey("extra") && msg.get("extra") != null
  81.                                 ? msg.getJSONObject("extra") : new JSONObject();
  82.                         // agent stage
  83.                         String stageNew = extraFlags.containsKey("group") && extraFlags.get("group") != null
  84.                                 ? extraFlags.getString("group") : "";
  85.                         if (!stage.equals(stageNew)) {
  86.                             System.out.println("agent stage: " + stageNew);
  87.                         }
  88.                         stage = stageNew;
  89.                         // agent action
  90.                         String actionNew = extraFlags.containsKey("step") && extraFlags.get("step") != null
  91.                                 ? extraFlags.getString("step") : "";
  92.                         if (!action.equals(actionNew) && !actionNew.isEmpty()) {
  93.                             System.out.println("agent action: " + actionNew);
  94.                         }
  95.                         action = actionNew;
  96.                         String role = msg.containsKey("role") && msg.get("role") != null
  97.                                 ? msg.getString("role") : "";
  98.                         Object contentObj = msg.get("content");
  99.                         String content = null;
  100.                         boolean isContentString = false;
  101.                         // content 是字符串类型
  102.                         if (contentObj instanceof String) {
  103.                             content = contentObj.toString();
  104.                             isContentString = true;
  105.                         }
  106.                         // 字符串为空时补 reasoning_content
  107.                         if (isContentString && content.isEmpty()) {
  108.                             Object reasoningContentObj = msg.get("reasoning_content");
  109.                             if (reasoningContentObj instanceof String) {
  110.                                 content = reasoningContentObj.toString();
  111.                             }
  112.                         }
  113.                         // 工具调用
  114.                         if (msg.containsKey("tool_calls") && msg.get("tool_calls") instanceof List) {
  115.                             JSONArray toolCalls = msg.getJSONArray("tool_calls");
  116.                             if (!toolCalls.isEmpty()) {
  117.                                 System.out.println(toolCalls);
  118.                             }
  119.                         }
  120.                         // -------输出内容判断--------
  121.                         if (isContentString) {
  122.                             // 是字符串,无论空不空都直接打印(和Python一致)
  123.                             if ("tool".equals(role)) {
  124.                                 System.out.print("\n" + content + "\n");
  125.                             } else {
  126.                                 System.out.print(content);
  127.                             }
  128.                         } else {
  129.                             // 不是字符串(比如Object/Array)时打印分隔线,再打印内容
  130.                             System.out.println("\n------------------------------------------------------------------生成报告链接------------------------------------------------------------------");
  131.                             System.out.println(contentObj != null ? contentObj.toString() : "null");
  132.                         }
  133.                         // ------end----
  134.                         // 可按需保存
  135.                         resultList.add(obj);
  136.                     } catch (Exception e) {
  137.                         System.out.println("异常解析: " + e);
  138.                     }
  139.                 }
  140.             }
  141.         }
  142.         reader.close();
  143.     }
  144. }
复制代码
点击下方访问产品链接:
面向深度的查询问答和调研分析需求场景,多步骤推理规划研究路径,生成有洞察、可溯源、图文并茂的长文报告-大模型服务平台百炼(Model Studio)-阿里云帮助中心
欢迎加入讨论钉钉群,在这里您可以与其他用户进行深入交流,分享使用经验或获取更多技术支持,群号102415041551

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册