optillm是一個相容於 OpenAI API 的最佳化推理代理,它實現了多種最先進的技術,可以提高 LLM 的準確性和效能。目前的重點是實施改進編碼推理、邏輯和數學查詢的技術。透過在推理時進行額外的計算,可以在不同的任務中使用這些技術來擊敗前沿模型。
pip install optillm
optillm
2024-10-22 07:45:05,612 - INFO - Loaded plugin: privacy
2024-10-22 07:45:06,293 - INFO - Loaded plugin: memory
2024-10-22 07:45:06,293 - INFO - Starting server with approach: auto
使用git
克隆儲存庫並使用pip install
設定依賴項。
git clone https://github.com/codelion/optillm.git
cd optillm
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
設定OPENAI_API_KEY
環境變數(適用於 OpenAI)或AZURE_OPENAI_API_KEY
、 AZURE_API_VERSION
和AZURE_API_BASE
環境變數(對於 Azure OpenAI)或AZURE_API_VERSION
和AZURE_API_BASE
環境變數,並使用 Azure OpenAI 的識別az login
進行登入)。
然後您可以如下執行optillm代理程式。
python optillm .py
2024-09-06 07:57:14,191 - INFO - Starting server with approach: auto
2024-09-06 07:57:14,191 - INFO - Server configuration: { ' approach ' : ' auto ' , ' mcts_simulations ' : 2, ' mcts_exploration ' : 0.2, ' mcts_depth ' : 1, ' best_of_n ' : 3, ' model ' : ' gpt-4o-mini ' , ' rstar_max_depth ' : 3, ' rstar_num_rollouts ' : 5, ' rstar_c ' : 1.4, ' base_url ' : ' ' }
* Serving Flask app ' optillm '
* Debug mode: off
2024-09-06 07:57:14,212 - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:8000
* Running on http://192.168.10.48:8000
2024-09-06 07:57:14,212 - INFO - Press CTRL+C to quit
代理程式運行後,您可以透過將base_url
設定為http://localhost:8000/v1
來將其用作 OpenAI 用戶端的替代品。
import os
from openai import OpenAI
OPENAI_KEY = os . environ . get ( "OPENAI_API_KEY" )
OPENAI_BASE_URL = "http://localhost:8000/v1"
client = OpenAI ( api_key = OPENAI_KEY , base_url = OPENAI_BASE_URL )
response = client . chat . completions . create (
model = "moa-gpt-4o" ,
messages = [
{
"role" : "user" ,
"content" : "Write a Python program to build an RL model to recite text from any position that the user provides, using only numpy."
}
],
temperature = 0.2
)
print ( response )
上面的程式碼適用於 OpenAI 和 Azure OpenAI,只需記住使用正確的金鑰填入OPENAI_API_KEY
環境變數。有多種方法可以控制最佳化技術,它們按以下優先順序應用:
{slug}-model-name
來控制用於最佳化的技術。例如,在上面的程式碼中,我們使用moa
或代理混合物作為最佳化方法。在代理日誌中,您將看到以下內容,顯示moa
與基本型號gpt-4o-mini
一起使用。 2024-09-06 08:35:32,597 - INFO - Using approach moa, with gpt-4o-mini
2024-09-06 08:35:35,358 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions " HTTP/1.1 200 OK "
2024-09-06 08:35:39,553 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions " HTTP/1.1 200 OK "
2024-09-06 08:35:44,795 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions " HTTP/1.1 200 OK "
2024-09-06 08:35:44,797 - INFO - 127.0.0.1 - - [06/Sep/2024 08:35:44] " POST /v1/chat/completions HTTP/1.1 " 200 -
extra_body
的optillm _approach
欄位中。 response = client.chat.completions.create(
model= " gpt-4o-mini " ,
messages=[{ " role " : " user " , " content " : " " }],
temperature=0.2,
extra_body={ " optillm _approach " : " bon|moa|mcts " }
)
system
或user
提示字元中的< optillm _approach> </ optillm _approach>
標記內提及該方法。 response = client.chat.completions.create(
model= " gpt-4o-mini " ,
messages=[{ " role " : " user " , " content " : " < optillm _approach>re2</ optillm _approach> How many r's are there in strawberry? " }],
temperature=0.2
)
提示
您也可以透過使用符號&
和|
來組合不同的技術。 。當您使用&
時,這些技術將在管道中按從左到右的順序進行處理,並將前一階段的回應用作下一階段的請求。同時,與|
我們並行運行所有請求並產生多個回應,並以列表形式返回。
請注意,上述約定僅在optillm伺服器啟動且推理方法設定為auto
時才有效。否則,客戶端請求中的model
屬性必須僅使用模型名稱進行設定。
我們現在支援所有 LLM 提供者(透過包裝 LiteLLM sdk)。例如,您可以透過在環境變數os.environ['GEMINI_API_KEY']
中設定傳遞 api 金鑰,然後呼叫模型moa-gemini/gemini-1.5-flash-002
,將 Gemini Flash 模型與moa
一起使用。在輸出中,您將看到 LiteLLM 用於呼叫基本模型。
9:43:21 - LiteLLM:INFO: utils.py:2952 -
LiteLLM completion () model= gemini-1.5-flash-002; provider = gemini
2024-09-29 19:43:21,011 - INFO -
LiteLLM completion () model= gemini-1.5-flash-002; provider = gemini
2024-09-29 19:43:21,481 - INFO - HTTP Request: POST https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-002:generateContent ? key=[redacted] " HTTP/1.1 200 OK "
19:43:21 - LiteLLM:INFO: utils.py:988 - Wrapper: Completed Call, calling success_handler
2024-09-29 19:43:21,483 - INFO - Wrapper: Completed Call, calling success_handler
19:43:21 - LiteLLM:INFO: utils.py:2952 -
LiteLLM completion () model= gemini-1.5-flash-002; provider = gemini
提示
optillm是一個透明代理,可與任何具有 OpenAI API 相容聊天完成端點的 LLM API 或提供者配合使用,反過來, optillm也公開相同的 OpenAI API 相容聊天完成端點。這應該允許您輕鬆地將其整合到任何現有的工具或框架中。如果您要使用的 LLM 沒有 OpenAI API 相容端點(例如 Google 或 Anthropic),您可以使用支援大多數 LLM 的 LiteLLM 代理伺服器。
以下序列圖說明了請求和回應如何透過optillm 。
圖中:
A
是現有工具(如 oobabooga)、框架(如 patchwork)或您自己的程式碼,您希望在其中使用optillm的結果。您可以使用任何 OpenAI 用戶端 sdk 直接使用它。B
是optillm服務(直接運行或在 docker 容器中運行),它將向base_url
發送請求。C
是提供與 OpenAI API 相容的聊天完成端點的任何服務。我們支援直接在optillm中載入任何 HuggingFace 型號或 LoRA 。若要使用內建推理伺服器,請將optillm _API_KEY
設定為任意值(例如, export optillm _API_KEY=" optillm "
),然後在 OpenAI 用戶端中使用相同的值。您可以在模型欄位中傳遞任何 HuggingFace 模型。如果它是私有模型,請確保使用 HuggingFace 金鑰設定HF_TOKEN
環境變數。我們還支援使用+
分隔符號在模型頂部添加任意數量的 LoRA。
例如,以下程式碼載入基本模型meta-llama/Llama-3.2-1B-Instruct
,然後在頂部新增兩個 LoRA - patched-codes/Llama-3.2-1B-FixVulns
和patched-codes/Llama-3.2-1B-FastApply
。您可以使用 OpenAI SDK 用戶端的extra_args
欄位中的active_adapter
參數指定要使用哪個 LoRA。預設情況下,我們將載入最後指定的適配器。
OPENAI_BASE_URL = "http://localhost:8000/v1"
OPENAI_KEY = " optillm "
response = client . chat . completions . create (
model = "meta-llama/Llama-3.2-1B-Instruct+patched-codes/Llama-3.2-1B-FastApply+patched-codes/Llama-3.2-1B-FixVulns" ,
messages = messages ,
temperature = 0.2 ,
logprobs = True ,
top_logprobs = 3 ,
extra_body = { "active_adapter" : "patched-codes/Llama-3.2-1B-FastApply" },
)
您也可以直接在本機推理伺服器上使用替代解碼技術,例如cot_decoding
和entropy_decoding
。
response = client . chat . completions . create (
model = "meta-llama/Llama-3.2-1B-Instruct" ,
messages = messages ,
temperature = 0.2 ,
extra_body = {
"decoding" : "cot_decoding" , # or "entropy_decoding"
# CoT specific params
"k" : 10 ,
"aggregate_paths" : True ,
# OR Entropy specific params
"top_k" : 27 ,
"min_p" : 0.03 ,
}
)
OPENAI_API_KEY
環境變數設定為佔位符值export OPENAI_API_KEY="sk-no-key"
./llama-server -c 4096 -m path_to_model
以使用指定模型和 4096 個令牌的上下文長度啟動伺服器python3 optillm .py --base_url base_url
啟動代理python3 optillm .py --base_url http://localhost:8080/v1
警告
請注意,Anthropic API、llama-server(和 ollama)目前不支援從模型中採樣多個回應,這將可用方法限制為以下方法: cot_reflection
、 leap
、 plansearch
、 rstar
、 rto
、 self_consistency
、 re2
和z3
。對於 HuggingFace 上的模型,您可以使用內建的本機推理伺服器,因為它支援多個回應。
方法 | 蛞蝓 | 描述 |
---|---|---|
帶有反射的 CoT | cot_reflection | 使用 <thinking>、<reflection> 和 <output> 部分實現思想鏈推理 |
計劃搜尋 | plansearch | 對候選計劃實施搜尋演算法以解決自然語言問題 |
重讀 | re2 | 透過兩次處理查詢來實現重讀以提高推理能力 |
自我一致性 | self_consistency | 實施先進的自洽方法 |
Z3解算器 | z3 | 利用 Z3 定理證明器進行邏輯推理 |
R*演算法 | rstar | 實作 R* 演算法來解決問題 |
飛躍 | leap | 從幾個鏡頭範例中學習特定於任務的原則 |
往返優化 | rto | 透過往返流程優化回應 |
最佳 N 採樣 | bon | 產生多個回應並選擇最好的一個 |
藥劑混合物 | moa | 結合多種批評的回應 |
蒙特卡羅樹搜索 | mcts | 使用 MCTS 在聊天回應中進行決策 |
光電遊戲 | pvg | 在推理時應用證明者-驗證者博弈方法 |
科特解碼 | 對於代理不適用 | 實現思路鏈解碼以在沒有明確提示的情況下引發推理 |
熵解碼 | 對於代理不適用 | 根據代幣生成過程中的不確定性實現自適應採樣 |
外掛 | 蛞蝓 | 描述 |
---|---|---|
路由器 | router | 使用optillm -bert-uncased 模型根據使用者提示將請求路由到不同的方法 |
程式碼鏈 | coc | 實現將 CoT 與程式碼執行和基於 LLM 的程式碼模擬結合的程式碼鏈方法 |
記憶 | memory | 實現短期記憶層,使您能夠在任何 LLM 中使用無限的上下文長度 |
隱私 | privacy | 對請求中的 PII 資料進行匿名化,並在回應中將其去匿名化回原始值 |
讀取網址 | readurls | 讀取請求中找到的所有 URL,獲取 URL 處的內容並將其新增至上下文中 |
執行程式碼 | executecode | 允許使用程式碼解釋器在請求和 LLM 產生的回應中執行 python 程式碼 |
optillm支援各種命令列參數和環境變數進行配置。
範圍 | 描述 | 預設值 |
---|---|---|
--approach | 使用推理方法 | "auto" |
--simulations | MCTS 模擬次數 | 2 |
--exploration | MCTS 的勘探權重 | 0.2 |
--depth | MCTS 的模擬深度 | 1 |
--best-of-n | best_of_n 方法的樣本數量 | 3 |
--model | 使用的 OpenAI 模型 | "gpt-4o-mini" |
--base-url | OpenAI 相容端點的基本 URL | "" |
--rstar-max-depth | rStar 演算法的最大深度 | 3 |
--rstar-num-rollouts | rStar 演算法的推出次數 | 5 |
--rstar-c | rStar 演算法的探索常數 | 1.4 |
--n | 最終回傳的響應數 | 1 |
--return-full-response | 返回完整回應,包括帶有標籤的 CoT | False |
--port | 指定運行代理的端口 | 8000 |
-- optillm -api-key | 用於對optillm進行用戶端身份驗證的可選 API 金鑰 | "" |
使用 Docker 時,可以將它們設定為以optillm _
為前綴的環境變數。
optillm可以選擇使用 Docker 和提供的 Dockerfile 來建置和運行。
確保您的系統上安裝了 Docker 和 Docker Compose。
更新 docker-compose.yaml 檔案中的環境變量,或在專案根目錄中建立.env
檔案並新增要設定的任何環境變數。例如,要設定 OpenAI API 金鑰,請將以下行新增至.env
檔案:
OPENAI_API_KEY=your_openai_api_key_here
執行以下命令啟動optillm :
docker compose up -d
如果 Docker 映像不存在,這將建置它並啟動optillm服務。
optillm將在http://localhost:8000
上提供。
使用Docker時,可以將這些參數設定為環境變數。例如,要設定方法和模型,您可以使用:
optillm _APPROACH=mcts
optillm _MODEL=gpt-4
若要使用 API 金鑰保護optillm代理,請設定optillm _API_KEY
環境變數:
optillm _API_KEY=your_secret_api_key
設定 API 金鑰後,客戶端必須使用Authorization
標頭將其包含在請求中:
Authorization: Bearer your_secret_api_key
模型 | 分數 |
---|---|
o1-迷你 | 56.67 |
coc-克勞德-3-5-十四行詩-20241022 | 46.67 |
coc-gemini/gemini-exp-1121 | 46.67 |
o1-預覽 | 40:00 |
雙子座-exp-1114 | 36.67 |
克勞德-3-5-十四行詩-20241022 | 20:00 |
雙子座-1.5-pro-002 | 20:00 |
雙子座-1.5-flash-002 | 16.67 |
模型 | 準確性 |
---|---|
readurls&內存-gpt-4o-mini | 61.29 |
GPT-4O-迷你 | 50.61 |
readurls&內存-Gemma2-9b | 30.1 |
傑瑪2-9b | 5.1 |
傑瑪2-27b | 30.8 |
雙子座快閃記憶體1.5 | 66.5 |
雙子座專業版 1.5 | 72.9 |
模型 | 透過@1 | 透過@5 | 通過@10 |
---|---|---|---|
plansearch-gpt-4o-mini | 44.03 | 59.31 | 63.5 |
GPT-4O-迷你 | 43.9 | 50.61 | 53.25 |
克勞德 3.5 十四行詩 | 51.3 | ||
gpt-4o-2024-05-13 | 45.2 | ||
GPT-4-渦輪-2024-04-09 | 44.2 |
由於optillm是 OpenAI API 的直接替代品,您可以使用 OpenAI 用戶端輕鬆地將其與現有工具和框架整合。我們將optillm與 patchwork 結合使用,這是一個開源框架,可以使用稱為 patchflow 的工作流程自動執行 PR 審查、錯誤修復、安全修補等開發繁瑣工作。當使用混合代理方法 (moa) 時,我們看到所有受支援的補丁流的效能都有巨大的提升,如下所示。