Closed4
GPTCache
![laiso](https://res.cloudinary.com/zenn/image/fetch/s---QZWhL4t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/3877407207.jpeg)
- GPT(OpenAI API)の結果をキャッシュしてコスト削減するモジュール
- ベクターDBを開発してるZillizが公開
- アダプターと呼ばれる層がAPIリクエストにプロキシとして割り込み保存+差し替えをする
![laiso](https://res.cloudinary.com/zenn/image/fetch/s---QZWhL4t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/3877407207.jpeg)
似てるもの
- PromptLayer プロキシとして割り込んでAPIリクエスト結果を外部サーバーに保存しておいて分析するSaaS
![laiso](https://res.cloudinary.com/zenn/image/fetch/s---QZWhL4t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/3877407207.jpeg)
examples/openai_examples/readme.py
questionsのAPI結果をキャシュする
# macOSなのでfaiss-cpuでごまかす
pip install faiss-cpu transformers onnxruntime
python examples/openai_examples/readme.py
データはどこか
カレントディレクトリに sqlite.db
faiss.index
が生成されてる。
❯ sqlite3 sqlite.db
SQLite version 3.39.5 2022-10-14 20:58:05
Enter ".help" for usage hints.
sqlite> .schema
CREATE TABLE gptcache (
id INTEGER NOT NULL,
question VARCHAR(1000) NOT NULL,
answer VARCHAR(1000) NOT NULL,
create_on DATETIME,
last_access DATETIME,
embedding_data BLOB,
state INTEGER,
type INTEGER,
PRIMARY KEY (id)
);
sqlite> SELECT * FROM gptcache;
1|what is github|GitHub is an online platform used for version control, software development, and collaboration. It allows users to host and review code, manage project collaborations and releases, and track changes and bugs in their code. It is widely used by developers and organizations to collaborate on open-source and closed-source projects, as well as manage their codebase and workflow efficiently. GitHub also offers a range of features like issue tracking, code review, and continuous integration and deployment to improve developers' productivity and code quality.|2023-04-14 12:39:56.124644|2023-04-14 12:42:13.623031|n
a<j?=kMt=hJؼ2=;r;J<'HY;;#<|0|0
Embeddingsは GPTCache/paraphrase-albert-onnx
というモデルをONNX経由で利用しているようだ。
![laiso](https://res.cloudinary.com/zenn/image/fetch/s---QZWhL4t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/3877407207.jpeg)
評価
- アプリケーション開発中にopenaiモジュールを置き換えて使用するのには向いてるかもしれない
- 本番環境でComletetion APIの呼び出しをキャッシュするならソースコードを参考に自作した方がよさそう
開発用途だとBaaS系のemulatorのようなモックサーバーとして使えるインターフェイスだといいかも?
import openai
openai.api_base = "http://localhost:8000" if os.environ.get("DEBUG") else "https://api.openai.com"
response = openai.Completion.create()
このスクラップは2023/04/25にクローズされました