
這個名字有點開玩笑(儘管一個極好的人)。該應用程序總結了ARXIV上的內容,如果您願意的話,有點像最近的文獻歷史。修昔底德(Thucydides)是西方文化中最早的嚴密歷史學家之一,似乎很合適。然而,修昔底德很久以前就居住了,因此很長時間,而且可能對現代學術文學的概括很可能。 Methusela非常老。
這個笑話是拉伸的,隱喻很差。但是,您不能說的是它不是一個唯一的名稱。
大部分安裝由Dockerfile處理。但是,除了Docker外,您還需要
1) milvis
2) postgresql
3) GPT-Retrival-API
請注意,您將必須修改GPT-ReTrival-API Milvus數據存儲以包括字段文檔-ID。這需要對源文件進行一些小的修改。有關詳細信息,請參見README的底部。
在構建Docker容器之前,將這些信息的配置信息放在config.py文件中。設置這些設置後,您可以運行以下命令來構建和部署Methuselan Thucydides
git clone [email protected]:tboudreaux/MethuselanThucydides.git
cd MethuselanThucydides
cp config.py.user config.py
vim config.py # Edit the file as needed
export OPENAI_API_KEY= < Your API KEY >
export BEARER_TOKEN= < Your Bearer Token >
export DATASTORE= " milvus "
docker build -t mt:v0.5 .
docker run -p 5516:5000 -d --restart always -e " BEARER_TOKEN= $BEARER_TOKEN " -e " OPENAI_API_KEY= $OPENAI_API_KEY " -e " DATASTORE= $DATASTORE " -e " MT_NEW_USER_SECRET= $MT_NEW_USER_SECRET " -e " MT_DB_NAME=databaseName " -e " MT_DB_HOST=host " -e " MT_DB_PORT=port " -e " MT_DB_USER=dbUsername " -e " MT_DB_PASSWORD=dbPassword " --name MethuselanThucydides mt:v0.5mt_new_user_secret是您分配為環境變量的一些隨機字符串。這使您可以在啟動時首次註冊新用戶。它還可以讓您允許其他人自己的帳戶。只要他們有秘密。不要分享。
該網站將在0.0.0.0:5516訪問(可在Localhost:5516訪問)
設置數據庫和檢索插件的方式與您為Docker安裝相同的方式。然後
git clone [email protected]:tboudreaux/MethuselanThucydides.git
cd MethuselanThucydides
pip install -r requirments.txt
cp config.py.user config.py
vim config.py # Edit the file as needed
export OPENAI_API_KEY= < Your API KEY >
export BEARER_TOKEN= < Your Bearer Token >
export DATASTORE= " milvus "
python app.py這將在開發模式下以0.0.0.0:5515運行服務器(可在Localhost:5515訪問)
在Postgresql中,製作一個名為Arxivsummary的數據庫。從文件./postgres-schema.sql加載架構中。
我是天文學家,不是安全研究人員,甚至是軟件工程師。這是一個我正在研究的愛好項目,並且至少要有一些可以的安全性。但是,不要在低信任環境中部署,因為我不願意保證自己遵循最佳安全慣例。
打開MT時,您將不會有一個用戶帳戶。您將有一個選擇。提供用戶名,密碼,電子郵件和秘密(環境變量MT_NEW_USER_SECRET)。當您創建此用戶時,後端代碼將檢查數據庫中是否存在任何用戶,如果不是,則該用戶將使該用戶成為管理員(可以創建新用戶和新的Admin用戶自己)。您現在可以登錄該用戶。創建用戶按鈕將保持相同的功能;除了它創建的所有後續用戶都不具有管理員特權。
基本用法應該是自我解釋的。這個想法是,該網站提供了一個簡短的摘要,摘要前一天(或週末 /星期五)發布給ARXIV的每篇論文。這些摘要是使用gpt-3.5-tubo生成的,以及在Arxiv上列出的論文的摘要。界面將默認顯示所有論文;但是,類別過濾器在側邊欄中顯示。
通過與每篇論文關聯的聊天框啟用了更複雜的行為。此聊天框連接到GPT-3.5-Turbo和一個存儲有關該論文的所有緩存信息的矢量數據庫(通過使用OpenAi-Textembedding-ADA002型號)。當您提出一個問題時,有關該論文的最相關的緩存信息將傳遞給GPT模型,並將其回答打印到屏幕上。因為默認情況下,只有摘要和標題是緩存的,因此GPT可以給出的響應受到限制。但是,如果單擊“僅抽像模式”按鈕並等待幾秒鐘,您會發現它更改為“全文模式”,並且不再可單擊。在幕後,該論文的完整PDF已下載並解析為文本。然後將其嵌入到同一矢量數據庫中。現在,當您提出問題時,GPT模型有更多的上下文可以回答它們。由於所有人一次單擊“ Ampract Mode”按鈕後,全文存儲在數據庫中,因此將來將始終將其弄清楚,因為該聊天框將始終默認為考慮整個紙張。
某些功能旨在用於程序化而不是UI接口(特別是自動匯總所有最新論文)。為此,您將需要一個API密鑰。只有管理員用戶才能生成API密鑰。如果您是管理員,那麼您需要做的一切才能獲得API密鑰,就是單擊您的用戶名>生成API鍵>生成。鑰匙包括2個部分,由“:”隔開。第一個是鍵UUID(用於鑰匙表中的快速查找),第二個是純文本16字節令牌。在存儲之前,在服務器端,該令牌已被哈希和醃製。
確保將此密鑰寫下來,因為它沒有存儲在任何地方,因此在您結束對話後無法檢索。
我已經測試了NGINX反向代理後面運行的。它非常簡單,不需要特殊的配置。
截至2023年4月18日,網絡界面的一些屏幕截圖








1) Currently there is a bug in how I have implimented the arxiv API
such that it does not actually grab all the papers from a given day.
2) I need to rework the memory model for a single chat to make it more
robust
3) Papers are currently not pulled automatically every day. A call to the
/api/fetch/latest must be made manually to fetch the latest papers. This
will be added as an automated job to the docker container. However for now
this should be pretty easy to impliment in cron (See below)
4) I want to have chat memory stored server side for users once user
authentication is enabled.
基本的crontab配置告訴服務器每天凌晨5點每天獲取最新論文。假設您的服務器正在https://example.com上運行
0 5 * * * curl -v https://example.com/api/fetch/latest這將自動獲取論文;但是,它不會將它們傳遞給GPT進行總結。可以為此安排另一個API調用:
10 5 * * * curl -X GET https://example.com:5515/api/gpt/summarize/latest -H "x-access-key: YOUR-MT-API-KEY" - Adding vector based memory for conversations instances
- Better user management tools
- Improved UI
- Search functionality
- Home page with recommendations based on what papers users have interacted with
- Ability to follow references chains and bring additional papers down those chains in for further context (long term)
- config option to switch between gpt-3.5-turbo and gpt-4 (waiting till I get gpt-4 api access)
- Auto build the schema on first setup so that the schema does not have to be manually built
首先在稱為milvus_datastore.py的數據存儲/提供程序中修改文件以將schema_v1列表更改為以下內容:
SCHEMA_V1 = [
(
"pk" ,
FieldSchema ( name = "pk" , dtype = DataType . INT64 , is_primary = True , auto_id = True ),
Required ,
),
(
EMBEDDING_FIELD ,
FieldSchema ( name = EMBEDDING_FIELD , dtype = DataType . FLOAT_VECTOR , dim = OUTPUT_DIM ),
Required ,
),
(
"text" ,
FieldSchema ( name = "text" , dtype = DataType . VARCHAR , max_length = 65535 ),
Required ,
),
(
"document_id" ,
FieldSchema ( name = "document_id" , dtype = DataType . VARCHAR , max_length = 65535 ),
"" ,
),
(
"source_id" ,
FieldSchema ( name = "source_id" , dtype = DataType . VARCHAR , max_length = 65535 ),
"" ,
),
(
"id" ,
FieldSchema (
name = "id" ,
dtype = DataType . VARCHAR ,
max_length = 65535 ,
),
"" ,
),
(
"source" ,
FieldSchema ( name = "source" , dtype = DataType . VARCHAR , max_length = 65535 ),
"" ,
),
( "url" , FieldSchema ( name = "url" , dtype = DataType . VARCHAR , max_length = 65535 ), "" ),
( "created_at" , FieldSchema ( name = "created_at" , dtype = DataType . INT64 ), - 1 ),
(
"author" ,
FieldSchema ( name = "author" , dtype = DataType . VARCHAR , max_length = 65535 ),
"" ,
),
(
"subject" ,
FieldSchema ( name = "subject" , dtype = DataType . VARCHAR , max_length = 65535 ),
"" ,
),
(
"file" ,
FieldSchema ( name = "file" , dtype = DataType . VARCHAR , max_length = 65535 ),
"" ,
),
(
"source_url" ,
FieldSchema ( name = "source_url" , dtype = DataType . VARCHAR , max_length = 65535 ),
"" ,
),
]然後使用以下更新的類修改文件型號/型號。
class DocumentMetadata ( BaseModel ):
source : Optional [ str ] = None
source_id : Optional [ str ] = None
url : Optional [ str ] = None
created_at : Optional [ str ] = None
author : Optional [ str ] = None
subject : Optional [ str ] = None
file : Optional [ str ] = None
source_url : Optional [ str ] = None
class DocumentChunkMetadata ( DocumentMetadata ):
document_id : Optional [ str ] = None
class DocumentMetadataFilter ( BaseModel ):
document_id : Optional [ str ] = None
source : Optional [ Source ] = None
source_id : Optional [ str ] = None
author : Optional [ str ] = None
start_date : Optional [ str ] = None # any date string format
end_date : Optional [ str ] = None # any date string format
url : Optional [ str ] = None
subject : Optional [ str ] = None
file : Optional [ str ] = None
source_url : Optional [ str ] = None