
ชื่อเป็นเรื่องตลกเล็กน้อย (แม้ว่าจะเป็นคนเลวสุดขีด) แอพนี้สรุปสิ่งที่ได้รับการวางบน arxiv ซึ่งเป็นประวัติศาสตร์ของวรรณกรรมเมื่อเร็ว ๆ นี้หากคุณต้องการ Thucydides ซึ่งเป็นหนึ่งในนักประวัติศาสตร์ Rigorus ที่เก่าแก่ที่สุดในวัฒนธรรมตะวันตกดูเหมือนจะพอดี อย่างไรก็ตาม Thucydides มีชื่อเสียง มานานแล้ว ดังนั้นจะเป็นเรื่องเก่าแก่และมีแนวโน้มที่จะสรุปวรรณกรรมทางวิชาการสมัยใหม่ เมทูเซลล่าอายุมาก ....
เรื่องตลกยืดออกและอุปมาอุปมัยไม่ดี อย่างไรก็ตามสิ่งที่คุณไม่สามารถพูดได้ก็คือไม่ใช่ชื่อที่ไม่ซ้ำกัน
การติดตั้งส่วนใหญ่ได้รับการจัดการโดย DockerFile อย่างไรก็ตามนอกเหนือจาก Docker ที่คุณต้องการ
1) milvis
2) postgresql
3) GPT-Retrival-API
โปรดทราบว่าคุณจะต้องแก้ไข GPT-Retrival-API Milvus Milvus Datastore เพื่อรวม Document-ID ฟิลด์ สิ่งนี้ต้องมีการปรับเปลี่ยนเล็ก ๆ น้อย ๆ สำหรับไฟล์ต้นฉบับสำหรับสิ่งนั้น ดูที่ด้านล่างของ ReadMe สำหรับรายละเอียด
วางข้อมูลการกำหนดค่าสำหรับสิ่งเหล่านี้ในไฟล์ config.py ก่อนที่จะสร้างคอนเทนเนอร์ Docker เมื่อมีการตั้งค่าแล้วคุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อสร้างและปรับใช้เมทิลลัน 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) เมื่อคุณสร้างผู้ใช้นี้รหัสแบ็คเอนด์จะตรวจสอบว่ามีผู้ใช้ใดในฐานข้อมูลหรือไม่และหากไม่ใช่จะทำให้ผู้ใช้นั้นเป็นผู้ดูแลระบบ (สามารถสร้างผู้ใช้ใหม่และผู้ใช้ผู้ดูแลระบบใหม่ได้เอง) ตอนนี้คุณสามารถเข้าสู่ระบบในฐานะผู้ใช้นั้น ปุ่มสร้างผู้ใช้จะยังคงอยู่กับฟังก์ชั่นเดียวกัน ยกเว้นว่าผู้ใช้ที่ตามมาทั้งหมดที่สร้างขึ้นจะไม่มีสิทธิพิเศษของผู้ดูแลระบบ
การใช้งานขั้นพื้นฐานควรอธิบายตนเอง แนวคิดก็คือเว็บไซต์ที่ให้บริการสรุปโดยย่อของกระดาษแต่ละฉบับที่โพสต์ไปยัง arxiv ในวันก่อนหน้า (หรือในช่วงสุดสัปดาห์ / วันศุกร์) บทสรุปเหล่านี้ถูกสร้างขึ้นโดยใช้ GPT-3.5-tubo และบทคัดย่อของกระดาษตามที่ระบุไว้ใน arxiv อินเทอร์เฟซจะเริ่มต้นเพื่อแสดงเอกสารทั้งหมด อย่างไรก็ตามตัวกรองหมวดหมู่จะแสดงในแถบด้านข้าง
มีการเปิดใช้งานพฤติกรรมที่ซับซ้อนมากขึ้นผ่านกล่องแชทที่เกี่ยวข้องกับกระดาษแต่ละฉบับ กล่องแชทนี้เชื่อมต่อกับ GPT-3.5-turbo และฐานข้อมูลเวกเตอร์ที่จัดเก็บข้อมูลที่แคชทั้งหมดเกี่ยวกับกระดาษ (โดยใช้โมเดล OpenAI-textembed-ADA002) เมื่อคุณถามคำถามข้อมูลแคชที่เกี่ยวข้องมากที่สุดเกี่ยวกับกระดาษนั้นจะถูกส่งผ่านไปยังโมเดล GPT พร้อมกับคำถามและการตอบสนองของมันจะถูกพิมพ์ออกมาบนหน้าจอ เพราะโดยค่าเริ่มต้นเฉพาะบทคัดย่อและชื่อเรื่องถูกแคชคำตอบที่ GPT สามารถให้นั้นมี จำกัด อย่างไรก็ตามหากคุณคลิกปุ่ม "โหมดนามธรรมเท่านั้น" และรอสักครู่คุณจะเห็นว่ามันเปลี่ยนเป็น "โหมดข้อความเต็ม" และไม่สามารถคลิกได้อีกต่อไป เบื้องหลังฉาก PDF เต็มรูปแบบของกระดาษนั้นได้รับการดาวน์โหลดและแยกวิเคราะห์เป็นข้อความ นั่นคือฝังลงในฐานข้อมูลเวกเตอร์เดียวกัน ตอนนี้เมื่อคุณถามคำถามโมเดล GPT มีบริบทที่จะตอบคำถามเหล่านั้นมากขึ้น เนื่องจากข้อความเต็มจะถูกเก็บไว้ในฐานข้อมูลหลังจากใครก็ตามที่คลิกปุ่ม "โหมดนามธรรมเท่านั้น" ครั้งเดียวมันจะถูกทำให้เป็นสีเทาในอนาคตเพราะกล่องแชทนั้นจะเริ่มต้นเพื่อพิจารณาเอกสารทั้งหมด
ฟังก์ชั่นบางอย่างมีไว้สำหรับการเขียนโปรแกรมไม่ใช่อินเทอร์เฟซ UI (โดยเฉพาะอัตโนมัติสรุปเอกสารล่าสุดทั้งหมด) สำหรับสิ่งนี้คุณจะต้องใช้คีย์ API ผู้ใช้งานผู้ดูแลระบบเท่านั้นสามารถสร้างคีย์ API หากคุณเป็นผู้ดูแลระบบสิ่งที่คุณต้องทำเพื่อให้ได้คีย์ API คือคลิกที่ชื่อผู้ใช้> สร้างคีย์ API> สร้าง กุญแจประกอบด้วย 2 ส่วนคั่นด้วย ":" อย่างแรกคือคีย์ UUID (ใช้สำหรับการค้นหาอย่างรวดเร็วในตารางคีย์) และที่สองคือโทเค็นข้อความธรรมดา 16 ไบต์ ในด้านเซิร์ฟเวอร์โทเค็นนี้ได้รับการแฮชและเค็มก่อนที่จะถูกเก็บไว้
ตรวจสอบให้แน่ใจว่าได้เขียนคีย์นี้ลงเนื่องจากไม่ได้เก็บไว้ที่ใดก็ได้และไม่สามารถเรียกคืนได้หลังจากที่คุณปิดบทสนทนา
ฉันได้ทดสอบการทำงานนี้อยู่เบื้องหลังพร็อกซีย้อนกลับของ Nginx มันค่อนข้างตรงไปตรงมาและไม่จำเป็นต้องมีการกำหนดค่าพิเศษ
ภาพหน้าจอบางส่วนของเว็บอินเตอร์เฟส ณ วันที่ 18 เมษายน 2023 








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
แรกแก้ไขไฟล์ใน dataastore/ผู้ให้บริการที่เรียกว่า 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.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