name: custom-source-setup description: 使用LLM驱动的自动检测功能,从任何网站设置自定义文章源。当用户要求添加新源、抓取网站、创建工作流或需要从尚未支持的网站获取论文时使用。 tools:
- analyze_source_url
- refine_source_selectors
- confirm_source_workflow
- list_available_sources
自定义源设置
自动配置来自任何网站的新文章源。系统使用LLM分析页面结构、检测文章列表并提出CSS选择器 - 无需手动配置抓取规则。
何时使用此技能
当用户出现以下情况时加载此技能:
- 提及他们想要获取论文的URL或网站
- 要求“添加源”或“抓取网站”
- 需要内置源列表中未包含的期刊/会议的论文
- 说类似“你能查看Nature的论文吗?”或“从这个网站获取文章”的话
使用的工具
| 工具 | 用途 |
|---|---|
list_available_sources |
检查已存在的源 |
analyze_source_url |
自动检测任何URL上的文章结构 |
refine_source_selectors |
如果检测结果错误,进行修正 |
confirm_source_workflow |
保存为永久发现源 |
快速设置流程(3-5分钟)
添加新源:
步骤1:分析URL
analyze_source_url(url="https://example.com/papers")
步骤2:与用户一起审查
- 显示置信度分数(高/中/低)
- 显示找到的文章数量
- 显示2-3个示例文章(标题、作者、URL)
- 询问:“这看起来正确吗?”
步骤3:如果需要,进行优化(可选)
如果用户指出有错误:
refine_source_selectors(
url="https://example.com/papers",
current_selectors={...来自步骤1...},
user_feedback="标题在摘要部分,而不是标题部分"
)
步骤4:确认并保存
confirm_source_workflow(
url="https://example.com/papers",
name="example_papers", # 使用清晰、唯一的名称
article_container_selector="...", # 来自分析输出
selectors={...}, # 来自分析输出
pagination_selector="...", # 如果检测到
search_filters=[...], # 如果检测到
)
详细工作流程
1. 检测意图
注意以下信号:
- 用户提供URL:“你能抓取https://www.nber.org/papers吗?”
- 用户提及网站:“我想要Nature的论文”
- 用户询问添加源:“如何添加自定义源?”
响应模式:
我可以将该网站设置为源。让我分析页面结构...
2. 分析URL
调用analyze_source_url(url=...)并解析结果。工具返回:
page_type:会议论文集、期刊目录、搜索结果等confidence:0.0-1.0的分数total_articles_found:检测到的文章容器数量selectors:可以提取哪些字段(标题、作者、摘要、URL、PDF、DOI等)sample_articles:3个示例提取用于验证search_filters:检测到的搜索输入、日期过滤器、排序下拉菜单pagination_selector:如果存在分页
3. 向用户呈现结果
格式化清晰的摘要,显示检测到的内容:
## 分析结果:[域名]
**置信度**:[🟢 高 / 🟡 中 / 🔴 低] ([分数])
**页面类型**:[类型]
**找到的文章**:[数量]
**可以提取**:
- 标题 ✓
- 作者 ✓
- 摘要 ✓
- URL ✓
- PDF链接 ✓
- 发布日期 ✓
**检测到的搜索过滤器**:[数量]
- 关键词搜索输入:[是/否]
- 日期过滤器:[是/否]
**示例文章**:
1. [标题] 作者 [作者]
2. [标题] 作者 [作者]
3. [标题] 作者 [作者]
这看起来正确吗?如果不正确,请描述问题所在,我可以进行优化。
置信度解释:
- 高 (≥0.8):非常可靠,正确提取了所有关键字段
- 中 (0.6-0.8):良好,可能缺少一些字段,如摘要或日期
- 低 (<0.6):不确定,请仔细验证样本或尝试不同的页面
4. 处理用户响应
如果正确:继续步骤5(确认)
如果不正确:请用户描述问题:
- “标题被截断了” → 选择器太窄
- “这些不是文章,是新闻帖子” → 错误的容器选择器
- “缺少作者” → 作者选择器需要调整
- “URL损坏了” → 相对URL解析问题
然后调用refine_source_selectors()并提供他们的反馈。LLM将提出修正的选择器。显示新结果并再次询问。
5. 确认并保存
一旦用户批准,询问名称:
我应该如何称呼这个源?(例如,“nber_working_papers”、“nature_neuroscience”)
然后调用confirm_source_workflow():
confirm_source_workflow(
url="https://...",
name="[用户提供的名称]",
description="[域名]的自动检测源",
article_container_selector="...", # 来自分析
selectors={...}, # 来自分析
pagination_selector="...", # 来自分析
search_filters=[...], # 来自分析
max_articles_per_run=100,
)
6. 解释后续步骤
确认后,向用户解释:
✓ 源“[名称]”已添加!
**这意味着**:
- 当您为研究问题运行发现时,您的关键词将输入到此网站的搜索框中(如果检测到)
- 系统将从列表中提取文章,遵循分页,并在遇到已找到的论文时停止
- 来自此源的文章会自动与其他源去重
**要使用此源**:
将其添加到研究问题的`selected_sources`列表中,或使用`["*"]`查询包括此源在内的所有源。
错误处理
| 问题 | 解决方案 |
|---|---|
| 置信度 < 0.5 | 建议尝试不同的页面(例如,搜索结果与主列表) |
| 找到0篇文章 | 页面可能没有文章列表;验证URL |
| 仅检测到标题 | 基本源可接受;摘要/作者可能在详情页上 |
| LLM分析失败 | 使用备用启发式方法;结果可能不太准确 |
| 用户反馈没有帮助 | 请用户描述HTML结构或手动提供示例文章 |
示例对话
示例1:简单成功案例
用户:“你能从NBER工作论文获取论文吗?”
代理:
我将设置NBER为源。让我分析他们的论文页面...
[调用 analyze_source_url("https://www.nber.org/papers")]
## 分析结果:NBER工作论文
**置信度**:🟢 高 (1.00)
**页面类型**:文章列表
**找到的文章**:34
**可以提取**:
- 标题 ✓
- 作者 ✓
- 摘要 ✓
- URL ✓
- 发布日期 ✓
**检测到的搜索过滤器**:2
- 关键词搜索输入:是
- 排序下拉菜单:是
**示例文章**:
1. “创建高机会社区:来自HOPE VI计划的证据” 作者 Raj Chetty, Rebecca Diamond等
2. “环境暴露差距在缩小吗?” 作者 Glenn Sheriff, Danae Hernandez-Cortes等
这看起来正确吗?
用户:“是的,看起来完美”
代理:
太好了!我应该如何称呼这个源?(例如,“nber_working_papers”)
用户:“nber_working_papers”
代理:
[调用 confirm_source_workflow(...)]
✓ 源“nber_working_papers”已添加!
此源现已激活,当您运行发现时,如果使用selected_sources=["*"]或明确将“nber_working_papers”添加到研究问题的源列表,它将被包含在内。您的关键词将输入到搜索框中,系统将跨多个页面提取文章,直到遇到已找到的论文。
示例2:需要优化
用户:“从https://jmlr.org/papers/添加论文”
代理:
[调用 analyze_source_url("https://jmlr.org/papers/")]
## 分析结果:JMLR
**置信度**:🟡 中 (0.65)
**找到的文章**:124
**示例文章**:
1. “第25卷” 作者 未知
2. “论文” 作者 未知
3. “论文集” 作者 未知
置信度为中。标题看起来像是卷/节标题,而不是实际的论文标题。这可能不是正确的页面 - 您可以尝试特定的卷页面吗?
用户:“试试https://jmlr.org/papers/v25/”
代理:[在更好的URL上重复分析,得到正确结果]
示例3:用户反馈优化
用户:“这些样本中的作者字段是空的”
代理:
让我优化作者选择器...
[调用 refine_source_selectors(
url="...",
current_selectors={...},
user_feedback="作者字段为空,请找到正确的作者元素"
)]
## 优化结果
**找到的文章**:87
**置信度**:🟢 高 (0.90)
**示例文章**:
1. “论文标题” 作者 John Smith, Jane Doe
2. “另一篇论文” 作者 Alice Johnson, Bob Wilson
这样更好吗?
最佳实践
- 始终先检查现有源:在设置新源之前调用
list_available_sources()以避免重复 - 使用特定的列表页面:会议论文集页面、期刊目录或搜索结果页面效果最好
- 仔细验证样本:2-3个示例文章显示将提取的内容 - 确保它们是实际的论文,而不是导航元素
- 良好的命名:使用小写字母和下划线(例如,
acm_dl、ieee_xplore、plos_one) - 注意身份验证:如果网站需要登录,设置
requires_authentication=true(身份验证设置是单独的)
限制
- 在文章列表页面上效果最好(不是单个文章详情页面)
- 无法处理需要JavaScript交互的网站(搜索表单除外)
- 无法解决验证码或复杂的身份验证流程
- 某些网站可能阻止自动访问(遵守robots.txt)
- 对于结构不寻常的网站,可能需要手动配置
响应模板
成功设置后:
✓ 自定义源“[名称]”现已激活!
**源详情**:
- 域名:[域名]
- 提取的字段:[标题、作者、摘要等]
- 搜索支持:[是/否]
- 分页:[是/否]
**用法**:
当您创建或更新研究问题时,将`"[名称]"`添加到`selected_sources`列表中。系统将:
1. 将您的研究关键词输入到网站的搜索框中(如果检测到)
2. 跨多个页面提取文章
3. 在遇到已收藏中的论文时停止
4. 与其他源的文章去重
想测试它吗?使用此源创建研究问题,或将其添加到现有问题中!