
الاسم هو القليل من النكتة (وإن كان ذلك سيئًا). لخص هذا التطبيق ما تم وضعه على Arxiv ، إلى حد ما من تاريخ حديث من الأدب إذا صح التعبير. ويبدو أن ثوسيديوديس ، كونها واحدة من أوائل المؤرخ الصارم في الثقافة الغربية ، لائقة. ومع ذلك ، عاش Thucydides الشهيرة منذ وقت طويل ، لذا سيكون قديمًا من العمر ، ومن المحتمل أن يكون سهلاً جسديًا لتلخيص الأدب الأكاديمي الحديث. كانت ميثوسيلا شهيرة كبيرة جدا ....
تمتد النكتة والاستعارة سيئة. ومع ذلك ، ما لا يمكنك قوله هو أنه ليس اسمًا فريدًا.
يتم التعامل مع الكثير من التثبيت بواسطة Dockerfile. ومع ذلك ، بالإضافة إلى Docker ستحتاج
1) milvis
2) postgresql
3) GPT-Retrival-API
لاحظ أنه سيتعين عليك تعديل datastore gpt-recrival-api milvus لتضمين معرف المستند الحقل. هذا يتطلب بعض التعديلات الصغيرة على الملفات المصدر لذلك. انظر الجزء السفلي من ReadMe للحصول على التفاصيل.
ضع معلومات التكوين لهذه في ملف config.py قبل إنشاء حاوية Docker. بمجرد إعداد هذه الإعداد ، يمكنك تشغيل الأوامر التالية لبناء ونشر 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 لديه سياق أكبر بكثير للإجابة عليها. نظرًا لأن النص الكامل يتم تخزينه في قاعدة البيانات بعد أن ينقر أي شخص على زر "الوضع التجريدي فقط" مرة واحدة ، فسيتم رمادي دائمًا في المستقبل حيث أن مربع الدردشة هذا سيؤدي دائمًا إلى التفكير في الورقة بأكملها.
بعض الوظائف مخصصة لواجهة البرمجية وليس واجهة المستخدم (على وجه التحديد تلخيص جميع الأوراق الأخيرة). لهذا ستحتاج إلى مفتاح API. يمكن لمستخدمي المسؤول فقط إنشاء مفاتيح API. إذا كنت مسؤولًا ، فكل ما تحتاجه من أجل الحصول على مفتاح API هو النقر على اسم المستخدم الخاص بك> إنشاء مفتاح API> إنشاء. يشتمل المفتاح على جزأين ، مفصولة بـ A ":". الأول هو المفتاح 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
قم أولاً بتعديل الملف في مخزن البيانات/مقدمي الخدمات يسمى 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