ClawSkills logoClawSkills

deepresearch conversation

Deep ReSearch Conversation is provided by Baidu for multi-round streaming conversations with "Deep Research" agents. "In-depth research" is a long-process task

Introduction

# Deep Research Conversation

This skill allows OpenClaw agents to conduct in-depth research discussions with users on a given topic. The API Key is automatically loaded from the OpenClaw config — no manual setup is needed.

## API Table | name | path | description | |------------|---------------------------------|---------------------------------------| |DeepresearchConversation|/v2/agent/deepresearch/run|Multi-round streaming deep research conversation (via Python script)| |ConversationCreate|/v2/agent/deepresearch/create|Create a new conversation session, returns conversation_id| |FileUpload|/v2/agent/file/upload|Upload a file for the conversation| |FileParseSubmit|/v2/agent/file/parse/submit|Submit an uploaded file for parsing| |FileParseQuery|/v2/agent/file/parse/query|Query the status of a file parsing task|

## Workflow

### Path A: Topic discussion without files 1. Call **DeepresearchConversation** directly with the user's query. A new conversation is created automatically.

### Path B: Topic discussion with files 1. Call **ConversationCreate** to get a `conversation_id`. 2. Call **FileUpload** with the `conversation_id` to upload files. 3. Call **FileParseSubmit** with the returned `file_id`. 4. Poll **FileParseQuery** every few seconds until parsing succeeds. 5. Call **DeepresearchConversation** with the `query`, `conversation_id`, and `file_ids`.

### Multi-round conversation rules - The DeepresearchConversation API is a **SSE streaming** interface that returns data incrementally. - After the first call, you **must** pass `conversation_id` in all subsequent calls. - If the response contains an `interrupt_id` (for "demand clarification" or "outline confirmation"), the next call **must** include that `interrupt_id`. - If the response contains a `structured_outline`, present it to the user for confirmation/modification, then pass the final outline in the next call. - Keep calling DeepresearchConversation iteratively until the user is satisfied with the result.

## APIS

### ConversationCreate API

#### Parameters no parameters

#### Execute shell ```bash curl -X POST "https://qianfan.baidubce.com/v2/agent/deepresearch/create" \ -H "X-Appbuilder-From: openclaw" \ -H "Authorization: Bearer $BAIDU_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ```

### FileUpload API

#### Parameters - `agent_code`: Fixed value `"deepresearch"` (required) - `conversation_id`: From ConversationCreate response (required) - `file`: Local file binary (mutually exclusive with file_url). Max 10 files. Supported formats: - Text: .doc, .docx, .txt, .pdf, .ppt, .pptx (txt ≤ 10MB, pdf ≤ 100MB/3000 pages, doc/docx ≤ 100MB/2500 pages, ppt/pptx ≤ 400 pages) - Table: .xlsx, .xls (≤ 100MB, single Sheet only) - Image: .png, .jpg, .jpeg, .bmp (≤ 10MB each) - Audio: .wav, .pcm (≤ 10MB) - `file_url`: Public URL of the file (mutually exclusive with file)

#### Local file upload ```bash curl -X POST "https://qianfan.baidubce.com/v2/agent/file/upload" \ -H "Authorization: Bearer $BAIDU_API_KEY" \ -H "Content-Type: multipart/form-data" \ -H "X-Appbuilder-From: openclaw" \ -F "agent_code=deepresearch" \ -F "conversation_id=$conversation_id" \ -F "file=@local_file_path" ```

#### File URL upload ```bash curl -X POST "https://qianfan.baidubce.com/v2/agent/file/upload" \ -H "Authorization: Bearer $BAIDU_API_KEY" \ -H "Content-Type: multipart/form-data" \ -H "X-Appbuilder-From: openclaw" \ -F "agent_code=deepresearch" \ -F "conversation_id=$conversation_id" \ -F "file_url=$file_url" ```

### FileParseSubmit API

#### Parameters - `file_id`: From FileUpload response (required)

#### Execute shell ```bash curl -X POST "https://qianfan.baidubce.com/v2/agent/file/parse/submit" \ -H "Authorization: Bearer $BAIDU_API_KEY" \ -H "Content-Type: application/json" \ -H "X-Appbuilder-From: openclaw" \ -d '{"file_id": "$file_id"}' ```

### FileParseQuery API

#### Parameters - `task_id`: From FileParseSubmit response (required)

#### Execute shell ```bash curl -X GET "https://qianfan.baidubce.com/v2/agent/file/parse/query?task_id=$task_id" \ -H "Authorization: Bearer $BAIDU_API_KEY" \ -H "X-Appbuilder-From: openclaw" ```

### DeepresearchConversation API

#### Parameters - `query`: The user's question or research topic (required) - `conversation_id`: Optional on first call (auto-generated). Required on subsequent calls. - `file_ids`: List of parsed file IDs (optional, only when discussing files) - `interrupt_id`: Required when responding to "demand clarification" or "outline confirmation" from previous round. Found in `content.text.data` of the previous SSE response. - `structured_outline`: The research report outline. Required on subsequent calls if the previous round generated one. Structure: ```json { "title": "string", "locale": "string", "description": "string", "sub_chapters": [ { "title": "string", "locale": "string", "description": "string", "sub_chapters": [] } ] } ``` - `version`: `"Lite"` (faster, within 10 min) or `"Standard"` (deeper, slower). Default: `"Standard"`.

#### Execute shell ```bash python3 scripts/deepresearch_conversation.py '{"query": "your question here", "version": "Standard"}' ```

#### Example with all parameters ```bash python3 scripts/deepresearch_conversation.py '{"query": "the question", "file_ids": ["file_id_1"], "interrupt_id": "interrupt_id", "conversation_id": "conversation_id", "structured_outline": {"title": "Report Title", "locale": "zh", "description": "desc", "sub_chapters": [{"title": "Chapter 1", "locale": "zh", "description": "chapter desc", "sub_chapters": []}]}, "version": "Standard"}' ```

More Products