# pinhole
**Repository Path**: liyifm/pinhole
## Basic Information
- **Project Name**: pinhole
- **Description**: Pinhole (洞见)
- **Primary Language**: Python
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 3
- **Created**: 2024-06-13
- **Last Updated**: 2024-11-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Pinhole (洞见)
===============
Pinhole是一个开源的,基于大模型进行学术和产业界技术洞察,以协助我们寻找技术演进方向的项目。我们开发该项目的核心目的是减少在这方面大量无序的重复工作。
我们基于Pinhole对感兴趣的业界和学术界信息进行收集和整理,并搭建了同名网站 [Pinhole](https://pinhole.uv0xab.com/), 欢迎访问。
本logo由智谱AI开放平台模型 cogview-3 生成
## 整体架构
*Pinhole* 工具的主体由 *API Server*, *App Server* 和 *Collector* 三部分组成。各组件之间的交互关系如下图所示。
- **API Server** 是一个基于`FastAPI`实现的服务器,它仅监听来自localhost的请求,负责整个数据库的管理工作,包括对文档(Document), 总结(Summary)等的创建,删除,列表等;
- **App Server** 是一个基于`streamlit`的前段服务器,负责为用户提供网页服务,它的数据来源均通过向*API Server*的请求来获取,*App Server*自身不存储任何数据。因此在需要的情况下,这两个服务器可以很容易地扩展为分布式部署,并引入负载均衡机制(当然现在并没有实现);
- **Collector** 是一个信息收集任务而不是常驻的服务器。它包含一系列爬虫用来收集我们感兴趣的学术界和业界资讯。除此之外,它还负责调用大模型服务并生成文档的总结。*Collector* 也不直接接触数据库,它同样通过http请求来调用由 *API Server* 提供的数据管理服务。
## 快速上手
### 1.安装`pinhole`
`pinhole`是一个python安装包,因此可以很容易地使用pip来安装:
```shell
git clone https://gitee.com/liyifm/pinhole.git
python3 -m pip install -e ./pinhole
# python3 -m pinhole 是整个工程的运行入口脚本
python3 -m pinhole --help
```
### 2. 运行 *API Server*
运行apiserver需要指定一个工程目录,该目录中应当包含`project.json`。如果没有包含,apiserver会自动创建一个空的工程文件。在仓库中我们提供了一个小型的样例工程。
```shell
python3 -m pinhole apiserver ./pinhole/examples/project0
```
### 3. 运行 *App Server*
打开一个新的终端标签页,或者在`tmux`等窗口管理器中打开新窗口,运行如下命令:
```shell
python3 -m pinhole appserver
```
在第一次运行基于`streamlit`的应用时,会提示用户输入邮件,留空即可。默认该应用会在8080端口启动,根据屏幕上的提示访问本地8080端口网站即可打开。
## 更新历史
### 2024.7
- 增加一句话总结和关键字提取功能
- 增加完整总结(``Summary``)内容的向量化功能
## 所使用到的模型API及设置方法
目前 *Pinhole* 共计使用到以下API:
- 智谱GLM系列模型,用于从论文或新闻稿全文中整理完整总结(``Summary``)
- 幻方DeepSeek-V2系列模型,用于从完整总结中获取一句话总结及关键字(``Outline``)
- 百川词嵌入模型,用于从将完整总结进行词嵌入以保存到向量数据库中