Source Code
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
- Call DeepresearchConversation directly with the user's query. A new conversation is created automatically.
Path B: Topic discussion with files
- Call ConversationCreate to get a
conversation_id. - Call FileUpload with the
conversation_idto upload files. - Call FileParseSubmit with the returned
file_id. - Poll FileParseQuery every few seconds until parsing succeeds.
- Call DeepresearchConversation with the
query,conversation_id, andfile_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_idin all subsequent calls. - If the response contains an
interrupt_id(for "demand clarification" or "outline confirmation"), the next call must include thatinterrupt_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
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
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
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
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
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 incontent.text.dataof the previous SSE response.structured_outline: The research report outline. Required on subsequent calls if the previous round generated one. Structure:
{
"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
python3 scripts/deepresearch_conversation.py '{"query": "your question here", "version": "Standard"}'
Example with all parameters
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"}'