
Название немного шутка (хотя и экстремие плохое). Это приложение суммировало то, что было поставлено на Arxiv, что -то вроде недавней истории литературы, если хотите. Фукидид, будучи одним из самых ранних историков Ригора в западной культуре, казалось, подходил. Тем не менее, Фукидидс, как известно, жил давным -давно, поэтому он был бы очень старым и, вероятно, физически неспособен суммировать современную академическую литературу. Метузела была очень старой ....
Шутка растянута, а метафора плохая; Однако вы не можете сказать, что это не уникальное имя.
Большая часть установки обрабатывается Dockerfile. Однако в дополнение к Docker вам понадобится
1) milvis
2) postgresql
3) GPT-Retrival-API
Обратите внимание, что вам придется изменить данные Datastore Datastore GPT-Retrival-API, чтобы включить полевой идентификатор документа. Для этого требуются небольшие изменения исходных файлов. Смотрите дно 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 - это случайная строка, которую вы присваиваете в качестве среды. Это позволяет вам зарегистрировать нового пользователя в первый раз, когда вы загружаетесь. Это также позволяет вам позволить другим делать свои собственные счета. Пока они имеют секрет. Не делитесь этим.
Веб -сайт будет доступен по телефону 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Это запустит сервер в режиме разработки по тел.
В 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> Generate. Ключ состоит из 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
Сначала измените файл в данных DataStore/Providers с именем 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