
名前はちょっとした冗談です(極端な悪いものではありますが)。このアプリは、Arxivに掲載されたものを要約しました。 Thucydidesは、西洋文化の中で最も初期のRigorus歴史家の一人であり、適合しているように見えました。しかし、Thucydidesはかなり前に生きていたことで有名なので、Extremley oldであり、現代の学術文献を要約することは物理的に避難する可能性があります。メトセラは非常に年をとったことで有名でした。
冗談は伸びており、比phorは貧弱です。しかし、あなたが言うことができないのは、それがユニークな名前ではないということです。
インストールの多くは、DockerFileによって処理されます。ただし、Dockerに加えて必要です
1) milvis
2) postgresql
3) GPT-Retrival-API
フィールドドキュメントIDを含めるには、GPT-Retrival-API Milvus Datastoreを変更する必要があることに注意してください。これには、そのためにソースファイルにいくつかの小さな変更が必要です。詳細については、readmeの下部を参照してください。
Dockerコンテナを構築する前に、これらの構成情報をConfig.pyファイルに配置します。それらがセットアップされたら、次のコマンドを実行してメトセラのトゥキディデスを構築および展開できます
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を開くと、ユーザーアカウントがありません。 1つを作成するオプションが与えられます。ユーザー名、パスワード、電子メール、および秘密(環境変数MT_NEW_USER_SECRET)を提供します。このユーザーを作成すると、バックエンドコードはデータベースにユーザーが存在するかどうかを確認し、そうでない場合はそのユーザーが管理者になります(新しいユーザーと新しい管理者ユーザーを作成できます)。そのユーザーとしてログインできるようになりました。 [ユーザーの作成]ボタンは、同じ機能で残ります。それが作成する後続のすべてのユーザーには、管理権がありません。
基本的な使用法は自明でなければなりません。アイデアは、提供されるウェブサイトでは、前日(または週末 /金曜日)にARXIVに投稿された各論文の簡単な要約を提供するということです。これらの要約は、GPT-3.5-TuboとArxivにリストされている論文の要約を使用して生成されます。インターフェイスはデフォルトですべての論文を表示するようになります。ただし、カテゴリフィルターはサイドバーに表示されます。
各ペーパーに関連付けられたチャットボックスを介して、より複雑な動作が有効になります。このチャットボックスは、GPT-3.5-ターボと、現在キャッシュされたすべての情報を保存するベクトルデータベースに接続されています(Openai-Textmbedding-Ada002モデルを使用して)。質問をすると、その論文に関する最も関連性の高いキャッシュされた情報が質問とともにGPTモデルに渡され、その回答が画面に印刷されます。デフォルトでは、抽象とタイトルのみがキャッシュされているため、GPTが提供できる応答は限られています。ただし、「抽象モードのみ」ボタンをクリックして数秒待つと、「フルテキストモード」に変更され、クリックできなくなります。舞台裏では、その論文の完全なPDFがダウンロードされ、テキストに解析されました。次に、同じベクトルデータベースに埋め込まれます。質問をするとき、GPTモデルにはそれらに答えるためのはるかに多くのコンテキストがあります。フルテキストは、「抽象モードのみ」ボタンをクリックした後、データベースに保存されるため、一度にそのチャットボックスは常にデフォルトで論文全体を検討するため、将来は常にグレイアウトされます。
一部の機能は、プログラマティックではないUIインターフェイスを対象としています(具体的にはすべての最新の論文を自動要約)。このためには、APIキーが必要です。 APIキーを生成できます。 APIキーを取得するために必要なのは管理者である場合、ユーザー名をクリックして> [APIキー]> [生成]をクリックします。キーは、「:」で区切られた2つの部分で構成されています。 1つ目はキーUUID(キーテーブルの迅速な検索に使用)で、2つ目はプレーンテキスト16バイトトークンです。サーバー側では、このトークンが保管する前にハッシュして塩漬けになっていました。
このキーはどこにも保存されていないため、必ず書き留めてください。そうすれば、対話を閉じた後は取得できません。
これをNginx逆プロキシの背後に実行していることをテストしました。その非常に簡単で、特別な構成は必要ありませんでした。
2023年4月18日現在のWebインターフェイスのいくつかのスクリーンショット








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