首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Paper-Agent 新版本更新

Paper-Agent 新版本更新

作者头像
叶子的技术碎碎念
发布2025-04-08 21:52:31
发布2025-04-08 21:52:31
18400
代码可运行
举报
运行总次数:0
代码可运行

之前写的Paper-Agent(https://github.com/careywyr/paper-agent)最近做了些重构升级,主要是下面这些变动:

多种大模型的支持

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

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

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

代码语言:javascript
代码运行次数:0
运行
复制
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  
defchat(self, message: str, system_prompt: str = "")->str:
pass

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

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

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

代码语言:javascript
代码运行次数:0
运行
复制
current_llm = KimiLlm() if use_kimi else OllamaLlm('qwen') if use_ollama else OpenAiLlm('deepseek')

模型的配置均可以写在 model.pyllm_config 中:

代码语言:javascript
代码运行次数:0
运行
复制
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:

代码语言:javascript
代码运行次数:0
运行
复制
from google.colab import userdata
token = userdata.get('NGROK_TOKEN')

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

https://colab.research.google.com/drive/1BW5kvlGuikjBdUqQgpkZF5EdCg7XZLJa?usp=sharing

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

代码语言:javascript
代码运行次数:0
运行
复制
!ollama pull qwen2

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

你好,我是叶子,7年Java开发老司机,待过小的创业公司也待过上市厂子。擅长各种姿势的CRUD,但现在工作重心逐渐往中间件开发转移。喜欢折腾技术,AI是个人爱好驱动去学习的。但不管是Java还是AI还是其他非技术行业的知识,我都希望能和大家共同学习进步,如果文章有用,还请大家点击关注,希望我们能一起在技术的道路上走的更远!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶子的技术碎碎念 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 多种大模型的支持
  • 其他变动
  • 附录:使用Colab部署Ollama并本地使用的方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档