当前接口(2026-09-28,F118)还包括GET /health和普通JSON的POST /api/company/classify;本页仅解释聊天SSE。事件表以聊天接口当前事件总览为准;下方旧Feature条目保留演进背景。流式正文的临时片段必须在answer_end整体替换,result不重复显示。
F074附件字段:请求pictures/files为可选URL数组,省略或空数组均可。新增attachments状态事件与result.data.attachments,来源type=user_attachment;附件不生成政策卡片。字段、错误、处理范围和预算见附件契约。
F073正文增量事件:answer_start开始、answer_delta新增片段、answer_end最终替换、answer_abort撤回草稿。data.stream_id为单次生成ID,target为summary总结或answer独立回答,sequence为片段序号,text为增量或最终正文(由事件决定),provisional为临时草稿标识。end的operation=replace、status=completed/fallback;abort的operation=discard、reason为固定失败/替换原因。原answer/summary新增可选stream_id关联同一正文,result保持原结构。详细枚举及前端去重见正文流式协议。
F043(2026-09-16 15:56):公司检索后,当前用户公司线索与唯一候选的Name或CreditCode完整精确相等时,直接获取工商/荣誉并继续回答,不发送company_selection中断。仅去除线索首尾空白,不忽略内部字符、括号、后缀或大小写;简称、多个完全匹配、无结果及失败保持确认/补问。补充全名后再次搜索也适用;工商返回仍核对KeyNo/信用代码。旧等待确认的检查点仍沿原动作恢复,新问题清空旧画像。
F042最新规则(2026-09-16):默认回答正文不附参考文献、资料依据、资料名称或原文摘录;原文、source_ids、citations及参考链接仍在结构化来源中保留。用户明确要求依据或原文时,按需提供相关短引文。此前自动展开来源的说明由本规则替代,SSE去重保持。
F042(2026-09-16 11:40):answer与summary重叠的正文由后端去重,推荐通常仅summary承载正文;独立备用结论或失败提示仍可通过answer发送。result.response/overview仍为完整快照,不表示一定存在同文answer事件。资料依据显示名称和原文,不以孤立问句结束。下方F037开场事件说明以此为准。
F037(2026-09-15 15:50):summary.text是Markdown正文,包含首段结论、按需小标题/列表/加粗与末尾三项动作;answer.text优先给出有据首段结论。progress.message改为自然服务表述,stage/status枚举不变;accepted与heartbeat也采用自然提示。详见 接口文档。
| 字段 | 中文含义 |
|---|---|
| item.knowledge_type | 实际来源库类型:policy惠企政策、finance金融产品、qa问答、article文章法规、service_guide办事指南、service_catalog六大服务板块 |
| item.is_policy_library | 是否来自惠企政策库;true显示“惠企政策库”,false不显示此标识 |
| item.priority.rank | 最终推荐顺序;惠企政策库整体优先,同组再按现有匹配规则排列 |
presentation.sorted_by=category_diversity_then_policy_library_relevance_evidence:首六卡先覆盖不同支持类别,同类优先惠企来源、问题关联及主体依据;剩余卡片保留。惠企来源标识基于实际检索来源,类别由模型按原文主要支持目的判断。详见 接口文档。
2026-09-15 15:13更新:next_actions = 下一步建议,最终结果的 recommendation.next_actions保留动作数组。三项建议已并入现有 summary.text 末尾,前端继续展示总结即可;不再发送独立动作事件,不需要重复渲染动作数组。
| 字段 | 中文含义 |
|---|---|
| id | 本轮动作编号,非跨轮任务ID |
| kind | 动作类型 |
| title / description / reason | 标题 / 要做什么或需回答的问题 / 为什么做 |
| source_ids | 对应的政策来源ID |
| citations | 原文依据;source_id为来源,path为字段路径,quote为逐字引文 |
kind:confirm_information 补充条件信息;compare_support 比较支持内容;review_conditions 查看申报条件;choose_policy 选择继续了解的事项;prepare_question 整理具体疑问。均为建议,不代表已经执行或资格符合。完整规则见 接口文档。
适用日期:2026-09-14。配合 接口文档与完整样例 阅读。本页按实际返回层级解释英文key和固定value,不改变接口协议。
key是字段名,value是字段值。 例如 "eligibility":"not_evaluated" 表示“资格评估:未评估”;"priority":{"rank":1} 表示“展示优先级:第1位”,不是通过率。
阅读约定:[]表示数组中的每一项;下面的路径是定位字段用的写法,不是额外的接口参数。true表示是,false表示否,null表示未提供/未知,不能都当成“否”;[]表示空列表,{}表示空对象。ID、原文路径、哈希值和错误码用于程序关联,不适合作为页面正文。
例如收到progress事件时,里面的JSON可以这样读。以下是带中文注释的阅读示例(JSONC),实际接口JSON不含注释:
{
"thread_id": "window-001", // 这个结果属于哪个会话窗口
"request_id": "a78b17a3b38241fa83c8ee91f40ec608", // 当前这一轮请求的标识
"data": { // 当前事件的具体内容
"stage": "retrieve", // 处理阶段:政策与服务检索
"status": "running", // 阶段状态:正在处理
"message": "正在检索相关政策和配套服务……" // 前端直接展示这段中文
}
}
| 英文key / 路径 | 中文名称 | 前端展示建议 |
|---|---|---|
| progress.data.message | 当前处理提示 | 显示“正在检索相关政策……” |
| heartbeat.data.elapsed_seconds | 已等待秒数 | 显示“已等待20秒” |
| answer.data.text | 回答文本 | 普通聊天的完整回复;推荐场景的开场概述 |
| item.data.card.name.text | 政策/产品/服务完整名称 | 卡片标题 |
| item.data.card.department.text | 所属部门或提供机构 | 卡片“所属部门” |
| item.data.card.support_objects.text | 支持对象 | 卡片“支持对象” |
| item.data.card.support_methods_standards.text | 支持方式和标准 | 卡片“支持内容” |
| item.data.card.application_conditions.text | 申报条件 | 卡片“申报条件” |
| item.data.match_reason | 与当前问题的匹配原因 | 卡片“匹配原因” |
| summary.data.text | 综合说明 | 所有卡片后的结论与下一步 |
| interrupt.data.question | 需要用户回答的问题 | 公司补问/候选确认提示 |
| result.data.errors | 本轮图流程错误列表 | 非空时提示本轮存在异常,不把错误码直接当回复 |
左侧的progress/item等是SSE事件名,不在JSON对象中。事件data内的JSON统一还有thread_id、request_id、data三项。卡片字段可能为null,先判断对象存在再取.text;可显示“原文未明确”或隐藏该栏。
| key | 中文名称 | value含义 |
|---|---|---|
| thread_id | 会话窗口ID | 例如window-001,同一窗口复用;不是用户ID或权限凭证 |
| question | 用户本轮输入 | 普通问题,或针对补问的回复字符串 |
| request_id | 本次请求ID | 每次POST生成一个新ID,用于区分同一窗口的不同轮次 |
| X-Request-ID(响应头) | 请求追踪ID | 与业务日志关联;拒绝请求时也可由此查日志 |
| data | 本事件的数据内容 | 具体结构取决于event;不是所有data都具有相同字段 |
| event(SSE行) | 事件类型 | 下表说明;不是JSON里的key |
| event固定value | 中文含义 | 是否是最终内容 |
|---|---|---|
| accepted | 已接收问题 | 否,只表示接纳 |
| progress | 处理阶段更新 | 否,过程提示 |
| heartbeat | 等待中的存活通知 | 否,显示仍在处理 |
| answer | 回答文本 | 是,正文或概述 |
| answer_start / answer_delta | 正文流开始 / 临时新增文字 | 否,须等待最终校准 |
| answer_end / answer_abort | 最终替换正文 / 撤回草稿 | 是 / 否 |
| attachments | 本轮附件处理状态 | 否,失败还会有error |
| source | 一条参考来源 | 是,证据详情 |
| item | 一项推荐 | 是,一张卡片及其依据 |
| summary | 综合说明 | 是,末尾结论 |
| interrupt | 等待用户补充/确认 | 是交互问题,尚需继续 |
| result | 本轮完整结果快照 | 与前面answer/item等有重复,不重复追加展示 |
| done | 本次响应流正常结束 | 停止本轮加载动画 |
| error | 本次响应流异常结束 | 显示错误并停止加载 |
| key | 中文名称 | 说明 |
|---|---|---|
| stage | 当前阶段标识 | 固定英文值见下表 |
| status | 当前状态 | 同名字段在不同位置含义不同,必须结合路径判断 |
| message | 给用户看的说明 | 直接展示已返回的中文 |
| elapsed_seconds | 本次请求累计耗时 | 单位秒,不是剩余时间或节点单独耗时 |
| stage的value | 中文含义 |
|---|---|
| session | 读取会话信息 |
| prepare | 整理用户问题 |
| analyze | 识别需求;普通对话的LLM回复也在此生成 |
| attachments | 读取和识别本轮图片、文件;失败时会终止本轮 |
| direct | 输出普通对话回复 |
| clarify | 准备补问信息 |
| search | 查找公司候选(此处不是政策检索) |
| confirm | 整理公司候选供用户确认 |
| basic | 查询工商信息 |
| honors | 查询企业荣誉/资质 |
| handoff | 汇总需求及已有信息 |
| plan | 拆解需求、规划检索 |
| retrieve | 检索政策及配套服务 |
| recommend | 分析原文、核对条件并整理回答 |
| status所在位置 | 固定value | 中文含义 |
|---|---|---|
| progress.data.status | running | 正在处理这一阶段 |
| progress.data.status | completed | 这一阶段执行结束,不保证所有业务结果成功 |
| progress.data.status | waiting_input | 等待用户补充或确认 |
| progress.data.status | failed | 阶段执行抛错 |
| heartbeat.data.status | processing | 本次请求仍在处理 |
| done.data.status | completed | 本轮流程结束,不等于审批通过 |
| done.data.status | needs_input | 本轮流已结束,等待用户下一次POST继续 |
以下相对 result.data 解释;普通聊天的recommendation为 {},没有下面的推荐子字段。
| key | 中文名称 | 说明 |
|---|---|---|
| response | 本轮回复文本 | 最终快照正文;answer事件可能因去重而省略,也可能由summary承载正文 |
| attachments | 本轮附件处理记录 | 无附件时为空数组;处理失败时通常没有result,见附件契约 |
| recommendation | 政策/服务推荐结果 | 聊天为空对象;政策或具体需求为结构化对象 |
| cipa | 是否询问CIPA/海外服务平台或需要出海服务 | LLM语义判断,JSON布尔true/false;result.data.cipa,识别失败默认false并保留errors,详见api-chat.md的F068说明 |
| company_info | 企查查公司信息字典 | 无资料为{};company为已确认公司,profile.data为完整工商字段、profile.source为来源,honors为荣誉记录/页来源/完整性与错误;随会话存Redis,详见api-chat.md的F040说明 |
| errors | 会话及图流程错误 | 字符串列表;不覆盖所有候选分析或检索错误 |
以下相对 result.data.recommendation 解释:
| key | 中文名称 | value / 用途 |
|---|---|---|
| overview | 开场概述 | 与本轮response一致 |
| conversation_kind | 会话目的 | policy_overview=了解政策;specific_need=解决具体需求;其他非闲聊类型见下方 |
| audience | 本轮处理对象 | general=一般政策介绍;individual=个人/无需公司路径;enterprise=需要企业信息的路径,不代表公司已核实 |
| items | 推荐条目列表 | 每项与一个item事件的数据一致 |
| sources | 来源列表 | 每项与一个source事件的数据一致;可能多于推荐条目 |
| follow_up_questions | 待补充的资格条件问题 | 字符串列表,不等于公司interrupt中断 |
| summary | 综合结论 | 内容与summary事件一致 |
| knowledge_answers | 独立知识答复 | source_id、title、answer、citations及exact_qa;没有推荐卡片时仍保留QA和其他有依据答复 |
| excluded_items | 未入选展示的条目 | 包含source_id和reason |
| presentation | 推荐展示方式 | 顺序提示,见下表 |
| retrieval_analysis_complete | 本轮检索和分析是否完整 | true只代表本轮有限候选处理完整,不代表没有遗漏政策 |
| complete | 本轮结果完整性标记 | 还考虑必要企业信息和规划等;不是获批结果,也不覆盖summary降级 |
| company_context | 公司信息获取情况 | 不是完整工商画像 |
| analysis_errors | 候选逐项分析错误 | 每项record_id=知识记录ID、code=错误码 |
| retrieval | 检索过程信息 | 查询及失败范围等,可用于详情或诊断 |
| search_plan | 查询拆解计划 | 查询方向是假设,不代表政策存在 |
| 嵌套key | 中文名称 | 固定value中文解释 |
|---|---|---|
| presentation.order | 建议展示顺序 | ["items","summary"]=先推荐卡片,再综合说明 |
| presentation.sorted_by | 排序依据标识 | category_diversity_then_policy_library_relevance_evidence;首六卡分散类别,同类惠企、问题关联及主体依据优先,以items/priority为准 |
| company_context.profile_verified | 已取得身份核对后的公司工商资料 | true=已取得;不代表政策资格已通过 |
| company_context.honors_complete | 荣誉获取是否完整 | true=完整,false=未完整,null=无该状态/未查询 |
| company_context.errors | 公司流程错误列表 | 如工商查询失败等 |
F034仅三类:smalltalk=闲聊(含身份/能力介绍);policy_overview=政策了解(含QA和一般知识问答);specific_need=具体需求。闲聊返回空recommendation;其余两类在recommendation.conversation_kind返回。分类失败以policy_overview按原问题检索,并通过errors报告intent_analysis_failed,不增加第四个类别。旧会话记录可能保留历史枚举。
以下相对 item.data 或 recommendation.items[] 解释:
| key | 中文名称 | 说明 |
|---|---|---|
| source_id | 对应来源ID | 与sources[].id关联 |
| title | 来源标题 | 页面正式名称优先显示card.name.text |
| card | 卡片信息 | 各字段见下表 |
| answer | 这一条的解释正文 | 与外层answer事件不同,是单条政策/服务说明 |
| match_reason | 匹配原因 | 此处是字符串 |
| match_basis | 主体与政策的比较依据 | 数组,逐项记录用户/公司事实与政策条款 |
| citations | 引用列表 | 每条包含path、quote |
| conditions | 条件核验列表 | 不是原文中所有申报条件的简单拷贝 |
| eligibility | 资格评估状态 | not_evaluated=未评估;当前具体需求入选条目通常为“待确认” |
| recommendation_status | 推荐结论说明 | 已是中文,如“相关政策与服务介绍”“相关线索,资格待核验” |
| priority | 展示优先级 | 不表示概率 |
| priority.rank | 展示序号 | 1=第1项,2=第2项,数值越小越靠前 |
| priority.basis | 排序理由 | 已是中文,如“原检索顺序” |
| card内key | 中文名称 | value结构/含义 |
|---|---|---|
| kind | 卡片类型 | F046新卡片固定policy=政策;financial_product、service仅历史结果兼容 |
| name | 正式完整名称 | {text,citations},应保留完整名称 |
| department | 所属部门/提供机构 | {text,citations}或null |
| support_objects | 支持对象 | {text,citations}或null |
| support_methods_standards | 支持方式和标准 | {text,citations}或null |
| application_conditions | 申报条件 | {text,citations}或null |
| match_reason | 匹配原因信息 | 对象,含text、citations、subject_policy_comparisons;不是字符串 |
| match_reason.subject_policy_comparisons | 主体与政策逐项比较 | 与item.match_basis对应的比较数组 |
| text | 可展示文本 | 实际中文内容,不是英文枚举 |
| citations[].path | 引用在原始记录中的字段路径 | 例如/title、/raw_record/content;不是网址 |
| citations[].quote | 原文引句 | 逐字引用的文本 |
同名key要看层级:item.match_reason是文字,item.card.match_reason是对象;item.answer是单条说明,SSE answer.data.text是整轮正文或概述。
入选item.conditions最多三项,优先关键申报条件、按重要程度排序;去重且无原文不占位。固定以下四键,界面仅展示三部分:
| key | 展示部分 | 含义 |
|---|---|---|
| dimension + status | 信息方向 | 如“地区 · 待确认”;保留原维度及状态枚举 |
| quote | 原文要求 | 政策连续逐字原文,保留限制、否定和例外 |
| user_evidence | 已知信息 | 与要求相关的已有主体事实;空字符串显示“暂无相关信息,待确认” |
不再展示或返回requirement/question/evidence_path。补问仍由next_actions/follow_up_questions提供。诊断与排除记录保留完整内部条件;“待确认”不等于“不符合”。
| key | 中文名称 | value含义 |
|---|---|---|
| dimension | 比较维度 | 需求/地区/行业/资质/主体/时间/其他;与conditions维度不完全相同 |
| status | 相关性比较结论 | supports=支持相关性;conflicts=存在冲突;unknown=无法判断 |
| fact_path | 主体事实路径 | 例如/question=本轮原问题,/company/...=工商字段,/honors/...=荣誉字段 |
| fact_quote | 主体事实引文 | 用户或公司资料中的原始内容 |
| policy_path | 政策证据路径 | 政策原文记录内的位置 |
| policy_quote | 政策原文引句 | 用来比较的政策条款 |
| explanation | 比较结论解释 | 中文说明 |
| fact_origin | 主体事实来源类别 | user=用户自述;company=工商资料;honor=荣誉资质资料 |
| provenance | 来源追溯信息 | 根据来源类型附带不同字段 |
| provenance.type | 来源类型说明 | user_statement=用户自述 |
| provenance.api_code | 企业信息接口编号 | 886=公司候选查询;410=工商详情;1001=荣誉资质(主体比较通常用后两项) |
| provenance.fetched_at | 信息获取时间 | 时间字符串,不是政策发布日期 |
| provenance.page_index | 原始查询页码 | 荣誉分页等使用 |
supports只能译为“有支持相关性的依据”,不能译成“已满足条件”。
| key | 中文名称 | value含义 |
|---|---|---|
| summary.text | 综合说明正文 | 中文结论及下一步 |
| summary.source_ids | 综合说明依据的来源ID列表 | 对应sources[].id |
| summary.status | 说明生成状态 | generated=模型已生成;fallback=卡片摘要备用说明;no_recommendations=底层卡片摘要无推荐;exact_qa=同题QA原答案;qa_conflict=同题答案冲突;knowledge_answers=引用知识答复;no_evidence=无回答依据;unavailable=检索/分析失败 |
| summary.citations | 知识答复引文(可选) | source_id关联sources,path定位原字段,quote为逐字引文 |
| summary.notices | 补充提示列表 | 例如资料未获取完整、同名条目处理等 |
| summary.error | 综合说明错误码 | 可选,summary_generation_failed=综合说明生成失败 |
| excluded_items[].source_id | 未入选条目的来源ID | 可关联sources查看原文 |
| excluded_items[].reason | 未入选原因 | 下表释义 |
| reason固定value | 中文含义 |
|---|---|
| expired | 原文明示的执行/有效期限已过 |
| ineligible | 存在明确不满足的资格条件 |
| reference_only | 仅供参考,未形成可展示的具体卡片 |
| exact_qa_answer | 已有同题QA答案,不再把其他条目作为额外推荐;来源仍保留 |
| subject_conflict | 主体事实与政策条款有冲突 |
| insufficient_personal_match | 缺少针对当前主体的需求/行业/资质匹配依据 |
| duplicate_name | 与已展示条目名称重复,未合并不同版本 |
| key(相对source.data或sources[]) | 中文名称 | 说明 |
|---|---|---|
| id | 来源记录ID | 与item.source_id关联 |
| title | 原始记录标题 | 可能与卡片正式名称不同 |
| type | 检索知识类型 | 下表释义 |
| source | 原始资料来源信息 | 来源对象或null,不是原文正文 |
| full_record | 完整知识记录 | 保留入库字段及原始内容,下面只解释统一模板字段 |
| snapshot | 知识快照标识 | 用来定位这批入库数据,不能当作有效期或日期 |
| analysis_complete | 这条资料是否分析完整 | true/false;不表示资格核验通过 |
| detail_anchor | 页面详情锚点建议值 | 例如source-k_...;不是后端详情URL |
| source.type / retrieval.searched_types值 | 中文含义 |
|---|---|
| policy | 政策知识 |
| finance | 金融产品知识 |
| qa | 问答知识 |
| article | 文章类知识 |
| service_guide | 办事指南 |
| service_catalog | 服务目录 |
注意:金融知识类型是finance,F046之后不进入新卡片,仅可贡献有据回答。原始full_record.kind还可能是general=通用知识,其中指定来源且raw_record.is_policy严格为true的条目可生成政策卡片;catalog=索引目录是入库分类,当前常规搜索不查询它。is_policy_library仍仅表示惠企政策库来源,不是政策卡片准入开关。
| key | 中文名称 |
|---|---|
| file | 来源文件相对路径 |
| locator | 文件内定位信息(结构依资料类型) |
| sha256 | 来源文件内容校验值 |
| url | 原始网页地址;为空时不应自行拼接 |
| publisher | 发布机构 |
| published_text | 原文发布日期文字 |
| updated_text | 原文更新时间文字 |
| acquired_at | 资料获取时间 |
| key | 中文名称 / 说明 |
|---|---|
| schema_version | 数据结构版本 |
| id、kind、title | 记录ID、原始知识类别、标题 |
| collection | 所属资料集合 |
| classification_path | 分类层级路径 |
| applicability | 适用范围对象 |
| applicability.region | 适用地区 |
| applicability.target | 适用对象 |
| source | 原始来源信息,见上表 |
| validity | 有效性信息 |
| validity.status | 有效性状态;unverified=未核实,不是“已失效” |
| validity.effective_from / effective_to | 生效/失效日期,可能未知 |
| data | 按资料类型整理的业务字段,不同于SSE外层data |
| sections | 分段内容列表 |
| raw_record | 原始资料记录,字段来自原数据,不能强制套用卡片字段含义 |
| content_sha256 | 内容校验值,不用于正文展示 |
| quality_flags | 资料整理质量提示列表,不是推荐评分 |
| duplicate_of | 重复记录对应的ID;null=没有该关联 |
以上仅解释统一模板,实际full_record还可能包含摘要增强等字段;外部raw_record中的任意字段不能在没有来源定义时猜译。前端日常展示优先用card,原始数据可放入展开的“完整来源”。模板见 政策、金融、问答、通用知识。
| key(相对recommendation) | 中文名称 | 说明 |
|---|---|---|
| search_plan.needs | 拆解出的独立需求 | 对象数组 |
| search_plan.needs[].need | 需求描述 | 用户想解决什么 |
| search_plan.needs[].evidence | 用户原话依据 | 必须来自本轮问题 |
| search_plan.needs[].query | 为此需求生成的检索表达 | 搜索方向,不是政策名称或结论 |
| search_plan.queries | 扩展检索表达列表 | 原问题仍会单独进入检索 |
| search_plan.error | 拆解失败码 | null=此字段无错误;query_planning_failed=需求拆解失败 |
| retrieval.queries | 实际用于检索的查询列表 | 包括原问题及有效扩展 |
| retrieval.failed_databases | 检索失败的知识库类型列表 | 英文类型见第9节;retrieval_service=检索服务整体失败占位标识 |
| retrieval.failed_queries | 失败的查询与知识类型组合 | 对象数组 |
| retrieval.failed_queries[].query_index | 查询序号 | 从0开始,对应retrieval.queries;不同于从1开始的卡片rank |
| retrieval.failed_queries[].type | 失败的知识类型 | policy/finance/qa等 |
| retrieval.content_failures | 原文读取或校验失败的记录ID列表 | 不是未命中列表 |
| retrieval.complete | 检索阶段是否完整 | true不代表每个政策都找到了 |
| retrieval.snapshot | 检索所用知识快照 | 数据批次标识 |
| retrieval.searched_types | 搜索过的知识类型 | 如policy、finance等 |
| retrieval.candidate_limit | 候选数量上限 | 当前为12,指六库多查询合并后的总候选上限 |
| retrieval.per_type_limit | 每查询每库召回上限 | 3;不是多查询合并后每库固定3条 |
| search_plan.related_queries | 与当前问题相邻的检索方向 | need/evidence绑定原需求;relationship说明联系;query仅为搜索假设,不是已知项目或政策事实 |
| items[].relevance_level | 对问题的关联层级 | direct直接回应、adjacent配套支持、unspecified未标注;不是资格判定。惠企来源优先,同来源组内按此顺序再比较主体依据 |
| items[].policy_category | 主要支持类别 | 设备技改、科技创新、融资支持、人才用工、创业经营、数字化、绿色发展、市场拓展、空间载体、税费减免、办事服务、其他。依据原文主要目的分类;首六卡先覆盖不同类别,同类优先惠企及问题关联 |
| presentation.summary_policy_limit | 政策总结展示范围 | 6;总结只依据最终排序前六卡,完整items不截断;无卡片保留知识问答 |
整体服务降级时retrieval的部分字段可能缺失,不能把缺失强制转换成正常空列表。
F041更正:搜索没有候选时 kind=company_need,status=not_found;服务失败也使用company_need并标记failed。有候选供选择时才是 kind=company_selection、status=found。初次公司需求补问没有result,搜索后补问包含result/status/actions,前端均通过原thread_id与question继续。
| key | 中文名称 | value含义 |
|---|---|---|
| kind | 补问类型 | company_need=补充是否需要公司信息;company_selection=确认公司候选 |
| question | 给用户的问题 | 直接展示 |
| input_help | 输入方式提示 | 直接展示 |
| schema | 内部补问参数结构说明 | 不要当成HTTP额外请求参数 |
| schema.needs_company | 是否需要公司信息 | 文档提示boolean=布尔值;API仍通过question文字提交 |
| schema.company_hint | 公司线索 | 文档提示string=字符串 |
| result | 本次公司候选查询结果 | 不等于SSE result事件的最终答复 |
| result.candidates | 公司候选列表 | 保持后端顺序,以显示序号选择 |
| result.may_have_more | 是否可能有下一页 | true显示下一页操作 |
| result.error | 候选查询失败码 | 有此错误时,不把空候选说成“查无公司” |
| result.source | 公司查询来源信息 | 与知识source对象结构不同,见下表 |
| page | 当前候选页码 | 从1开始 |
| actions | 内部支持操作说明 | select=选择,refine=换关键词,more=搜索更多公司(转企查查),next=企查查下一页,retry=重试,cancel=取消公司查询 |
| actions.select.key_no | 所选公司的内部标识 | API支持序号、KeyNo字符串或序列化选择JSON;question不能直接为对象 |
| actions.refine.keyword | 新查询关键词 | API用question字符串提交 |
| candidates[]中的key | 中文含义 |
|---|---|
| KeyNo | 公司候选唯一标识;DMS为dms:1888:记录ID;列表末尾更多操作项为action:search_more_companies,不是公司 |
| Name | 公司名称 |
| CreditCode | 统一社会信用代码 |
| StartDate | 成立日期 |
| OperName | 法定代表人/负责人姓名(依主体类型) |
| Status | 企业登记状态,例如存续、注销;不是请求处理状态 |
| No | 企业注册号 |
| Address | 企业注册地址 |
| 公司查询result.source中的key | 中文含义 |
|---|---|
| provider | 数据提供方,企查查或DMS;DMS来源含栏目/记录ID和获取时间 |
| api_code | 查询接口编号,886/410/1001释义见第7节 |
| document_url | 数据接口文档地址,不是公司主页 |
| fetched_at | 查询获取时间 |
| page_index | 本次查询页码,未分页时可能为null |
| total_records | 服务提供方报告的总条数,未知时为null |
用户选择第1家公司时提交 question="1";换关键词直接提交新名称;/next=下一页,/retry=重试,/cancel=取消公司查询。不需要公司信息可输入“不需要”“无需公司信息”或/skip。不要把schema或actions里的对象原样塞入question。
错误对象中 error或code是程序识别的错误码,message是可选用户提示;不是每个错误都有message。多个层级的错误来源不同,页面应结合当前操作描述。
| 固定value | 中文含义 |
|---|---|
| application_json_required | 请求必须使用application/json |
| invalid_request | 请求JSON或参数不符合要求 |
| request_too_large | 请求内容超过64KiB |
| request_timeout | 接收请求体超时 |
| thread_busy | 该会话已有问题正在处理 |
| server_busy | 服务处理容量已满或正在关闭 |
| service_unavailable | 暂时无法提交后台处理任务 |
| processing_failed | 本轮处理异常失败 |
| stream_timeout | 流持续时间超过上限 |
| unfinished_turn | 上轮还有未完成阶段,需要/retry恢复或换新会话 |
| 固定value | 中文含义 |
|---|---|
| intent_analysis_failed | 用户意图识别/普通对话模型调用失败 |
| direct_response_unavailable | 普通回复缺失或格式不合法,已使用兜底 |
| search_limit | 达到本轮公司候选查询次数上限 |
| query_planning_failed | 需求拆解失败,本轮按原问题检索 |
| summary_generation_failed | 综合说明生成失败,使用备用说明 |
| analysis_budget_limit | 候选原文超过单条分析预算 |
| analysis_context_limit | 模型输入超过上下文预算 |
| incomplete_generation | 模型输出未完整结束 |
| model_service_failure | 模型服务调用失败或输出无法解析 |
| analysis_failed | 候选分析异常失败 |
| invented_citation | 引文无法在对应原文中找到,已拒绝使用 |
| invented_condition_quote | 条件引用无法在原文中找到 |
| invented_card_citation | 卡片字段引用无法在原文中找到 |
| invented_match_evidence | 主体或政策比较证据无法核对 |
| missing_citations / missing_card_citation | 缺少正文/卡片引用 |
| missing_card | 缺少规定的卡片字段 |
| rewritten_policy_name | 卡片名称与原文完整名称不一致 |
分析错误还可能出现invalid*、missing*等结构校验码;这些表示模型输出未通过相应字段校验,不是用户资格“不满足”。未知码可显示“部分内容未能完成分析”,保留原码供排查,不猜测为“没有政策”。
| 值或前缀 | 中文含义 |
|---|---|
| search: | 公司候选查询阶段 |
| basic: | 工商资料查询阶段 |
| honors: | 荣誉资质查询阶段 |
| network_failure | 网络连接失败或超时 |
| http_数字 | 上游HTTP错误,例如http_503=上游暂不可用 |
| provider_failure | 企查查业务返回失败 |
| response_too_large | 上游响应内容过大 |
| invalid_json | 上游不是合法JSON |
| invalid_result / invalid_search_result | 上游数据结构不符合要求 |
| invalid_candidate / duplicate_candidate | 候选身份缺失或重复 |
| invalid_paging | 分页信息不合法 |
| company_identity_mismatch | 工商详情与用户确认的公司身份不一致 |
| invalid_honor_result / invalid_honor_data | 荣誉返回结构不合法 |
| inconsistent_honor_result / inconsistent_honor_paging | 荣誉记录或分页数据不一致 |
| page_limit | 已到荣誉查询页数上限,资料可能未取全 |
例如 basic:network_failure 应理解为“查询工商信息时网络失败”,不能只显示“basic”。Redis等未捕获异常在API层通常被统一为processing_failed,不应期待接口透出所有内部错误。
| 字段 | 可以理解为 | 不能理解为 |
|---|---|---|
| progress.status=completed | 当前阶段结束 | 依赖一定成功、政策一定符合 |
| done.status=completed | 本次响应流正常结束 | 模型一定没有降级、用户一定符合资格 |
| retrieval.complete=true | 本轮检索范围内处理完整 | 所有政策都找到了 |
| recommendation.complete=true | 本轮规定信息完整性条件通过 | 综合说明一定是模型生成、政策一定获批 |
| summary.status=generated | 综合说明成功生成 | 内容已获人工审核或资格审批 |
| conditions.status=待确认 | 资格条件还需补充核验 | 不符合条件 |
| match_basis.status=supports | 当前事实支持相关性判断 | 全部申报条件已满足 |
页面上优先展示后端给出的中文message/text和具体事实。英文状态按所在字段翻译成标签即可,原始ID、路径、校验值、错误码放在引用详情或诊断信息中。
请求pictures、files均为可选URL字符串数组,空数组/省略等价。attachments事件的data.items与result.data.attachments提供id(来源ID)、kind(picture/file)、index(该数组内1起序号)、title、status(ready/failed)、format、warnings及失败时的error/message。source.type=user_attachment表示用户附件;full_record.sections[].location/text为定位和提取文字,图片文字是视觉识别笔记。失败仍沿原summary和analysis_errors展示。详细格式、预算、错误及恢复约定见附件契约。
recommendation新增partial_answers(不完整候选的已核验片段,仅供参考,不是推荐)。candidate_diagnostics新增chunk_count、failed_chunks;validation_attempts新增card_fields、field_errors;多块analyses保留chunk_index及card_evidence。旧字段保持,详细语义与失败重试见候选分析恢复。模型字段快照属于未验证数据,不应直接作为面向用户的答复。