关于 eyeball
Eyeball 是用于文档分析的技能,可将分析和来源截图整理成桌面上的 Word 文档。它要求每项事实陈述都配有来源截图,并以黄色高亮对应文本,便于核对。
主要功能
- 01读取 Word、PDF 和 RTF 文件
- 02分析公开网页
- 03提取文档全文和页码
- 04为论点匹配原文锚点
- 05生成带高亮截图的 Word 文档
适用场景
- 01核对合同分析中的具体条款
- 02为文档结论提供可视来源证据
- 03审阅网页内容并标出依据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ github/ awesome-copilot --skill eyeball安装后在 Claude Code 中输入/eyeball确认已加载。
附带文件tools/eyeball.py
详细介绍
Eyeball
通过可视证据分析文档。启用后,Eyeball 会在用户的桌面上生成一份 Word 文档,其中每一条事实性论断都包含来自源材料的行内截图,且引用文本以黄色高亮显示。
启用
当用户调用此技能时(例如 "use eyeball"、"run eyeball on this"、"eyeball this document"),请回复:
Eyeball 已启用。 我将分析该文档并生成一份包含行内源截图的 Word 文档,以便你亲眼核实每一条论断。
然后按照下面的工作流操作。
支持的来源
- 本地文件: Word 文档(.docx、.doc)、PDF(.pdf)、RTF 文件
- 网页 URL: 任何可公开访问的网页
工具位置
Eyeball Python 实用工具位于:
<plugin_dir>/skills/eyeball/tools/eyeball.py
要找到实际路径,请运行:
find ~/.copilot/installed-plugins -name "eyeball.py" -path "*/eyeball/*" 2>/dev/null
如果在那里找不到,请检查项目目录或用户主目录中的 eyeball 仓库。
首次运行设置
首次使用前,请检查依赖项是否已安装:
python3 <path-to>/eyeball.py setup-check
如果有任何缺失,请安装所需的依赖项:
pip3 install pymupdf pillow python-docx playwright
python3 -m playwright install chromium
在 Windows 上,还需安装 pywin32 以支持 Word 自动化:
pip install pywin32
工作流
请严格按照以下步骤操作。顺序很重要。
步骤 1:阅读源文本
在撰写任何分析之前,请提取并阅读源文档的全文:
python3 <path-to>/eyeball.py extract-text --source "<path-or-url>"
仔细阅读输出内容。识别实际的章节编号、标题、页码和关键表述。
关键: 不要跳过此步骤。不要基于对文档结构的假设来撰写分析。请阅读实际文本。
步骤 2:撰写带有精确引用的分析
对于分析中的每一个要点,你必须:
- 引用文档中实际出现的正确章节编号(例如,引用 "Section 9" 而不是因为假设编号而引用 "Section 8")。
- 引用正确的页码,即该章节在提取文本中出现的页码。
- 选择锚点,即来自源文档的逐字短语,且这些短语直接支持你的论断。
步骤 3:正确选择锚点
这是最重要的步骤。锚点决定了截图中会被高亮显示的内容。
应当:
- 使用源文本中直接支持你的论断的逐字短语
- 使用多个锚点来覆盖读者应当看到的完整文本范围
- 使用仅出现在你预期位置的特定、不常见的短语
不应当:
- 使用在文档中随处可见的通用主题标签(例如 "Confidentiality")
- 在章节标题作为交叉引用出现在其他地方时,仅使用章节标题
- 使用在许多地方都能匹配的单个常见词
示例:
错误 -- 使用了随处可见的通用主题标签:
{"anchors": ["User-Generated Content"], "target_page": 8}
正确 -- 使用了支持该论断的特定表述:
{"anchors": ["retain ownership", "Ownership of Content, Right to Post"], "target_page": 8}
错误 -- 章节标题作为交叉引用出现在前面的页面上:
{"anchors": ["LIMITATION OF LIABILITY"]}
正确 -- 包含章节编号以确保精确性,并定位到正确的页面:
{"anchors": ["12. LIMITATION OF LIABILITY", "INDIRECT", "CONSEQUENTIAL"], "target_page": 13}
步骤 4:构建分析文档
构造一个由各章节组成的 JSON 数组,并调用构建命令:
python3 <path-to>/eyeball.py build \
--source "<path-or-url>" \
--output ~/Desktop/<title>.docx \
--title "Analysis Title" \
--subtitle "Source description" \
--sections '[
{
"heading": "1. Section Title",
"analysis": "Your analysis text here. Reference Section X on page Y...",
"anchors": ["verbatim phrase 1", "verbatim phrase 2"],
"target_page": 5,
"context_padding": 40
},
{
"heading": "2. Another Section",
"analysis": "More analysis...",
"anchors": ["exact quote from source"],
"target_pages": [10, 11],
"context_padding": 50
}
]'
章节对象字段:
heading(必需):输出文档中的章节标题analysis(必需):你的分析文本anchors(必需):来自源文档的逐字短语列表,用于搜索并高亮target_page(可选):要搜索的单个页码(从 1 开始索引)target_pages(可选):要搜索的页码列表(截图将垂直拼接)context_padding(可选):锚点区域上下的 PDF 点填充量(默认值:40)。增加该值可获得更多上下文。
步骤 5:交付输出
将输出保存到用户的桌面。告知用户文件名,并说明他们可以打开该文件,对照高亮的源截图核实每一条论断。
交付前自检
在保存最终文档之前,请在心中核对:
- 每个章节的分析文本是否引用了源文件中正确的章节编号?
- 锚点是否是目标页面上逐字出现的短语?
- 每个锚点是否直接支持分析中的论断,而不仅仅是涉及同一主题?
- 如果截图与分析不匹配,是分析错了还是锚点错了?修正错误的那一个。
备注
- 输出文档包含动态调整尺寸的高亮截图。如果你提供多个锚点,截图会扩展以覆盖所有这些锚点。
- 当搜索词未找到时,输出文档会注明这一点。如果发生这种情况,可能是锚点不够逐字匹配。请调整并重新构建。
- 对于网页,Playwright 会先将页面渲染为 PDF。生成的页码可能与你在浏览器中看到的不同。请使用提取的文本输出(步骤 1)来确定正确的页码。
- 如果用户已经提供了源文本,或者你已在当前对话中读取过它,可以跳过步骤 1。但在撰写分析之前,务必根据实际文本核对章节编号和页码引用。