联邦公报

概览

美国联邦公报本身——谁改了什么、什么时候改、哪些还在征求意见。

状态
live
文档 id
doc_id 如 fr:2024-07332
引用格式
[89 FR 12345]

常用调用

找某机构的规则POST /v1/fr/search {"query": "PFAS drinking water", "filters": {"doc_type": "Rule"}}
正在征求意见的拟议规则POST /v1/fr/search {"query": "出口管制 半导体", "filters": {"doc_type": "Proposed Rule", "comments_close_on": {"gte": "2026-10-09"}}}
读一篇GET /v1/fr/read/fr:2024-07332 → 默认 level=detail(原文摘要、行为、CFR、案卷、RIN、生效/截止日期、原文链接)

是词,不是意思。这个域没有向量:mode 只有 keyword,写一句话描述需求搜不出东西——要给确切的词。支持引号短语、OR、-排除;中文会分词,中英混写会自动拆成两路。

细则
  • 和 us_law 的分工:us_law 是现行条文(CFR / USC 条款级),fr 是公报原文(谁在什么时候改了什么)。
  • doc_type 用官方写法(Rule / Proposed Rule / Notice / Presidential Document / Uncategorized Document / Correction / Sunshine Act Document),小写的 rule 筛不到东西。
  • 找正在征求意见的规则:filters.comments_close_on={"gte": "今天"};找即将生效的:effective_on 区间。
  • subjects 是开放标签(模型给的),归一前不作筛选字段;要按主题筛用 fr_topics(官方主题词)。
  • 没有向量:query 走英文 tsvector + 中文 zhparser 两路并集,中英混合会自动拆开,支持引号短语 / OR / -排除。
  • 模型写的字段(做摘要可以,别当原文引用):action_kind、affected、key_point、one_liner、one_liner_zh、subjects。
  • 字段表与枚举值由库的自描述(search.field)生成,不是手写的;枚举计数的口径是 2026-10-13。

读

GET/v1/fr/read/{doc_id}
三档深浅,不传就是 detail。免费样例:fr:2024-07332。

三档

深浅credits返回
brief1卡片:action_kind、agencies、citation、doc_id、doc_type、html_url、one_liner、one_liner_zh…
detail (默认)2全部结构化字段(卡片 + 原文摘要 / 明细字段)

参数

参数类型说明
doc_id (path) 必填 string 文档 id(doc_id)。
level brief · detail= detail 读多深。
format json · md · html= json 响应形态。

示例

{ "domain": "fr", "id": "fr:2024-07332", "level": "detail", "view": "detail", "data": { … } | "text": "…", "token_count": 1834, "meta": { … } }
旧写法 GET /v1/fr/doc/{id}?view=… 仍然可用。

批量读

POST/v1/fr/read
最多 50 个 id,同一档。查不到的 id 返回 error: "not_found",不扣费。

参数

参数类型说明
ids 必填 string[] 文档 id 列表。
level brief · detail= detail 所有 id 共用的档。

示例

{ "domain": "fr", "level": "detail", "docs": [ { "id": "…", "data": { … } }, { "id": "…", "error": "not_found" } ], "meta": { … } }

Facets

GET/v1/fr/facets?field={field}
某个过滤字段的合法值,agent 不用猜;预聚合字段带计数,声明的枚举没有。免费、不需要 key。

参数

参数类型说明
field 必填 action_kind · doc_type 有 facets 的过滤字段。
limit integer= 50 最多返回多少个值。

示例

{ "domain": "fr", "field": "…", "values": [ { "value": "…", "count": 3120 } ], "meta": { … } }

问registered key+ /stream

POST/v1/fr/ask
本域的 agentic 问答:没有向量层,模型把问题翻成结构化筛选 + 中英分词全文检索,读详情后作答,引用写成 [fr: <标题>];/stream 为 NDJSON,answer_delta 是边生成边发的真实片段。effort low / medium / high 对应 50 / 100 / 200 credits。加 /stream 走 NDJSON,第一个事件一定是 billing。首个 answer_delta 之前失败会退款。

参数

参数类型说明
query 必填 string 1–2000 字符。问得具体;要数字就直接问数字。
effort low · medium · high= low 检索轮数,也决定价格:50 / 100 / 200 credits。套餐限制最高档。
verbose bool= false 返回工具调用轨迹(流式时多 tool_call / tool_result / thinking 事件)。
top_k integer= 10 预取候选数。
stream_answer bool= true 仅流式:false 时只发一个 answer 事件。
max_rounds integer 0–8,覆盖 effort 预设。
force_answer_after number 秒;强制切入作答阶段。
max_answer_tokens integer= 4096 触顶时置 answer_truncated。
language string 回答语言,默认跟随 query。

示例

{ "answer": "… [89 FR 12345] …", "sources": [ … ], "stats": { "rounds": 1, "elapsed_s": 6.2, "answer_truncated": false }, "coverage"?: { … }, "meta": { "credits": { "charged": 50, … } } }
引用是真的——answer 里的每个 id 都存在于本垂域(格式 [89 FR 12345])。sources 是召回集,不是引用列表。answer_truncated 表示不完整。