
이름은 약간의 농담입니다 (극단적 인 나쁜 것임). 이 응용 프로그램은 Arxiv에 내려진 것을 요약했으며, 최근 문헌의 역사를 다소 있었다면 다소 최근의 문헌의 역사를 요약했습니다. 서양 문화에서 가장 초기의 리지 고리 역사가 중 한 명인 Thucydides는 적합한 것처럼 보였다. 그러나 Thucydides는 오래 전에 살았으므로 극도로 오래되었고 현대 학문 문학을 요약 할 수있을 것입니다. Methusela는 유명하게 늙었습니다 ....
농담은 뻗어 있고 은유는 가난합니다. 그러나 당신이 말할 수없는 것은 독특한 이름이 아니라는 것입니다.
설치의 대부분은 Dockerfile에 의해 처리됩니다. 그러나 Docker 외에도 필요합니다
1) milvis
2) postgresql
3) GPT-Retrival-API
Field Docum 이를 위해서는 소스 파일에 약간의 수정이 필요합니다. 자세한 내용은 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는 Enviromental 변수로 할당하는 임의의 문자열입니다. 이를 통해 부팅 할 때 처음으로 새 사용자를 등록 할 수 있습니다. 또한 다른 사람들이 자신의 계정을 만들 수 있습니다. 그들이 비밀이있는 한. 이것을 공유하지 마십시오.
웹 사이트는 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)을 제공하십시오. 이 사용자를 생성 할 때 백엔드 코드는 사용자가 데이터베이스에 존재하는지 확인하고 해당 사용자가 관리자가 될 수 있습니다 (새 사용자 및 새 관리자 사용자가 자체적으로 새로운 관리자를 생성 할 수 있음). 이제 해당 사용자로 로그인 할 수 있습니다. 사용자 만들기 버튼은 동일한 기능으로 유지됩니다. 생성 한 모든 후속 사용자에게는 관리자 권한이 없다는 점을 제외하고.
기본 사용은 자기 설명이어야합니다. 아이디어는 제공된 웹 사이트가 전날 (또는 주말 / 금요일)에 ARXIV에 게시 된 각 논문에 대한 간략한 요약을 제공한다는 것입니다. 이 요약은 GPT-3.5-Tubo와 Arxiv에 나열된 논문의 초록을 사용하여 생성됩니다. 인터페이스는 모든 종이를 보여주기 위해 기본값입니다. 그러나 카테고리 필터는 사이드 바에 표시됩니다.
각 용지와 관련된 채팅 상자를 통해보다 복잡한 동작이 가능합니다. 이 채팅 상자는 GPT-3.5-TURBO 및 벡터 데이터베이스에 연결되어 있으며 논문에 대한 현재 캐시 된 모든 정보를 저장하는 벡터 데이터베이스 (OpenAi-Textembedding-ADA002 모델을 사용하여). 질문을 할 때 해당 논문에 대한 가장 관련성이 높은 캐시 정보는 질문과 함께 GPT 모델로 전달되며 그 응답은 화면에 인쇄됩니다. 기본적으로 초록과 제목 만 캐시되기 때문에 GPT가 제공 할 수있는 응답은 제한적입니다. 그러나 "추상 모드 만"버튼을 클릭하고 몇 초를 기다리면 "전체 텍스트 모드"로 변경되어 더 이상 클릭 할 수 없음을 알 수 있습니다. 무대 뒤에서 해당 종이의 전체 PDF가 다운로드되어 텍스트로 구문 분석되었습니다. 그런 다음 동일한 벡터 데이터베이스에 포함됩니다. 이제 질문을 할 때 GPT 모델은 그에 대한 답변에 훨씬 더 많은 맥락이 있습니다. 누군가가 "추상 모드 전용"버튼을 클릭 한 후에는 전체 텍스트가 데이터베이스에 저장되므로 한 번은 "초록 모드 전용"버튼을 한 번 클릭하면 채팅 상자가 항상 기본적으로 전체 용지를 고려하기 때문에 향후 항상 회색이됩니다.
일부 기능은 프로그래밍 방식이 아닌 UI 인터페이스 (특히 모든 최신 논문을 자동 요약) 용입니다. 이를 위해서는 API 키가 필요합니다. 관리자 만 API 키를 생성 할 수 있습니다. 관리자 인 경우 API 키를 얻으려면 필요한 모든 것이 사용자 이름> 생성 API 키> 생성을 클릭하는 것입니다. 키는 ":"로 분리 된 두 부분으로 구성됩니다. 첫 번째는 키 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
먼저 Datastore/제공 업체에서 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 ),
"" ,
),
]그런 다음 다음 업데이트 된 클래스로 파일 Models/Models.py를 수정하십시오 (여기에 클래스를 나열하지 않은 경우 동일하게 남겨 두십시오).
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