跳转到内容

解析回答结果

任务到达 succeeded 后,回答和引用来源都在任务对象里。本页讲怎么读、哪些地方容易踩坑。字段的完整定义见任务对象。

字段 内容 什么时候用
answer 回答正文(Markdown),等于 raw_result.rawContent 只需要正文时
raw_result 结构化结果:正文、引用来源、执行过程、卡片、耗时等 推荐,大多数场景用它
result_json 原始结果的 JSON 字符串 需要完整留档,或要读取 raw_result 尚未收录的新字段时

三者内容重复,单个字段最大可达 8 MiB,查询响应可能比较大。只有任务拿到了结果(成功,或平台执行失败)时才有 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 是平台在这次回答中搜到或读过的全部来源,按链接去重。被正文引用的排在前面,之后是搜到但没引用的。每一项:

字段 说明
rank 平台展示顺序,从 1 开始
title 标题
url 链接;平台的跳转链接会尽量还原成原始地址
snippet 摘要,可能为空
source 来源名称(站点名),可能为空
domain 域名,可能为空
contentPlatform 识别出的内容平台(如某个内容社区),识别不出为空
cited 是否被正文引用,三态,见下
publishTime 发布时间:ISO 8601、YYYY-MM-DD 或「1天前」这样的平台原文,可能为空
author 作者(笔记作者、视频 UP 主等),可能为空
取值 含义
true 回答正文引用了这个来源
false 平台搜到或读过,但正文没引用
字段不存在 平台不区分是否引用,不能当作 false

各平台的情况(2026 年 10 月观测):

  • 豆包、Kimi、腾讯元宝、智谱清言、秘塔 AI 搜索、文心一言:区分 true / false。
  • DeepSeek:能对应到具体网页的标 true,只能对应到一批搜索结果的不设。
  • 讯飞星火:当前平台不返回搜索来源,references 取自模型写在回答里的链接,cited 恒为 true,除标题外没有其他信息。
  • 千问、小红书点点和海外平台:不设 cited。
  • 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()})

部分平台会提供回答的执行过程,按发生顺序排列。按 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 步骤。

回答中的视频、图片、商品、推荐榜单等卡片,按在回答中出现的先后排列:

  • 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 不支持基于它们继续对话。

平台执行失败(error_code 为 crawl_failed)的任务也会带 raw_result,其中 success 字段不出现(即 false),rawContent 为空,error 是失败说明(与 error_message 相同的 {"zh","en"} JSON 字符串)。判断失败请看外层的 status 与 error_code,见错误处理。