Consulting Report Search
Description
Search and question-answering skill for consulting reports, industry reports, and market research reports. By default, it prioritizes free iResearch reports, uses the iResearch list API for primary recall, then uses QuestMobile public reports as the secondary source. Results must always show iResearch first and QuestMobile second. The search workflow now supports deeper QuestMobile pagination and grouped output rendering, so mixed-source results can be shown as fixed source sections with iResearch first.
Within each source, the default ranking mode is now newest-first, then relevance. The default sort direction is descending, so newer reports appear before older ones. If needed, agents can switch to relevance-first with an explicit CLI flag, or override the direction explicitly. If the user query itself contains a year such as 2024, 2025, or 2026, ranking should instead prioritize year signals in the report title first, then report relevance, then publication time, and all three dimensions should be treated in descending order.
Activation Keywords
- - 咨询报告搜索
- 行业报告问答
- 艾瑞报告
- 艾瑞咨询
- 市场研究报告
- iresearch report
- report search
- market research report
Tools Used
- - exec: Run the bundled script to fetch iResearch and QuestMobile search results and detail pages
- read: Load the skill reference file for source behavior, encoding notes, and parsing rules
- write: Save search results or answer drafts when needed
- browser or web search tools: Use browser-based or available web-search capability when both primary sources fail to return reports
Installation
No extra third-party packages are required. The script uses only the Python standard library.
For iResearch specifically, the logical default pageSize is 100 items. However, the current live public endpoint can fail when asked for 100 items in a single backend call, so the bundled script transparently splits large iResearch fetches into multiple smaller requests while still preserving the user-facing default of 100.
Prerequisites
- - Network access to https://www.iresearch.com.cn/ and https://report.iresearch.cn/
- Network access to https://www.questmobile.com.cn/research/reports/
- Python 3.10+ to run the script
Usage Patterns
Search Reports
CODEBLOCK0
Fetch multiple pages from the iResearch free report feed, then pull multiple QuestMobile pages from its public article-list API only as fallback coverage. The default search depth is now 8 pages of iResearch results with a logical page size of 100, so the script starts from a much larger newest-first window before falling back. If the initial iResearch window still does not produce enough relevant matches, the script now automatically expands the iResearch search deeper, up to 20 logical pages in total, before QuestMobile is allowed to fill remaining slots. Final ranking must still keep all iResearch matches ahead of QuestMobile matches, and grouped output should render iResearch as the first section and QuestMobile as the second section.
By default, results are sorted by publish time first and relevance second within each source. The default sort direction is desc. Use --sort-by relevance only when the user explicitly prefers stronger keyword matching over freshness.
If the query contains a year, override the normal within-source sort and use: title year, then relevance, then publication time. All three are descending. This helps queries like 2025 AI营销 or 2024 飞行汽车 prefer reports whose titles explicitly carry the requested year.
Markdown output also shows the active sort mode and any active --since filter at the top of the result block.
Every returned report should explicitly include a report link. This is a hard requirement. In structured output, use the report_link field. In Markdown output, show a Report Link line for each report. If a source item does not have a valid public report link, it should be dropped from list/search output instead of being returned as a bare title.
When both sources have matches, the mixed-source search now tries to fill the requested result window with as many relevant iResearch reports as possible first. If the initial newest window is not enough, it automatically keeps paging deeper into iResearch before QuestMobile is used. QuestMobile should only fill the remaining slots when iResearch alone still cannot satisfy the requested result count.
If the user explicitly wants only iResearch, use --iresearch-only. This is the preferred flag for pure iResearch report collection workflows; --no-questmobile remains available as a lower-level compatibility switch.
Fetch Report Details
CODEBLOCK1
Read the report detail page and return the summary, catalog, chart catalog, online reader link, and image links from the reader page.
The detail workflow should now also return a conservative interpretation, evidence boundary note, and structured outline sections derived from the public introduction, meta description, and public catalog. The interpretation should read like a short answer-oriented summary instead of a raw evidence dump.
QuestMobile detail pages are also supported through full URLs or qm.<id> identifiers.
Answer a Question Against One Report
CODEBLOCK2
Use answer when the user is asking a concrete question about one report rather than requesting a raw detail dump.
The answer mode should:
- - fetch the same public detail evidence as INLINECODE15
- generate a conservative answer grounded in public summary, outline sections, and chart catalog
- return explicit evidence snippets
- keep the evidence boundary visible
- include report and online-reading links for manual verification
Browse Recent Free Reports
CODEBLOCK3
Use this to inspect the recent free-report pool before deciding which reports to summarize or use for QA.
Search Reports with Explicit Source Groups
CODEBLOCK4
Use grouped output when you need a stable source-layered rendering format. This keeps iResearch and QuestMobile separated instead of interleaving them in a single list.
Use --since when the user explicitly wants only recent reports, for example limiting the result window to 2025 and later.
The hidden --last-id cursor parameter is deprecated for normal use and should only be used for debugging historical iResearch cursor windows.
Instructions for Agents
Step 1: Classify the Request
First determine whether the user wants:
- - Report search
- Topic filtering or comparison
- QA grounded in one or more reports
- Lead collection for relevant reports
If the request involves industry status, trends, market size, cases, figures, or charts, start with iResearch by default.
Step 2: Search iResearch Free Reports First
Always use the bundled script first instead of jumping directly to broad web search:
CODEBLOCK5
Execution requirements:
- - Fetch a deep newest-first iResearch window by default; the current default is 8 logical pages with pageSize 100
- If relevant iResearch matches are still insufficient, automatically expand deeper up to 20 logical pages before falling back to QuestMobile
- Present iResearch matches first in the final answer
- Prefer returning as many relevant iResearch reports as possible before using QuestMobile to fill any remaining slots
- If the query contains a year, prioritize title-year signals first, then relevance, then publication time, all in descending order
- Rank results within each source by newest publication time first, then relevance, with
--sort-order desc as the default unless the user explicitly asks for a different order - Include a report link for every returned report; do not return bare titles without a clickable destination
- Treat the report link as a hard requirement; drop linkless items from list/search output and fail detail-style flows if a valid public report link is unavailable
- If the user specifies an industry, add INLINECODE19
- If the user wants only newer reports, add INLINECODE20
- Do not use
--last-id in normal workflows; it is a deprecated debug-only cursor override - Use QuestMobile only as the secondary source after iResearch results have been gathered
- Use
--iresearch-only when the user explicitly wants only iResearch reports - Prefer
--grouped when the answer contains both iResearch and QuestMobile results
Step 3: Use QuestMobile as the Secondary Source
If iResearch results are too sparse, or if the user asks for broader coverage, use the same search command without disabling QuestMobile:
CODEBLOCK6
Rules for QuestMobile usage:
- - Never place QuestMobile above iResearch in the final result order
- Use QuestMobile to fill gaps or broaden topical coverage only after iResearch results have been exhausted for the requested window
- When both sources match, present them in separate source layers rather than mixing them together
- In mixed-source result lists, keep QuestMobile after all iResearch entries and only use it to fill the remaining slots when iResearch results are insufficient
- Use multiple QuestMobile pages when broader coverage is needed instead of relying on the default landing page only
Step 4: Pull Detail Evidence for QA
If the user wants a summary, explanation, or grounded answer instead of just report titles, fetch details for the top 1 to 3 candidate reports:
CODEBLOCK7
Prefer these fields as answer evidence:
- - INLINECODE24
- INLINECODE25
- INLINECODE26
- INLINECODE27
- INLINECODE28
- INLINECODE29
- INLINECODE30
- INLINECODE31
- INLINECODE32
- INLINECODE33
If the user asks a direct question about one chosen report, prefer the dedicated answer flow:
CODEBLOCK8
Prefer these fields from answer output when responding:
- - INLINECODE35
- INLINECODE36
- INLINECODE37
- INLINECODE38
- INLINECODE39
- INLINECODE40
QuestMobile detail pages can additionally provide:
- - article intro text
- section headings
- image URLs from the report body
For iResearch specifically, the preferred interpretation stack is:
- 1.
summary from the public report introduction - detail-page meta description when it contains a richer synopsis
- INLINECODE42 extracted from the public catalog
- online reader image links for manual page-level verification when needed
Step 5: State the Evidence Boundary Clearly
If only the summary, catalog, and chart catalog are available, restrict the answer to:
- - What topics the report covers
- The rough research scope and chapter structure
- Which cases, trends, or indicators the report appears to cover
Do not convert the table of contents into claimed report conclusions. If the user asks for exact data points, page-level evidence, or chart-specific content:
- - Explicitly say that current evidence comes mainly from the summary and catalog
- Use the
interpretation field for a conservative reading of what the report is about, but do not treat it as a replacement for page-level evidence - Use the
answer mode when the user asks a concrete report-specific question, especially around summary, chapters, chart/data coverage, timing, source, or report links - Provide the online reader link
- Use reader-page image links for page-by-page verification if needed
Step 6: Expand Only When iResearch Is Not Enough
Use other sources only when:
- - iResearch has no relevant report
- Free-report information is not enough to answer the question
- The user explicitly asks for multi-source comparison
If both iResearch and QuestMobile return no usable reports, switch to web search as the fallback discovery path. Prefer targeted report-page searches such as:
- - INLINECODE45
- INLINECODE46
- INLINECODE47
- INLINECODE48
When web search finds a concrete report page URL, feed that URL back into the normal detail flow when possible instead of summarizing the search snippet alone.
When expanding, present sources in separate layers:
- 1. iResearch reports
- QuestMobile reports
- Web-search discovered report pages
- Other public sources
Do not mix secondary sources into the first section.
Context Files
references/iresearch-api.md
Contains source parameters, pagination behavior, encoding notes, detail-page anchors, and parsing considerations for both iResearch and QuestMobile. Read it only when adjusting the script or debugging extraction issues.
Error Handling
Empty Search Results
CODEBLOCK9
Garbled Detail Page or Missing Fields
CODEBLOCK10
Only Summary and Catalog Are Available
CODEBLOCK11
Configuration
Optional Parameters
CODEBLOCK12
Limitations
- - This skill prioritizes iResearch free reports and uses QuestMobile public reports as secondary coverage
- It does not cover private content that requires login or payment
- iResearch detail pages reliably expose the summary, catalog, chart catalog, and online reader entry point
- The hidden
--last-id override can intentionally force older iResearch windows, so it should be treated as a debug-only compatibility flag - QuestMobile search coverage depends on the public
article-list API remaining stable - The online reader is an image stream rather than structured text, so page-by-page verification is more expensive
Best Practices
- 1. Search first, then answer. Do not give industry conclusions before locating reports.
- Put iResearch results in the first section and QuestMobile in the second section. Use grouped output when both sources are present.
- Ground factual claims in the summary, catalog, chart catalog, or article intro instead of over-inferring.
- When recommending several reports, rank iResearch first, then rank within each source by recency and relevance by default. Keep
--sort-order desc unless the user explicitly wants the oldest reports first. Use --sort-by relevance only when freshness is less important than lexical match. - If both built-in sources fail, do not stop at "no results". Run a web-search fallback with
site: constraints to recover concrete report pages.
Examples
Example 1: Search for AI Marketing Reports
CODEBLOCK13
Example 3: Fall Back to Web Search When Built-in Sources Miss
CODEBLOCK14
Example 2: Answer a Question Grounded in a Report
CODEBLOCK15
Resources
- - https://www.iresearch.com.cn/report.shtml
- https://www.iresearch.com.cn/api/products/GetReportList
- https://www.questmobile.com.cn/research/reports/
- ./references/iresearch-api.md
Related Skills
- - arxiv-search: Handles academic paper search rather than consulting or industry reports
- news-search: Handles news search and can be used as background supplementation
咨询报告搜索
描述
用于咨询报告、行业报告和市场研究报告的搜索与问答技能。默认优先使用免费的艾瑞报告,通过艾瑞列表API进行主要召回,然后使用QuestMobile公开报告作为次要来源。结果必须始终先显示艾瑞报告,再显示QuestMobile报告。搜索工作流现在支持更深的QuestMobile分页和分组输出渲染,因此混合来源的结果可以以固定的来源分区形式展示,艾瑞报告在前。
在每个来源内部,默认排序模式现在是最新优先,然后是相关性。默认排序方向为降序,因此较新的报告排在较旧的报告之前。如果需要,代理可以通过显式的CLI标志切换到相关性优先,或显式覆盖排序方向。如果用户查询本身包含年份,如2024、2025或2026,则排序应优先考虑报告标题中的年份信号,然后是报告相关性,最后是发布时间,且所有三个维度均按降序处理。
激活关键词
- - 咨询报告搜索
- 行业报告问答
- 艾瑞报告
- 艾瑞咨询
- 市场研究报告
- iresearch report
- report search
- market research report
使用的工具
- - exec: 运行捆绑脚本以获取艾瑞和QuestMobile的搜索结果及详情页面
- read: 加载技能参考文件,了解来源行为、编码说明和解析规则
- write: 在需要时保存搜索结果或答案草稿
- browser或web搜索工具: 当主要来源均无法返回报告时,使用基于浏览器的或可用的网络搜索能力
安装
无需额外的第三方包。该脚本仅使用Python标准库。
对于艾瑞,逻辑默认pageSize为100条。然而,当前的实时公共端点在单次后端调用中请求100条时可能会失败,因此捆绑脚本透明地将大型艾瑞获取拆分为多个较小的请求,同时保留面向用户的默认值100。
前提条件
- - 网络可访问 https://www.iresearch.com.cn/ 和 https://report.iresearch.cn/
- 网络可访问 https://www.questmobile.com.cn/research/reports/
- Python 3.10+ 以运行脚本
使用模式
搜索报告
bash
python collection/skills/consulting-report-search/scripts/iresearchreportsearch.py \
search AI营销 --pages 8 --limit 20 --sort-by recency --sort-order desc --grouped --format markdown
从艾瑞免费报告源获取多个页面,然后仅作为后备覆盖从QuestMobile的公开文章列表API拉取多个页面。默认搜索深度现在为8页艾瑞结果,逻辑页面大小为100,因此脚本在回退前从一个更大的最新优先窗口开始。如果初始的艾瑞窗口仍未产生足够的相关匹配,脚本现在会自动将艾瑞搜索扩展得更深,最多可达20个逻辑页面,然后才允许QuestMobile填充剩余位置。最终排序必须保持所有艾瑞匹配结果在QuestMobile匹配结果之前,分组输出应将艾瑞渲染为第一部分,QuestMobile渲染为第二部分。
默认情况下,在每个来源内部,结果首先按发布时间排序,然后按相关性排序。默认排序方向为desc。仅当用户明确偏好更强的关键词匹配而非时效性时,才使用--sort-by relevance。
如果查询包含年份,则覆盖来源内的正常排序,并使用:标题年份,然后相关性,最后发布时间。三者均为降序。这有助于像2025 AI营销或2024 飞行汽车这样的查询优先选择标题中明确包含所请求年份的报告。
Markdown输出还会在结果块的顶部显示活动的排序模式和任何活动的--since过滤器。
每个返回的报告必须明确包含报告链接。这是一个硬性要求。在结构化输出中,使用report_link字段。在Markdown输出中,为每个报告显示一行Report Link。如果某个来源项没有有效的公开报告链接,则应将其从列表/搜索输出中删除,而不是作为裸标题返回。
当两个来源都有匹配时,混合来源搜索现在会尝试首先用尽可能多的相关艾瑞报告填充请求的结果窗口。如果初始的最新窗口不够,它会自动在QuestMobile被使用之前继续深入分页艾瑞。只有当艾瑞单独仍无法满足请求的结果数量时,QuestMobile才应填充剩余位置。
如果用户明确只想要艾瑞,请使用--iresearch-only。这是纯艾瑞报告收集工作流的首选标志;--no-questmobile仍可作为较低级别的兼容性开关使用。
获取报告详情
bash
python collection/skills/consulting-report-search/scripts/iresearchreportsearch.py \
detail freport.4694 --pages 8 --include-images --format markdown
读取报告详情页面,返回摘要、目录、图表目录、在线阅读器链接以及来自阅读器页面的图片链接。
详情工作流现在还应返回一个保守的解释、证据边界说明以及从公开介绍、元描述和公开目录中提取的结构化大纲部分。解释应读起来像一个面向简短答案的摘要,而不是原始证据的转储。
QuestMobile详情页面也支持通过完整URL或qm.标识符。
针对一份报告回答问题
bash
python collection/skills/consulting-report-search/scripts/iresearchreportsearch.py \
answer freport.4794 这份报告主要讲什么? --pages 8 --include-images --format markdown
当用户针对一份报告提出具体问题,而不是请求原始详情转储时,使用answer。
答案模式应:
- - 获取与detail相同的公开详情证据
- 生成一个基于公开摘要、大纲部分和图表目录的保守答案
- 返回明确的证据片段
- 保持证据边界可见
- 包含报告和在线阅读链接以供手动验证
浏览最近的免费报告
bash
python collection/skills/consulting-report-search/scripts/iresearchreportsearch.py \
list --pages 2 --page-size 100 --format markdown
使用此命令在决定总结或用于问答哪些报告之前,检查最近的免费报告池。
使用显式来源组搜索报告
bash
python collection/skills/consulting-report-search/scripts/iresearchreportsearch.py \
search AI应用层 --pages 8 --limit 12 --sort-by recency --sort-order desc --since 2025-01-01 --grouped --format json
当需要稳定的来源分层渲染格式时,使用分组输出。这使艾瑞和QuestMobile保持分离,而不是将它们交错在单个列表中。
当用户明确只想要最近的报告时,使用--since,例如将结果窗口限制在2025年及以后。
隐藏的--last-id游标参数已弃用,不应用于正常使用,仅应用于调试历史艾瑞游标窗口。
代理指令
步骤 1: 分类请求
首先确定用户想要:
- - 报告搜索
- 主题过滤或比较
- 基于一份或多份报告的问答
- 相关报告的线索收集
如果请求涉及行业现状、趋势、市场规模、案例、数据或图表,默认从艾瑞开始。
步骤 2: 首先搜索艾瑞免费报告
始终首先使用捆绑脚本,而不是直接跳转到广泛的网络搜索:
bash
python collection/skills/consulting-report-search/scripts/iresearchreportsearch.py \
search --pages 8 --limit 20 --format json
执行要求:
- - 默认获取一个深度的最新优先艾瑞窗口;当前默认是8个逻辑页面,pageSize为100
- 如果相关艾瑞匹配仍然不足,在回退到QuestMobile之前,自动扩展更深至最多20个逻辑页面
- 在最终答案中首先呈现艾瑞匹配结果
- 优先返回尽可能多的相关艾瑞报告,然后再使用QuestMobile填充任何剩余位置
- 如果查询包含年份,则优先考虑标题年份信号,然后相关性,最后发布时间,全部按降序排列
- 在每个来源内部,按最新发布时间优先排序结果,然后按相关性排序,默认使用--sort-order desc,除非用户明确要求不同的顺序
- 为每个返回的报告包含一个报告链接;不要返回没有可点击目标的裸标题
- 将报告链接视为硬性要求;从列表/搜索输出中删除无链接项,如果有效的公开报告链接不可用,则使详情类流程失败
- 如果用户指定了行业,添加--industry
- 如果用户只想要较新的报告,添加--since YYYY-MM-DD
- 在正常工作流中不要使用--last-id;它是一个已弃用的仅调试游标覆盖
- 仅在收集艾瑞结果后,将QuestMobile用作次要来源
- 当用户明确只想要艾瑞报告时,使用--iresearch-only
- 当答案同时包含艾瑞和QuestMobile结果时,优先使用--grouped
步骤 3: 使用QuestMobile作为次要来源
如果艾瑞结果过于稀疏,或者用户要求更广泛的覆盖范围,使用相同的搜索命令而不禁用QuestMobile:
bash
python collection/skills/consulting-report-search/scripts/iresearchreportsearch.py \
search --pages 8 --limit 8 --sort-by