解析回答结果
任务到达 succeeded 后,回答和引用来源都在任务对象里。本页讲怎么读、哪些地方容易踩坑。字段的完整定义见任务对象。
同一份结果的三种形态
Section titled “同一份结果的三种形态”| 字段 | 内容 | 什么时候用 |
|---|---|---|
answer |
回答正文(Markdown),等于 raw_result.rawContent |
只需要正文时 |
raw_result |
结构化结果:正文、引用来源、执行过程、卡片、耗时等 | 推荐,大多数场景用它 |
result_json |
原始结果的 JSON 字符串 | 需要完整留档,或要读取 raw_result 尚未收录的新字段时 |
三者内容重复,单个字段最大可达 8 MiB,查询响应可能比较大。只有任务拿到了结果(成功,或平台执行失败)时才有 raw_result;排队中、被取消或派发失败的任务没有这个字段,读取前先判断是否存在。
raw_result 的编码规则
Section titled “raw_result 的编码规则”raw_result 沿用 protobuf 的 JSON 编码,和外层字段的风格不同:
- 字段名是小驼峰:
rawContent、shareLink、agentSteps,而外层是share_link这样的下划线风格。 - 零值字段会被省略:
success、thinking为false,空字符串、空数组、rank为 0 时都不出现。读取时请自行补默认值,例如 Python 用raw.get("references", [])。 elapsedMs(执行耗时,毫秒,不含排队)是字符串,如"48213",需要自己转成数字。completedAt是 ISO 8601 格式的 UTC 时间,如2026-10-26T12:41:37.512Z。
rawContent(以及 answer)是平台返回的 Markdown 原文,平台自己的引用标记和卡片占位符原样保留,不做转换。常见写法:
| 平台 | 正文里的标记(示例) |
|---|---|
| DeepSeek | [citation:3];开启思考模式时为 [reference:3] |
| 腾讯元宝 | [citation:2];卡片占位符 [](@replace=media_…) |
| Kimi | <REF>…</REF> 包裹的引用 |
| 智谱清言 | 【turn0search2】 |
| 秘塔 AI 搜索 | [[2]];图片以 Markdown 图片语法留在正文 |
| 文心一言 | ^2^(不常见),也可能直接写成 Markdown 链接 |
| 千问 | 卡片占位符,如 [(video_note_list_1)] |
| 豆包、讯飞星火 | 正文中不标注引用位置 |
| 小红书点点 | <u> 下划线标签、零宽空格等平台原文 |
引用来源 references
Section titled “引用来源 references”references 是平台在这次回答中搜到或读过的全部来源,按链接去重。被正文引用的排在前面,之后是搜到但没引用的。每一项:
| 字段 | 说明 |
|---|---|
rank |
平台展示顺序,从 1 开始 |
title |
标题 |
url |
链接;平台的跳转链接会尽量还原成原始地址 |
snippet |
摘要,可能为空 |
source |
来源名称(站点名),可能为空 |
domain |
域名,可能为空 |
contentPlatform |
识别出的内容平台(如某个内容社区),识别不出为空 |
cited |
是否被正文引用,三态,见下 |
publishTime |
发布时间:ISO 8601、YYYY-MM-DD 或「1天前」这样的平台原文,可能为空 |
author |
作者(笔记作者、视频 UP 主等),可能为空 |
cited 的三种取值
Section titled “cited 的三种取值”| 取值 | 含义 |
|---|---|
true |
回答正文引用了这个来源 |
false |
平台搜到或读过,但正文没引用 |
| 字段不存在 | 平台不区分是否引用,不能当作 false |
各平台的情况(2026 年 10 月观测):
- 豆包、Kimi、腾讯元宝、智谱清言、秘塔 AI 搜索、文心一言:区分
true/false。 - DeepSeek:能对应到具体网页的标
true,只能对应到一批搜索结果的不设。 - 讯飞星火:当前平台不返回搜索来源,
references取自模型写在回答里的链接,cited恒为true,除标题外没有其他信息。 - 千问、小红书点点和海外平台:不设
cited。
读取时的注意事项
Section titled “读取时的注意事项”url不一定是合法链接。 少数平台的来源没有链接(如地图类插件),url为空;个别平台会给出平台内部 ID。使用前请校验是否以http://或https://开头。domain可能为空。 需要按域名统计时,domain为空可以从url解析。references为空是正常结果。 有的问题平台没有联网搜索,回答就不带来源。
示例:判断你的网站是否被引用
Section titled “示例:判断你的网站是否被引用”下面的代码找出回答中引用了指定域名的来源,并区分「被正文引用」「搜到未引用」「平台不区分」三种情况:
from urllib.parse import urlparse
def match_domain(ref, domain): host = ref.get("domain") or urlparse(ref.get("url", "")).hostname or "" return host == domain or host.endswith("." + domain)
def citation_report(task, domain): refs = (task.get("raw_result") or {}).get("references", []) hits = [r for r in refs if match_domain(r, domain)] return { "cited": [r for r in hits if r.get("cited") is True], "not_cited": [r for r in hits if r.get("cited") is False], "unknown": [r for r in hits if "cited" not in r], }
report = citation_report(task, "example.com")print({k: len(v) for k, v in report.items()})function matchDomain(ref, domain) { let host = ref.domain ?? ""; if (!host) { try { host = new URL(ref.url ?? "").hostname; } catch { host = ""; } } return host === domain || host.endsWith("." + domain);}
function citationReport(task, domain) { const hits = (task.raw_result?.references ?? []).filter((r) => matchDomain(r, domain)); return { cited: hits.filter((r) => r.cited === true), notCited: hits.filter((r) => r.cited === false), unknown: hits.filter((r) => r.cited === undefined), };}
const report = citationReport(task, "example.com");console.log(Object.fromEntries(Object.entries(report).map(([k, v]) => [k, v.length])));执行过程 agentSteps
Section titled “执行过程 agentSteps”部分平台会提供回答的执行过程,按发生顺序排列。按 type 读取对应字段:
type |
读取字段 | 内容 |
|---|---|---|
thinking |
content、summary |
思考正文与平台给出的思考摘要 |
search |
name、queries、results |
AI 实际使用的检索词,以及每次搜索返回的结果(title、url、siteName、snippet),结果未必都被引用 |
tool |
name、args |
其他工具调用及其参数原文 |
search 步骤的 queries 很有价值:它告诉你 AI 为了回答这个问题实际去搜了什么词,可以据此调整内容的关键词布局。平台在该档位不提供执行过程时,agentSteps 不出现。
thinking 步骤多数只在开启思考模式时出现;关闭时,千问、智谱清言、秘塔 AI 搜索等平台也可能给出简短的思考或进度文字。要判断这次回答是否开启了思考,请看 raw_result.thinking,不要看有没有 thinking 步骤。
多媒体卡片 mediaCards
Section titled “多媒体卡片 mediaCards”回答中的视频、图片、商品、推荐榜单等卡片,按在回答中出现的先后排列:
type:image、video、product、ranking、other。anchor:卡片在rawContent里的占位符原文,可据此定位卡片位置;平台不在正文放占位符时为空,只能按先后顺序排列。items[]:卡片里的每一项,含title、url、imageUrl、source、author、duration、price、rating、publishTime、description,未取到的字段不出现。
share_link(raw_result.shareLink)是平台上这次会话的分享页,可以让人在平台上复查原始回答。平台不提供或创建分享失败时为空字符串。注意:小红书点点的分享链接只能在小红书 App 内打开,网页打开是空白页。
raw_result.conversationId、messageId 是平台侧的会话与消息 ID,仅供对照,开放 API 不支持基于它们继续对话。
失败任务的结果
Section titled “失败任务的结果”平台执行失败(error_code 为 crawl_failed)的任务也会带 raw_result,其中 success 字段不出现(即 false),rawContent 为空,error 是失败说明(与 error_message 相同的 {"zh","en"} JSON 字符串)。判断失败请看外层的 status 与 error_code,见错误处理。
