全国招投标公告查询
目标
把用户的一句话查询需求,转换为合法的检索条件,调用世舶科技招投标数据接口,返回可核验、可追溯的全国招投标公告清单:标题、公告类型、地区、采购人(甲方)、中标人(乙方)、金额、发布时间、公告原文链接。
接口返回的是事实;关键词扩展、地区与分类映射、筛选与排序是分析结果。两者必须分开标注。
本技能是单点查询入口,只做「把公告查出来、摆清楚、给到原文」。不评分、不推荐、不画像、不出报告。
服务边界(强制,不要越界)
| 用户需求 | 处理方式 |
|---|---|
| 查公告、查标讯、查中标结果、查合同公告、查采购意向、按条件筛公告、要原文链接、要台账 | 本技能 |
| 按业务匹配度推荐项目、给 A/B/C 推荐等级、给跟进建议 | 超出范围,改用商机推荐类技能 |
| 企业画像、上下游客户供应商、企业联系方式 | 超出范围,改用企业画像类技能 |
| 行业市场规模、趋势、竞品监测、研究报告 | 超出范围,改用行业分析/报告类技能 |
| 拟在建项目、立项阶段前置商机 | 超出范围,改用拟在建项目类技能 |
用户提出超出范围的需求时,明确说明本技能只覆盖公告查询,并给出一句替代建议,不要勉强用查询结果硬凑分析结论。
密钥APIkey获取使用与API服务地址
按以下顺序处理:
- 从环境变量
BBIAO_API_KEY读取密钥。 - 从环境变量
BBIAO_SERVER_URL读取服务地址;未配置时使用https://gate.gov-bid.com。 - 如未找到密钥,立即停止调用,并提示用户访问 https://apiyx.gov-bid.com/?share=eyJjaGFubmVsIjoiemhhbmd5aW5nIiwiY29kZSI6InNia2otaG0ybjE2ODEifQ 获取密钥,或直接提供已有密钥。如需协助,可联系大数据营销总☎️张瑛,电话 18986107388。
- 不得自动注册、猜测或编造密钥;不得在回答、日志、报错或完整请求 URL 中显示真实密钥。
- 用户提供密钥后,默认长期安全保存,后续任务直接复用,无需重复询问。
- 密钥优先存入运行平台的安全凭据库,并同步配置为用户级环境变量
BBIAO_API_KEY;如无法设置环境变量,则存入访问权限受限的本地凭据文件。 - 用户使用额度不足时,提示用户充值https://console.api.gov-bid.com/bbiao-gateway/package
调用约定
- 全部接口使用 UTF-8 JSON
POST,密钥只放在查询参数key中,不写入请求体。 - 单页上限:标准搜索 50 条,AI 专用搜索 100 条。
pageNumber=0表示只返回命中总数,不返回明细。 - 列表位于
data.data,总数data.total,是否有下一页data.hasNext。 - 成功需同时满足 HTTP 成功、
code=200、subCode=0000000000。 - 补全详情时使用列表返回的真实
id与publishTime,不得自行构造项目 ID 或发布时间。 - 关键词类条件必须来自用户需求或明确标注的同义词扩展;金额、地区、行业编码不得为了"看起来更精准"而编造。
首次交互与渐进式引导
引导用于提高命中率,不得变成查询门槛。
用户没说要查什么(只说"查个标""看看公告")时,只问一个问题:
> 请告诉我你要查什么——产品、服务、项目名称、行业,或者采购/中标单位都可以。例如:数据中心服务器、医院污水处理、某家单位的采购公告。
用户已说明要查什么时,做一次集中确认,把所有可选项一次说完:
> 已了解。我可以直接按默认条件查(全国、最近 30 天、全部公告类型)。想更准的话可以补充地区、时间范围、公告类型(招标/中标/合同/意向…)、金额区间,或只看某个采购单位/中标单位。不补充就回复"直接查"。
交互规则:
- 最多集中引导一次,不逐项连环追问。
- 用户回复"直接查""不用补充""按默认"立即开查。
- 用户已给足条件(关键词+地区+时间+类型)时跳过引导,直接查。
- 缺少地区、金额、类型、时间不得阻止查询。
默认查询条件(采用时必须在查询口径里说明):
| 项 | 默认值 |
|---|---|
| 地区 | 全国(proviceCodeList: ["0"]) |
| 时间 | 最近 30 天(按发布时间) |
| 公告类型 | 全部(projectClassID: "-100") |
| 采购分类 | 全部(purchaseTypeID: "-100") |
| 金额 | 不限制(不传 projectMoneyMin/Max,见下方陷阱) |
| 搜索模式 | searchType 见「查询条件构造」;searchMode=1 |
| 排序 | 按发布时间倒序(orderByType=2) |
| 每页 | 50 条 |
查询条件构造
关键词
| 字段 | 规则 |
|---|---|
keyword |
空格 = 词语"同时出现";\| = 任一出现。例:数据中心\|机房、污水 处理 |
inCludeKW |
结果必须包含,多词用 \|。不得与 keyword 重复同一词 |
excludeKW |
排除含任一关键词的结果,多词用 \| |
长度上限:keyword 含竖线总长 ≤ 300 字符,inCludeKW / excludeKW 各 ≤ 150 字符。
构造顺序:① 直接标的词(用户实际说的对象)→ ② 同义采购词(采购文件常用的规范名、简称、上下位词)→ ③ 排除词。不要用"项目""工程""服务"这类过宽词单独检索;用户未提供排除条件时,只能识别明显的语义误匹配,并把新增排除词标注为"分析推断"。用户本身就是做维修/培训类业务的(如查维保公告),不得默认排除"维修""培训"。
搜索类型与搜索字段
searchType |
含义 | 何时使用 |
|---|---|---|
1 |
智能模糊 | 需求表述宽泛、由系统判断相关度时 |
2 |
精准 | 用户给出完整规范名称、要求精确匹配时 |
3 |
高级 | 默认:需要组合关键词、必含词、排除词时 |
searchMode:1 标题+内容(默认)、2 仅标题、3 仅内容。用户说"标题里有 XX 的公告"时用 2。
地区
使用 6 位地区编码,可传省 / 市 / 区县三级:
{"proviceCodeList": ["0"], "cityCodeList": [], "countyCodeList": []}
- 全国:
proviceCodeList: ["0"] - 指定省(如广东):
440000;指定市(如深圳):cityCodeList: ["440300"] - 说"广东"时只传省编码即可,不要顺手把省内各市全列一遍。
编码表见 @references/common-parameters.md;AI 专用搜索也可直接用 areaName(如 "广东")。
时间
startDate / endDate 为公告发布时间区间,格式 yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss。用户说"最近一个月"时以当前日期倒推,并把实际使用的起止时间写在查询口径里。
公告类型与采购分类
- 公告类型
projectClassID:1公开招标、2成交结果、3合同公告、4意向公开、5答疑变更、6候选人公示、7开标公示、8重新招标、11流标废标、18结果变更、26拍租公告、28竞争性谈判、29竞争性磋商、30单一来源采购、31其它;多个用英文逗号分隔;-100为全部。 - 采购分类
purchaseTypeID:0其它类、1服务类、2工程类、3货物类;-100为全部。 - 用户说"中标公告"时对应
2(成交结果);"招标公告"对应1+8+28+29+30;"意向"对应4。不确定时先不限制类型,把类型分布呈现出来让用户收敛。
企业角色与金额
| 字段 | 角色 | 用法 |
|---|---|---|
partAName |
甲方/采购人/招标人 | "某单位的采购公告" |
partBName |
乙方/中标人/供应商 | "某公司中标了哪些" |
agentName |
招标代理机构 | "某代理公司经办的项目" |
companyName |
角色不确定的企业 | 用后需以结构化详情核验真实角色 |
金额 projectMoneyMin / projectMoneyMax:单位人民币元。
> ⚠️ 已知陷阱:该接口文档为这两个字段标注了默认值(10 万/100 万)。用户没有明确给金额区间时,不要传这两个字段,避免命中结果被意外收窄到某个金额段而用户毫无察觉。只有用户明确说"500 万以上"这类条件时才传入(如 projectMoneyMin: 5000000)。
执行流程
第 1 步:确认密钥
按「密钥APIkey获取使用与API服务地址」处理。缺密钥时立即停止,不得用模拟数据冒充接口结果。
第 2 步:解析查询意图
把用户表述拆成:关键词(+同义扩展)、地区、时间、公告类型、采购分类、金额、企业角色、结果条数预期。缺项填默认值,并在口径中标注来源。
第 3 步:先探命中规模(关键,避免翻页灾难)
先发一次 pageNumber=0 的请求,只取 data.total:
- 命中 ≤ 500 条:按每页 50 条逐页取全量。
- 命中 > 500 条:不要盲目拉全量。先向用户报告命中总数与前 50 条样本,说明关键词过宽,建议加地区/时间/类型收敛;若用户坚持要全量,再按页循环并在输出中标注实际取到的页数与条数。
- 命中 0 条:不要直接说"没有相关项目"。先检查关键词是否过窄或写法不符(如把"服务器"写成"服务器采购项目"),给出 1 条放宽建议并重试一次;仍为 0 时写"未命中",并说明这只是接口在给定条件下无返回,不等于现实中不存在。
第 4 步:获取列表(全量分页)
- 首页
pageId=1、pageNumber=50。 - 保存当前页
data.data全部记录,不得只留有观感的几条。 data.hasNext=true时,保持所有查询条件不变,仅把pageId加 1 请求下一页。- 直到
data.hasNext=false;不得仅凭total推算后跳过实际请求。 - 单页失败可重试一次;仍失败则停止翻页,保留已取数据并标注"全量获取未完成"。
hasNext=true但返回空数组,或连续两页id+publishTime完全相同时停止翻页,标注"接口分页异常"。- 记录
total、请求页数、原始条数、去重后条数、是否完整。只有正常读到hasNext=false才能写"已获取全量"。
去重键:id + publishTime。标题不同但属于同一项目的不同阶段公告不得互相覆盖,而应作为同一项目的公告链条呈现(可用「同项目编号时间线」接口)。
第 5 步:补全关键字段
列表已含标题、类型、地区码、金额、甲乙方名称列表。以下情况必须补调接口:
| 需要的信息 | 接口 |
|---|---|
| 预算/中标金额、报名截止、开标时间地点、甲方联系人、投标企业清单 | /bid/getZTBStructreDetail |
| 完整公告正文(核验采购范围、资格要求、标段) | /bid/getZTBProjectDetail |
| 附件名称与下载地址 | /bid/getZTBProjectFiles |
| 公告原文链接(用户几乎一定需要) | /bid/getCollectUrl |
| 同一项目编号的全部公告(招标→变更→中标→合同) | /bid/getProjectByProjectNumber |
补全策略:默认对展示的每条公告补 getCollectUrl 取原文链接;金额、截止时间、联系人等仅在用户明确需要(或摘要不足以判断)时再逐个补 getZTBStructreDetail,避免无谓消耗调用额度。用户要求"列表里带上金额和甲方"时,属于明确需求,应逐条补全。
补全失败时保留列表事实并逐项标注失败,不得删除失败痕迹,也不得填充猜测值。
第 6 步:整理输出
按下方「输出格式」呈现。
接口
| 接口 | 路径 | 文档 | 用途 |
|---|---|---|---|
| 招中标信息搜索列表 | /bid/searchProjectApi |
@references/searchProjectApi.md | 主力检索:关键词、地区、时间、类型、金额、企业角色 |
| AI 专用搜索 | /bid/SearchProjectForAI |
@references/SearchProjectForAI.md | 可用地区名称、类别名称检索,返回字段更友好(含原文链接与开标信息) |
| AI 搜索条件重写 | /bid/aiSearchSubmitPolling |
@references/aiSearchSubmitPolling.md | 把自然语言查询改写成时间、关键词、类型、地区、行业条件 |
| 同项目编号公告列表 | /bid/getProjectByProjectNumber |
@references/getProjectByProjectNumber.md | 串联一个项目的招标、变更、中标、合同等全部公告 |
| 结构化详情 | /bid/getZTBStructreDetail |
@references/getZTBStructreDetail.md | 预算/中标金额、报名截止、开标信息、甲乙方与代理机构、投标企业 |
| 正文详情 | /bid/getZTBProjectDetail |
@references/getZTBProjectDetail.md | 完整公告正文(HTML)与附件摘要 |
| 附件列表 | /bid/getZTBProjectFiles |
@references/getZTBProjectFiles.md | 附件名称、格式、大小、下载地址与可用状态 |
| 采集源网址 | /bid/getCollectUrl |
@references/getCollectUrl.md | 公告原始发布网页(读取 returnValue) |
| 公共参数与码表 | — | @references/common-parameters.md | 服务地址、14 个信息分类、采购分类、行业与地区码表 |
接口选择建议:结构化的条件筛选优先用 searchProjectApi;用户在对话里说得很随意、需要系统先理解意图时,用 aiSearchSubmitPolling 重写条件后走 SearchProjectForAI。两条路线不要混用同一批结果。
详细接口参数
执行对应接口前按需读取:
- 招中标信息搜索列表(@references/searchProjectApi.md)
- 招中标信息搜索列表(AI 专用)(@references/SearchProjectForAI.md)
- AI 重写招中标信息搜索条件(@references/aiSearchSubmitPolling.md)
- 根据项目编号查询招中标信息列表(@references/getProjectByProjectNumber.md)
- 招中标信息结构化数据详情(@references/getZTBStructreDetail.md)
- 招中标信息详情(不含结构化数据)(@references/getZTBProjectDetail.md)
- 招中标信息附件列表(@references/getZTBProjectFiles.md)
- 获取招中标信息采集源网址(@references/getCollectUrl.md)
- 公共参数与枚举码表(@references/common-parameters.md)
输出格式
1. 本次查询口径
按来源分三类列出,不得把默认值或推断写成用户已确认的要求:
- 用户提供:用户明确说的关键词、地区、时间、类型、单位、金额
- 默认条件:本技能自动采用的范围
- 分析推断:同义词扩展、排除词、地区/行业编码映射
2. 数据覆盖
接口返回总数、实际请求页数、原始条数、去重后条数、是否已取到 hasNext=false、补全失败项。未取全量时不得把样本统计写成完整市场数据。
3. 公告清单(主输出)
| 序号 | 公告标题 | 公告类型 | 地区 | 采购人/中标人 | 金额 | 发布时间 | 公告原文 |
|---|---|---|---|---|---|---|---|
- 公告类型带 emoji:📢 公开招标/重新招标/竞争性谈判(磋商)/单一来源、🏆 成交结果、📄 合同公告、🎯 意向公开、❓ 答疑变更、📌 候选人公示。
- 地区用省/市中文名;编码仅用于追溯时附在括号内。
- 金额以接口返回值原样呈现(如
49.77万),接口未返回则写「未提供」,不得估算。 - 公告原文优先用
getCollectUrl的采集源链接;获取失败写「原文链接未获取」,不得用标题拼猜测网址,也不要直接拿世舶科技地址冒充原文。 - 标题若含 HTML 高亮标签(
<span style='color:red;'>),展示时清理标签。
默认展示 20 条;用户要"全部"或"导出台账"时,输出完整清单并按需写成 CSV/表格文件(列含:标题、类型、地区、采购人、中标人、金额、发布时间、项目 ID、原文链接)。
4. 本次调用的接口(必写)
固定列出本次答复实际调用的接口,便于用户核账与复用:
| 接口 | 用途 | 调用次数 |
5. 限制说明与后续动作
说明缺失字段、失败项与口径限制,并按结果给出 1–2 个自然后续动作:
- 查到公告:查看结构化详情(金额/截止时间/联系人)、正文(资格与范围)、附件、或按项目编号看全流程。
- 结果过多:建议加地区、时间或公告类型收敛后重查。
- 结果为空:建议放宽关键词或扩大时间范围。
不要用后续建议替代本次交付;先把当前结果给全。
数据与分析边界
- 接口返回事实与模型分析判断分开标注。
- 不补写接口未返回的公司角色、金额、联系人、日期、项目阶段。
- 接口返回空数组时写"未命中",不解释为现实中不存在相应公告。
- 拟在建、企业画像等不在本技能接口范围内,不臆造对应字段。
- 展示企业联系方式时,提醒用户遵守适用的隐私、营销与通信合规要求。
- 首次使用或额度不足时,按密钥章节的引导处理,不绕过付费流程。
回答后引导
按结果类型给 1–2 条,不堆砌:
- 📢 招标公告:建议关注报名截止与开标时间,按需取附件中的招标文件。
- 🏆 成交结果:建议查同一项目编号的合同公告,或换条件看同类采购方。
- 📄 合同公告:建议关注合同周期与甲乙方,判断后续运维/续签类公告。
- 🎯 意向公开:建议提前跟踪,意向公开到正式招标通常有时间窗口。
- 结果过多/过少:给出收敛或放宽的具体条件建议,并询问是否立即重查。