理解 chatpdf.com 的代码原理

查看 93|回复 9
作者:BirlGoy   
理解 chatpdf.com 的代码原理

背景: 周末有个 chatgpt 比较火的应用 chatpdf.com 。主要功能是上传一个 pdf ,就能跨语言地和这个 pdf 对话(如果这个 pdf 是中文,可以用英文提问;反之也可)。根据这个 pdf 的内容回答你的问题。 这个应用很惊艳,打开了新世界的大门。

这个应用有很大的想象空间:
  • 比如说这个 pdf 是国家的法律,那就可以问所有法律相关的问题。
  • 如果这是图书馆里面的每一本书,那就可以对所有书对话。
    ...

    这个应用太优秀,有人在 twitter 上问作者用了什么原理,作者很大度,把大概原理说了一下。我自己挺好奇,第二天在一篇文章里看到有人开源了类似 产品 把代码下载看来一下,总结一下原理,我自己不是机器学习出身,可能谬以千里。
    0 、openai 的 Embedding 接口
    问了一下 chatgpt:
        me:  openai 的 embedding 是什么?
    chatgpt: OpenAI 的 embedding 是一种将自然语言文本转换为向量表示的技术。
    1 、文本切割
    将文本切割成一小部分,调用 openai 的 embedding 接口,返回这段文本的 embedding 的向量数据。存储这些数据,并且保存好对应关系。
    2 、用户提问
    将用户提的问题,调用 openai 的 embedding 接口,返回问题的向量数据。
    3 、搜索向量
    计算相似度。用问题的向量,在之前切割的所有向量数据里,计算和问题向量相似度最高的几个文本(余弦定理)。
    4 、调用 chatgpt
    准备特殊的 prompt ,里面带上切割的文本内容,加上问题的 prompt 。
    例子中的 prompt 是这样的:
    const res = await fetch("https://api.openai.com/v1/chat/completions", {
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${apiKey}`
        },
        method: "POST",
        body: JSON.stringify({
          model: OpenAIModel.DAVINCI_TURBO,
          messages: [
            {
              role: "system",
              content: "You are a helpful assistant that accurately answers queries using Paul Graham's essays. Use the text provided to form your answer, but avoid copying word-for-word from the essays. Try to use your own words when possible. Keep your answer under 5 sentences. Be accurate, helpful, concise, and clear."
            },
            {
              role: "user",
              content: prompt
            }
          ],
          max_tokens: 150,
          temperature: 0.0,
          stream: true
        })
      });
    以上就是这个应用的背后大概的原理。目前最大的限制是 chatgpt 接口的限制 4096 个 token 。我相信后面 openai 肯定会调整。
    以上就是胡乱记录一下,如果有问题,欢迎纠正。

    embedding, openai, chatgpt, prompt

  • proxytoworld   
    这东西好像是用来绕过 token 限制的
    tool2d   
    这网站牛逼的,我随手上传了一篇语文教学参考资料。
    AI 竟然能按照这个主题,严格贴合内容展开和聊天。
    还能写一段段的小作文,厉害。
    DevRoss   
    确实是这样
    xmumiffy   
    没什么问题,我们的客服系统也是这么实现的 https://loli.xing.moe/ChatGPT_as_customer_service/
    dayeye2006199   
    可以参考 https://github.com/hwchase17/langchain
    和 https://gpt-index.readthedocs.io/en/latest/index.html
    Chad0000   
    不知道什么时候会有支持大量数据的方案。比如用于某个销售网站的产品导购,售前售后咨询。
    rocmax   
    @Chad0000 现在就可以 finetune 模型,但是考虑到一来价格贵,二来如果知识库内容经常更新的话每次都重训练一遍也不现实。
    tomari   
    可惜没法看到 pdf 里面的图片
    justin2018   
    这个厉害呀~ 问的问题基本上是对的
    节约了翻书的时间了
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部