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
และเข้าสู่ระบบโดยใช้ az login
สำหรับ Azure OpenAI ด้วยข้อมูลระบุตัวตนที่ได้รับการจัดการ (ดูที่นี่)
จากนั้นคุณสามารถเรียกใช้พร็อกซี 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
เมื่อพร็อกซีทำงาน คุณสามารถใช้พร็อกซีแทนไคลเอ็นต์ OpenAI ได้โดยการตั้ง base_url
เป็น http://localhost:8000/v1
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 เพียงอย่าลืมเติมตัวแปร env 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 -
optillm _approach
ใน extra_body
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) เช่น คุณสามารถใช้โมเดล Gemini Flash กับ moa
ได้โดยการตั้งค่าการส่งคีย์ api ในตัวแปรสภาพแวดล้อม os.environ['GEMINI_API_KEY']
แล้วเรียกโมเดล moa-gemini/gemini-1.5-flash-002
ในผลลัพธ์ คุณจะเห็นว่ามีการใช้ 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 เป็นพร็อกซีแบบโปร่งใสและจะทำงานร่วมกับ LLM API หรือผู้ให้บริการใดๆ ที่มีจุดสิ้นสุดการแชทที่เข้ากันได้กับ OpenAI API และในทางกลับกัน optillm ยังเปิดเผยจุดสิ้นสุดการแชทที่เข้ากันได้กับ OpenAI API เดียวกันอีกด้วย สิ่งนี้จะช่วยให้คุณสามารถรวมเข้ากับเครื่องมือหรือกรอบงานที่มีอยู่ได้อย่างง่ายดาย หาก LLM ที่คุณต้องการใช้ไม่มีตำแหน่งข้อมูลที่รองรับ OpenAI API (เช่น Google หรือ Anthropic) คุณสามารถใช้พร็อกซีเซิร์ฟเวอร์ LiteLLM ที่รองรับ LLM ส่วนใหญ่ได้
แผนภาพลำดับต่อไปนี้แสดงให้เห็นว่าคำขอและการตอบกลับผ่าน optillm อย่างไร
ในแผนภาพ:
A
เป็นเครื่องมือที่มีอยู่ (เช่น oobabooga) เฟรมเวิร์ก (เช่น patchwork) หรือโค้ดของคุณเองที่คุณต้องการใช้ผลลัพธ์จาก optillm คุณสามารถใช้ได้โดยตรงโดยใช้ SDK ไคลเอ็นต์ OpenAI ใดก็ได้B
เป็นบริการ optillm (ทำงานโดยตรงหรือในคอนเทนเนอร์นักเทียบท่า) ที่จะส่งคำขอไปยัง base_url
C
คือบริการใดๆ ที่ให้บริการปลายทางการแชทที่เข้ากันได้กับ OpenAI API เรารองรับการโหลดโมเดล HuggingFace หรือ LoRA โดยตรงใน optillm หากต้องการใช้เซิร์ฟเวอร์อนุมานในตัว ให้ตั้งค่า optillm _API_KEY
เป็นค่าใดก็ได้ (เช่น export optillm _API_KEY=" optillm "
) จากนั้นใช้ค่าเดียวกันในไคลเอ็นต์ OpenAI ของคุณ คุณสามารถส่งโมเดล HuggingFace ใดก็ได้ในช่องโมเดล หากเป็นโมเดลส่วนตัว ตรวจสอบให้แน่ใจว่าคุณตั้งค่าตัวแปรสภาพแวดล้อม HF_TOKEN
ด้วยคีย์ HuggingFace ของคุณ นอกจากนี้เรายังสนับสนุนการเพิ่ม LoRA จำนวนเท่าใดก็ได้ที่ด้านบนของโมเดลโดยใช้ตัวคั่น +
เช่น โค้ดต่อไปนี้โหลดโมเดลพื้นฐาน meta-llama/Llama-3.2-1B-Instruct
จากนั้นเพิ่ม LoRA สองตัวที่ด้านบน - patched-codes/Llama-3.2-1B-FixVulns
และ patched-codes/Llama-3.2-1B-FastApply
. คุณสามารถระบุ LoRA ที่จะใช้โดยใช้พารามิเตอร์ active_adapter
ในช่อง extra_args
ของไคลเอ็นต์ OpenAI SDK โดยค่าเริ่มต้น เราจะโหลดอะแดปเตอร์ที่ระบุล่าสุด
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
เพื่อเริ่มต้นเซิร์ฟเวอร์ด้วยโมเดลที่ระบุและความยาวบริบทของโทเค็น 4096python3 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 | ใช้การให้เหตุผลแบบลูกโซ่แห่งความคิดด้วยส่วน <การคิด>, <การสะท้อน> และ <เอาท์พุต> |
วางแผนค้นหา | plansearch | ใช้อัลกอริธึมการค้นหาเหนือแผนผู้สมัครเพื่อแก้ไขปัญหาในภาษาธรรมชาติ |
อ่านซ้ำ | re2 | ใช้การอ่านซ้ำเพื่อปรับปรุงการให้เหตุผลโดยการประมวลผลแบบสอบถามสองครั้ง |
ความสม่ำเสมอในตนเอง | self_consistency | ใช้วิธีการรักษาความมั่นคงในตนเองขั้นสูง |
ตัวแก้ปัญหา Z3 | z3 | ใช้เครื่องพิสูจน์ทฤษฎีบท Z3 เพื่อการให้เหตุผลเชิงตรรกะ |
R* อัลกอริทึม | rstar | ใช้อัลกอริธึม R* สำหรับการแก้ปัญหา |
เผ่น | leap | เรียนรู้หลักการเฉพาะงานจากตัวอย่างช็อตไม่กี่ตัวอย่าง |
การเพิ่มประสิทธิภาพการเดินทางแบบไปกลับ | rto | ปรับการตอบสนองให้เหมาะสมผ่านกระบวนการไปกลับ |
สุดยอดของการสุ่มตัวอย่าง N | bon | สร้างการตอบกลับหลายรายการและเลือกคำตอบที่ดีที่สุด |
ส่วนผสมของตัวแทน | moa | รวมคำตอบจากการวิจารณ์หลายรายการ |
ค้นหาต้นไม้มอนติคาร์โล | mcts | ใช้ MCTS เพื่อการตัดสินใจในการตอบกลับแชท |
เกมพีวี | pvg | ใช้แนวทางเกมผู้พิสูจน์-ผู้ตรวจสอบ ณ เวลาอนุมาน |
การถอดรหัส CoT | N/A สำหรับผู้รับมอบฉันทะ | ใช้การถอดรหัสลูกโซ่แห่งความคิดเพื่อล้วงเอาเหตุผลโดยไม่ต้องแจ้งอย่างชัดเจน |
การถอดรหัสเอนโทรปี | N/A สำหรับผู้รับมอบฉันทะ | ใช้การสุ่มตัวอย่างแบบปรับเปลี่ยนได้โดยอิงตามความไม่แน่นอนของโทเค็นระหว่างการสร้าง |
ปลั๊กอิน | กระสุน | คำอธิบาย |
---|---|---|
เราเตอร์ | router | ใช้โมเดล optillm -bert-uncased เพื่อกำหนดเส้นทางคำขอไปยังแนวทางต่างๆ ตามพร้อมท์ของผู้ใช้ |
ห่วงโซ่ของรหัส | coc | ใช้แนวทางแบบลูกโซ่ของโค้ดที่รวม CoT เข้ากับการเรียกใช้โค้ดและการจำลองโค้ดแบบ LLM |
หน่วยความจำ | memory | ใช้เลเยอร์หน่วยความจำระยะสั้น ช่วยให้คุณสามารถใช้ความยาวบริบทที่ไม่จำกัดกับ LLM ใดก็ได้ |
ความเป็นส่วนตัว | privacy | ไม่ระบุชื่อข้อมูล PII ตามคำขอ และยกเลิกการระบุชื่อกลับเป็นค่าดั้งเดิมเพื่อตอบสนอง |
อ่าน URL | readurls | อ่าน URL ทั้งหมดที่พบในคำขอ ดึงเนื้อหาจาก URL และเพิ่มลงในบริบท |
ดำเนินการรหัส | executecode | เปิดใช้งานการใช้ตัวแปลโค้ดเพื่อรันโค้ด Python ในคำขอและการตอบกลับที่สร้างโดย LLM |
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 | URL พื้นฐานสำหรับปลายทางที่เข้ากันได้กับ OpenAI | "" |
--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 | คีย์ API ตัวเลือกสำหรับการตรวจสอบสิทธิ์ไคลเอ็นต์เพื่อ optillm | "" |
เมื่อใช้ 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
หากต้องการรักษาความปลอดภัยพร็อกซี optillm ด้วยคีย์ API ให้ตั้งค่าตัวแปรสภาพแวดล้อม optillm _API_KEY
:
optillm _API_KEY=your_secret_api_key
เมื่อตั้งค่าคีย์ API แล้ว ไคลเอนต์จะต้องรวมไว้ในคำขอโดยใช้ส่วนหัว Authorization
:
Authorization: Bearer your_secret_api_key
แบบอย่าง | คะแนน |
---|---|
o1-มินิ | 56.67 |
coc-claude-3-5-โคลง-20241022 | 46.67 |
coc-ราศีเมถุน/ราศีเมถุน-exp-1121 | 46.67 |
o1-ดูตัวอย่าง | 40.00 น |
ราศีเมถุน-exp-1114 | 36.67 |
คลอด-3-5-โคลง-20241022 | 20.00 น |
ราศีเมถุน-1.5-โปร-002 | 20.00 น |
ราศีเมถุน-1.5-flash-002 | 16.67 |
แบบอย่าง | ความแม่นยำ |
---|---|
readurls&memory-gpt-4o-mini | 61.29 |
gpt-4o-มินิ | 50.61 |
อ่าน URL&หน่วยความจำ-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-turbo-2024-04-09 | 44.2 |
เนื่องจาก optillm เป็นการแทนที่แบบดรอปอินสำหรับ OpenAI API คุณจึงสามารถรวมเข้ากับเครื่องมือและเฟรมเวิร์กที่มีอยู่ได้อย่างง่ายดายโดยใช้ไคลเอนต์ OpenAI เราใช้ optillm กับ patchwork ซึ่งเป็นเฟรมเวิร์กโอเพ่นซอร์สที่ทำให้การพัฒนาเป็นไปโดยอัตโนมัติ เช่น การตรวจสอบ PR การแก้ไขข้อบกพร่อง การแพตช์ความปลอดภัยโดยใช้เวิร์กโฟลว์ที่เรียกว่า patchflows เราเห็นประสิทธิภาพที่เพิ่มขึ้นอย่างมากจากแพตช์โฟลว์ที่รองรับทั้งหมดดังที่แสดงด้านล่าง เมื่อใช้วิธีผสมของตัวแทน (moa)