Paper-Agent 新版本更新

之前写的Paper-Agent最近做了些重构升级,主要是下面这些变动:

多种大模型的支持
之前是只接入了 deepseek 和 kimi, 并且使用 Kimi 作为pdf问答的关键大模型,但经过使用后发现一个比较头疼的问题,kimi 的api略贵了一点,如果要做完整的论文十问可能要一块多,但官方有个 Context Caching 的功能,可以节约大量的 token 消耗,不过这个我还没有细看,如果想要更多的依赖 kimi 的话,后续有空也许会进行代码实现。

那么为了节约成本,deepseek 目前来看是最便宜的大模型了,因此抽取pdf的工作得交给本地的代码,我使用的是 Pymupdf 进行的文本抽取,效果还可以。

代码本地做了一些整理,之前deepseek和kimi的代码重合度是非常高的,本次定义了一个LLM的基类,根据不同情况制作不同的实现类:

class LLM(ABC):  
    def __init__(self, model_name: str):  
        conf = llm_config.get(model_name)  
        self.model_name = conf['model_name']  
        self.api_key = conf['api_key']  
        self.base_url = conf['base_url']  

    @abstractmethod  
    def chat(self, message: str, system_prompt: str = "") -> str:  
        pass  

    @abstractmethod  
    def chat_pdf(self, message: str, file_content) -> str:  
        pass

deepseek 和 kimi 都可以直接使用 OpenAI 的 sdk,因此我将其统一归纳到 OpenAI 类型的 LLM:OpenAiLlm, 另一个LLM的实现是本地的Ollama实现类:OllamaLlm,这样对于本地机器足以运行大模型的同学来说,可以免去使用API的开销。

Kimi 因为有文件管理的能力,因此做了单独的实现类,具体想要用哪个模型就初始化哪一个模型的实例:

current_llm = KimiLlm() if use_kimi else OllamaLlm('qwen') if use_ollama else OpenAiLlm('deepseek')
模型的配置均可以写在 model.py 的 llm_config 中:

llm_config = {  
    "deepseek": {  
        "model_name": "deepseek-chat",  
        "api_key": os.environ.get('DEEPSEEK_KEY'),  
        "base_url": "https://api.deepseek.com"  
    },  
    "kimi": {  
        "model_name": "moonshot-v1-128k",  
        "api_key": os.environ.get('KIMI_KEY'),  
        "base_url": "https://api.moonshot.cn/v1"  
    },  
    "qwen": {  
        "model_name": "qwen2",  
        'api_key': '不用填',  
        "base_url": "ollama的地址"  
    }  
}

这里的 deepseek 和 kimi 用的都是api, qwen 使用的是ollama。

其他变动
除了上面的模型变动,页面上额外增加了生成所有以及导出MD两个按钮,可以一键生成所有问题答案(不过也要慢慢等哦),以及导出页面内容的Markdown。

系统prompt以及论文十问的配置在prompt_template.py 中,需要的可以自行进行修改。

此外,有时候大家如果只需要直接根据论文导出Markdown,也可以直接使用这次新增加的 flow.py, 修改里面的论文url后运行即可生成包含论文标题摘要以及QA的Markdown文档,很适合快速了解论文内容使用。

这个项目的更新可能会暂缓了,感觉使用Streamlit的限制还是太多了,而且现在更多的不是paper-agent, 而是arxiv-helper,只能使用arxiv的论文,代码里引入了aminer的接口,但没有实际使用,后续应该要开新坑来做一个Web版本的论文管理平台。

附录:使用Colab部署Ollama并本地使用的方法

我自己的机器不足以运行绝大多数模型,但我经常会使用Colab来进行一些学习和开发,它拿来部署 Ollama 可是绰绰有余,但想要本地使用的话,需要借助一个网站,叫做 Ngrok(https://ngrok.com/) ,相信很多同学可能已经听过了,我们要做的就是将Colab部署的Ollama和它连接起来。

申请好 Ngrok 的账号后,在Dashboard 的 Your Authtoken 菜单可以找到自己的token,将这个token配置到Colab的笔记本中,就是Colab 左侧的钥匙形状的按钮。配置好后就可以通过下面的方式得到token:

from google.colab import userdata
token = userdata.get('NGROK_TOKEN')
接下来就是在Colab上启动 Ollama ,并关联 Ngrok, 代码没什么好解释的,我是在掘金上找到的一篇介绍,然后复制了其中的部分代码进行了简化,笔记本的链接我这里分享出来,大家需要的直接一键执行就可以

大家唯一要修改的大概就是挑选一个自己需要使用的模型,比如这里用的是qwen2:

!ollama pull qwen2

笔记本执行的最后会输出ngrok代理的地址,这个地址就可以直接配置到上面代码的ollama的base_url,然后就能愉快的使用Ollama部署的模型啦。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇