Hacker News 中文摘要

RSS订阅

Senior SWE-Bench:评估智能体作为高级工程师能力的开源基准 -- Senior SWE-Bench: open-source benchmark that assesses agents as senior engineers

文章摘要

BookWorm目前主要依赖Amazon和ISBNdb获取书籍元数据,但遇到数据缺失或格式错误时,导入质量会下降。为解决此问题,计划集成Google Books作为备用元数据源,通过ISBN-13获取更完整的书籍信息,提高导入成功率和数据质量。

文章总结

为BookWorm添加Google Books作为元数据源,用于回退/暂存导入

问题/机遇

BookWorm目前依赖Amazon和ISBNdb作为主要元数据源。当元数据缺失、格式错误或不完整时(尤其是仅有ISBN-13的书籍),通过承诺项或/api/import提交的不完整记录可能无法被丰富,导致Open Library中出现低质量条目。这一限制影响了数据质量和用户导入成功率,对不常见或国际图书尤为明显。

理由:为何要推进此工作,可衡量的影响是什么?

集成Google Books作为回退元数据源,能增强Open Library补充和暂存更丰富版本数据的能力。这将提高导入书籍的完整性,减少因元数据稀疏导致的导入失败,并提升用户对导入体验的信任。影响可通过导入成功率提升和“Book 978...”等占位条目减少来衡量。

成功定义:如何判断问题已解决?

  • BookWorm能够使用ISBN-13从Google Books获取并暂存元数据。
  • 自动化测试确认能准确解析各种Google Books响应,包括:
    • 正确映射可用字段(标题、副标题、作者、出版商、页数、描述、出版日期)。
    • 妥善处理缺失或不完整字段(如无作者、无ISBN-13)。
    • 当Google Books返回零个或多个匹配时,不返回结果。

提案

在BookWorm中引入对Google Books作为回退元数据提供者的支持。当Amazon查询失败或仅有ISBN-13时,BookWorm应尝试从Google Books API获取元数据并暂存以供导入。这包括更新源逻辑、元数据解析,并确保来自google_books的记录被正确处理。

要求: - openlibrary/core/imports.py中的元组STAGED_SOURCES必须包含"google_books"作为有效源,以便导入管道识别并处理来自Google Books的暂存元数据。 - 暂存bookworm元数据的URL格式为http://{affiliate_server_url}/isbn/{identifier}?high_priority=true&stage_import=true,其中affiliate_server_url来自openlibrary/core/vendors.py,参数identifier可以是ISBN-10、ISBN-13或B*ASIN。 - 在openlibrary/plugins/importapi/code.py中使用supplement_rec_with_import_item_metadata补充记录时,如果存在source_records字段,必须添加(扩展)新标识符,而非替换现有值。 - 在scripts/affiliate_server.py中,函数stage_from_google_books必须尝试为给定ISBN获取并暂存Google Books元数据,成功后通过Batch.add_items将元数据添加到相应批次。 - scripts/affiliate_server.py中的affiliate服务器处理程序必须对Amazon无结果的ISBN-13标识符回退到Google Books,但仅当请求中同时设置了查询参数high_priority=truestage_import=true。 - 如果Google Books对单个ISBN查询返回多个结果,逻辑必须记录警告消息并跳过暂存元数据,以避免引入不可靠数据。 - 从Google Books响应解析并暂存的元数字段必须至少包括:isbn_10isbn_13titlesubtitleauthorssource_recordspublisherspublish_datenumber_of_pagesdescription,且必须符合Open Library导入系统预期的数据结构。 - 在scripts/promise_batch_imports.py中,暂存逻辑必须更新,以便在丰富不完整记录时使用stage_bookworm_metadata替代之前仅依赖Amazon的逻辑。

新增接口: - 函数: fetch_google_book(位于scripts/affiliate_server.py
输入: isbn(str)— ISBN-13
输出: 如果HTTP 200,返回包含Google Books API原始JSON响应的字典;否则返回None
描述: 为给定ISBN从Google Books API获取元数据。

  • 函数: process_google_book(位于scripts/affiliate_server.py
    输入: googlebookdata(dict)— 来自Google Books的JSON数据
    输出: 如果成功,返回标准化Open Library版本字段的字典;否则返回None
    描述: 将Google Books API数据处理为标准化Open Library版本记录。

  • 函数: stage_from_google_books(位于scripts/affiliate_server.py
    输入: isbn(str)— ISBN-10或ISBN-13
    输出: bool — 如果元数据成功暂存返回True,否则返回False
    描述: 为给定ISBN获取并暂存Google Books元数据,如果找到则添加到导入批次。

  • 函数: get_current_batch(位于scripts/affiliate_server.py
    输入: name(str)— 批次名称,如"amz"或"google"
    输出: 与提供名称对应的Batch实例
    描述: 检索或创建用于暂存导入项的批次对象。

  • 类: BaseLookupWorker(位于scripts/affiliate_server.py
    描述: API查找工作线程的基类。使用提供的函数处理队列中的项。
    方法: BaseLookupWorker.run(self)(位于scripts/affiliate_server.py
    描述: 公共方法,循环处理队列中的项,为每个检索到的项调用process_item可调用对象。

  • 类: AmazonLookupWorker(位于scripts/affiliate_server.py
    描述: 继承BaseLookupWorker的线程工作器,批量处理Amazon API查询。
    方法: AmazonLookupWorker.run(self)(位于scripts/affiliate_server.py
    描述: 公共方法重写,将队列中最多10个Amazon标识符分批处理,使用Amazon批处理程序统一处理,并根据API约束管理时间。

评论总结

根据评论内容,总结如下:

主要观点与论据:

  1. 对基准测试主观性的质疑(多数评论支持)

    • 评论2(danpalmer):指出行业对工程级别评估混乱,基准应更精确测试具体能力,而非依赖“你是高级工程师”这类提示。
    • 评论4(LiamPowell):认为让LLM做主观判断的方法存在根本缺陷。
    • 评论11(fiso64):认为“品味”等标准过于主观且狭隘,应聚焦最终结果(如bug数量)。
  2. 对“品味”概念的批评(评论6,0xbadcafebee)

    • 将“品味”视为软件行业的“货物崇拜”,认为用艺术标准评判工程是主观且不科学的,偏离了构建可用软件的核心目标。
  3. 对基准测试改进的建议(少数评论)

    • 评论7(magnio):提出类似ELO评分的对抗性基准,让模型互相出题、修复bug。
    • 评论12(21asdffdsa12):建议使用TRIZ方法生成动态、新颖的问题。
  4. 对“高级工程师”定义的质疑(评论13,piterrro)

    • 认为高级工程师的关键是自主收集需求(如与客户沟通),而非仅处理未明确需求,因此该基准不成立。

平衡性说明: 多数评论批评基准的主观性,少数提出改进方向,无正面支持该基准的评论(除评论8简单提及Snorkel公司外)。评论9(_345)虽提及Opus 4.8表现,但未直接评价基准本身。