每日Github探索:LLM Scraper:用于将任何网页转换为结构化数据的TypeScript库

1. llm-scraper

  • 截止发稿星数: 377
  • 仓库语言: TypeScript
  • 仓库开源协议:MIT License

LLM Scraper是一个TypeScript库,允许您使用LLMs将任何网页转换为结构化数据。

在底层,它使用函数调用将页面转换为结构化数据。您可以在这里找到更多关于这种方法的信息。

特点

  • 支持Local (GGUF)、OpenAI、Groq聊天模型
  • 使用Zod定义模式
  • TypeScript完全类型安全
  • 基于Playwright框架
  • 在爬取多个页面时进行流式传输
  • 支持4种输入模式:
    • html用于加载原始HTML
    • markdown用于加载Markdown
    • text用于加载提取的文本(使用Readability.js)
    • image用于加载截图(仅适用于多模态)

确保给它点一个星星!

入门

  1. 从npm安装所需的依赖项:
    npm i zod playwright llm-scraper
    
  2. 初始化您的LLM:

    OpenAI

    import OpenAI from 'openai'
    const model = new OpenAI()
    

    Local

    import { LlamaModel } from 'node-llama-cpp'
    const model = new LlamaModel({ modelPath: 'model.gguf' })
    
  3. 创建一个新的浏览器实例并将LLMScraper附加到它:
    import { chromium } from 'playwright'
    import LLMScraper from 'llm-scraper'
    
    const browser = await chromium.launch()
    const scraper = new LLMScraper(browser, model)
    

示例

在这个示例中,我们从HackerNews中提取热门故事:

import { chromium } from 'playwright'
import { z } from 'zod'
import OpenAI from 'openai'
import LLMScraper from 'llm-scraper'

// 启动浏览器实例
const browser = await chromium.launch()

// 初始化LLM提供商
const llm = new OpenAI()

// 创建一个新的LLMScraper
const scraper = new LLMScraper(browser, llm)

// 定义用于提取内容的模式
const schema = z.object({
  top: z
    .array(
      z.object({
        title: z.string(),
        points: z.number(),
        by: z.string(),
        commentsURL: z.string(),
      })
    )
    .length(5)
    .describe('Hacker News上的前5个热门故事'),
})

// 要爬取的URL
const urls = ['https://news.ycombinator.com']

// 运行爬虫
const pages = await scraper.run(urls, {
  model: 'gpt-4-turbo',
  schema,
  mode: 'html',
  closeOnFinish: true,
})

// 从LLM中流式传输结果
for await (const page of pages) {
  console.log(page.data)
}

贡献

作为一个开源项目,我们欢迎社区的贡献。如果您遇到任何错误或想要添加一些改进,请随时提出问题或拉取请求。

2. llama3-jailbreak

  • 截止发稿星数: 88
  • 仓库语言: Python

《简易Llama 3越狱》是一个轻松实现的程序化Llama 3越狱工具。抱歉,扎克!Meta公司在周四发布了被称为“OpenAI杀手”的Llama 3,毫无疑问,这是一个非常令人印象深刻的模型。作为培训的一部分,他们花了大量精力确保他们的模型是安全的。在安全方面,Meta团队采取了一些措施:

  • 他们进行了大量的红队演练,与外部和内部专家一起进行,以测试模型在未预料到的使用方式上的表现。
  • 他们实施了额外的技术来解决早期版本模型中发现的任何漏洞,比如通过向模型展示安全和有益回应的示例来进行监督微调,这些回应是他们希望模型在各种主题上学会复制的。
  • 然后,他们利用人类反馈进行强化学习,这涉及到人类对模型的回应给出“偏好”反馈(例如,评价哪个回应更好、更安全)。

这无疑是一项值得赞扬的努力,而且Llama 3在标准安全基准测试中表现良好。然而,通过简单地为模型提供有害前缀,我们可以轻易地绕过这些安全措施。如果我们简单地为Llama 3的“Assistant”角色提供一个有害前缀,Llama 3经常会生成一个连贯的、有害的延续。Llama 3在帮助方面表现得如此出色,以至于它学到的安全措施在这种情况下不起作用!

方便的是,我们不需要手工制作这些有害前缀。事实上,我们可以简单地调用一个天真的、仅具有帮助功能的模型(例如Mistral Instruct)来生成一个有害的回应,然后将其作为前缀传递给Llama 3。这个前缀的长度会影响Llama 3是否最终生成有害回应。前缀太短,Llama 3可以恢复并拒绝有害生成。前缀太长,Llama 3将只回应一个EOT令牌和随后的拒绝。在增加有害助手前缀最大令牌长度的情况下,攻击成功率(ASR)的变化如下所示:

  • 前缀长度: 5,ASR: 72%
  • 前缀长度: 10,ASR: 80%
  • 前缀长度: 25,ASR: 92%
  • 前缀长度: 50,ASR: 92%
  • 前缀长度: 75,ASR: 98%
  • 前缀长度: 100,ASR: 98%

表1: 不同有害助手前缀长度下的ASR。Llama 3能够在较短的有害前缀下部分恢复并拒绝,但在较长的前缀下,它会偏离其对齐的分布。

除了开玩笑之外,这个简单的助手预训练越狱实验证明了一个更基本的问题:尽管LLMs拥有各种能力并且备受瞩目,但它们真的能够理解自己在说什么吗?毫无疑问,通过训练拒绝,Meta使Llama 3能够拒绝有害指令。但这个简单的实验表明,如果被诱导这样做,Llama 3基本上无法阻止自己说出愚蠢和令人憎恶的文本。它缺乏自我反思的能力,无法在说话时分析自己说了什么。这似乎是一个相当大的问题。如果您对此有想法或想聊天,请给我们发送邮件至contact@haizelabs.com。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容