Wrapper ChatGPT ใน TTY ของคุณ
บันทึก
รุ่นนี้รองรับ gpt4 และ gpt4-turbo!
gptty เป็นอินเทอร์เฟซเชลล์ ChatGPT ที่ให้คุณ (1) โต้ตอบกับ ChatGPT ในลักษณะคล้ายกับเว็บแอปพลิเคชัน แต่ไม่จำเป็นต้องพึ่งพาความเสถียรของเว็บแอปพลิเคชัน (2) รักษาบริบทระหว่างเซสชันการแชทและจัดโครงสร้างการสนทนาของคุณตามที่คุณต้องการ (3) บันทึกสำเนาการสนทนาของคุณในเครื่องเพื่อให้อ้างอิงได้ง่าย
บางทีคุณอาจเป็นผู้ดูแลระบบที่กำหนดค่าเว็บเซิร์ฟเวอร์ให้กับนายจ้างของคุณ คุณกำลังเข้าถึงระบบจากอินเทอร์เฟซทางกายภาพ โดยมีการเชื่อมต่ออินเทอร์เน็ต แต่ไม่มีสภาพแวดล้อมเดสก์ท็อปหรืออินเทอร์เฟซผู้ใช้แบบกราฟิก ขณะกำหนดค่าเว็บเซิร์ฟเวอร์ คุณได้รับข้อผิดพลาดอธิบายไม่ได้ว่าคุณเปลี่ยนเส้นทางไปยังไฟล์ แต่ไม่ต้องการข้ามผ่านห่วงเพื่อคัดลอกไปยังระบบอื่นด้วยเบราว์เซอร์ เพื่อให้คุณสามารถค้นหาข้อผิดพลาดได้ แต่คุณติดตั้ง gptty และเปลี่ยนเส้นทางข้อผิดพลาดไปยังไคลเอนต์แชทด้วยคำสั่งเช่น gptty query --tag error --question "$(cat app.error | tr 'n' ' ')"
(ซึ่งจะกำจัดการขึ้นบรรทัดใหม่ สำหรับคุณ) หรือ cat app.error | xargs -d 'n' -I {} gptty query --tag error --question "{}"
(ซึ่งถือว่าข้อผิดพลาดของคุณครอบคลุมเพียงบรรทัดเดียว)
หรืออีกทางหนึ่ง คุณเป็นนักพัฒนาซอฟต์แวร์หรือนักวิทยาศาสตร์ข้อมูลที่ต้องการส่งข้อมูลผ่าน ChatGPT แต่ต้องการใช้ API ที่เป็นนามธรรมสูงเพื่อส่งคำขอเหล่านี้ แทนที่จะทำความคุ้นเคยกับ OpenAI API และ Wrapper เฉพาะภาษาต่างๆ อย่างใกล้ชิด เมื่อคุณต้องการอัปเดตฐานโค้ดของคุณเพื่อใช้โมเดลอื่น คุณต้องการที่จะสามารถแก้ไขไฟล์การกำหนดค่าเพียงไฟล์เดียว และคาดหวังว่ารูปแบบการตอบกลับแบบสอบถามจะยังคงสอดคล้องกันในโมเดลต่างๆ
หรือบางทีคุณอาจเป็นคนที่กระตือรือร้นที่ต้องการเก็บสำเนาการสนทนาในเครื่องหรือต้องการควบคุมวิธีการจัดหมวดหมู่ที่คุณใช้สำหรับการสนทนาเหล่านี้โดยตรงมากขึ้น
OpenAI มีโมเดลหลายรุ่นให้เลือกใช้ผ่าน API [1] ปัจจุบัน gptty รองรับ Completions
(davinci, curie) และ ChatCompletions
(gpt-3.5-turbo, gpt-4) สิ่งที่คุณต้องทำคือระบุชื่อรุ่นในการกำหนดค่าของคุณ (ค่าเริ่มต้นคือ text-davinci-003) และแอปพลิเคชันจะจัดการส่วนที่เหลือ
คุณสามารถติดตั้ง gptty
บน pip:
pip install gptty
คุณยังสามารถติดตั้งจาก git:
cd ~/Code # replace this with whatever directory you want to use
git clone https://github.com/signebedi/gptty.git
cd gptty/
# now install the requirements
python3 -m venv venv
source venv/bin/activate
pip install -e .
ตอนนี้คุณสามารถตรวจสอบได้ว่าใช้งานได้โดยการรัน gptty --help
หากคุณพบข้อผิดพลาด ให้ลองกำหนดค่าแอป
gptty
อ่านการตั้งค่าการกำหนดค่าจากไฟล์ชื่อ gptty.ini
ซึ่งแอปคาดว่าจะอยู่ในไดเรกทอรีเดียวกับที่คุณใช้ gptty
เว้นแต่คุณจะผ่าน config_file
ที่กำหนดเอง ไฟล์นี้ใช้รูปแบบไฟล์ INI ซึ่งประกอบด้วยส่วนต่างๆ โดยแต่ละส่วนมีคู่คีย์-ค่าของตัวเอง
สำคัญ | พิมพ์ | ค่าเริ่มต้น | คำอธิบาย |
---|---|---|---|
api_key | สตริง | - | คีย์ API ของคุณสำหรับบริการ GPT ของ OpenAI |
org_id | สตริง | - | รหัสองค์กรของคุณสำหรับบริการ GPT ของ OpenAI |
คุณ_ชื่อ | สตริง | "คำถาม" | ชื่อของพรอมต์อินพุต |
gpt_name | สตริง | "การตอบสนอง" | ชื่อของการตอบสนองที่สร้างขึ้น |
เอาท์พุท_ไฟล์ | สตริง | "output.txt" | ชื่อของไฟล์ที่จะบันทึกเอาต์พุต |
แบบอย่าง | สตริง | "ข้อความ-ดาวินชี-003" | ชื่อของโมเดล GPT ที่จะใช้ |
อุณหภูมิ | ลอย | 0.0 | อุณหภูมิที่จะใช้ในการสุ่มตัวอย่าง |
max_tokens | จำนวนเต็ม | 250 | จำนวนโทเค็นสูงสุดที่จะสร้างสำหรับการตอบกลับ |
max_context_length | จำนวนเต็ม | 150 | ความยาวสูงสุดของบริบทอินพุต |
บริบท_คำหลัก_เท่านั้น | บูล | จริง | โทเค็นคีย์เวิร์ดเพื่อลดการใช้งาน API |
รักษา_new_lines | บูล | เท็จ | คงรูปแบบการตอบกลับดั้งเดิมไว้ |
Verify_internet_endpoint | สตริง | "google.com" | ที่อยู่เพื่อตรวจสอบการเชื่อมต่ออินเทอร์เน็ต |
คุณสามารถแก้ไขการตั้งค่าในไฟล์กำหนดค่าให้เหมาะกับความต้องการของคุณได้ หากไม่มีคีย์อยู่ในไฟล์กำหนดค่า ระบบจะใช้ค่าเริ่มต้น ส่วน [main] ใช้เพื่อระบุการตั้งค่าของโปรแกรม
[main]
api_key =my_api_key
พื้นที่เก็บข้อมูลนี้มีไฟล์การกำหนดค่าตัวอย่าง assets/gptty.ini.example
ที่คุณสามารถใช้เป็นจุดเริ่มต้นได้
คุณลักษณะการแชทมีอินเทอร์เฟซการแชทแบบโต้ตอบเพื่อสื่อสารกับ ChatGPT คุณสามารถถามคำถามและรับคำตอบแบบเรียลไทม์
หากต้องการเริ่มอินเทอร์เฟซการแชท ให้เรียกใช้ gptty chat
คุณยังสามารถระบุพาธของไฟล์คอนฟิกูเรชันแบบกำหนดเองได้โดยการรัน:
gptty chat --config_path /path/to/your/gptty.ini
ภายในอินเทอร์เฟซแชท คุณสามารถพิมพ์คำถามหรือคำสั่งของคุณได้โดยตรง หากต้องการดูรายการคำสั่งที่ใช้ได้ ให้พิมพ์ :help
ซึ่งจะแสดงตัวเลือกต่อไปนี้
เมตาคอมมานด์ | คำอธิบาย |
---|---|
:ช่วย | แสดงรายการคำสั่งที่ใช้ได้และคำอธิบาย |
:ล้มเลิก | ออกจาก ChatGPT |
:บันทึก | แสดงการตั้งค่าการกำหนดค่าปัจจุบัน |
:บริบท[ก:ข] | แสดงประวัติบริบท โดยระบุช่วง a และ b หรือไม่ก็ได้ อยู่ระหว่างการพัฒนา |
หากต้องการใช้คำสั่ง เพียงพิมพ์คำสั่งลงในพร้อมท์คำสั่งแล้วกด Enter ตัวอย่างเช่น ใช้คำสั่งต่อไปนี้เพื่อแสดงการตั้งค่าการกำหนดค่าปัจจุบันในเทอร์มินัล:
> :configs
api_key: SOME_KEY_HERE
org_id: org-SOME_CHARS_HERE
your_name: question
gpt_name: response
output_file: output.txt
model: text-davinci-003
temperature: 0.0
max_tokens: 250
max_context_length: 5000
คุณสามารถพิมพ์คำถามลงในข้อความแจ้งได้ตลอดเวลา และคำถามจะสร้างการตอบกลับให้กับคุณ หากคุณต้องการแชร์บริบทระหว่างคำค้นหา โปรดดูส่วนบริบทด้านล่าง
คุณลักษณะการสืบค้นช่วยให้คุณสามารถส่งคำถามเดียวหรือหลายข้อไปที่ ChatGPT และรับคำตอบได้โดยตรงในบรรทัดคำสั่ง
หากต้องการใช้คุณลักษณะการสืบค้น ให้ดำเนินการดังนี้:
gptty query --question "What is the capital of France?" --question "What is the largest mammal?"
คุณยังสามารถระบุแท็กเสริมเพื่อจัดหมวดหมู่ข้อความค้นหาของคุณได้:
gptty query --question "What is the capital of France?" --tag "geography"
คุณสามารถระบุเส้นทางไฟล์การกำหนดค่าแบบกำหนดเองได้หากจำเป็น:
gptty query --config_path /path/to/your/gptty.ini --question "What is the capital of France?"
โปรดจำไว้ว่า gptty ใช้ไฟล์การกำหนดค่า (โดยค่าเริ่มต้น gptty.ini) เพื่อจัดเก็บการตั้งค่า เช่น คีย์ API การกำหนดค่าโมเดล และเส้นทางของไฟล์เอาต์พุต ตรวจสอบให้แน่ใจว่าคุณมีไฟล์การกำหนดค่าที่ถูกต้องก่อนที่จะรันคำสั่ง gptty
ด้วยการเพิ่มแท็ก --verbose
ที่ส่วนท้ายของคำสั่งแชทและแบบสอบถามของคุณ แอปพลิเคชันจะให้ข้อมูลการแก้ไขข้อบกพร่องเพิ่มเติม รวมถึงการนับโทเค็นสำหรับแต่ละคำขอ สิ่งนี้มีประโยชน์เมื่อคุณต้องการติดตามอัตราการใช้งาน API
ด้วยการเพิ่มตัวเลือก --additional_context [some_string_here]
ให้กับคำสั่งการสืบค้นของคุณ แอปพลิเคชันจะเพิ่มสตริงใด ๆ ที่คุณส่งผ่านเป็นบริบทภายนอกเพิ่มเติมสำหรับคำถามของคุณ
ด้วยการเพิ่มแท็ก --json
ที่ส่วนท้ายของคำสั่งแบบสอบถามของคุณ แอปพลิเคชันจะข้ามการเขียนข้อความที่มนุษย์อ่านได้ไปยัง stdout และเขียนคำถามและการตอบกลับเป็นวัตถุ json แทน เช่น [{"question":QUESTION_1, "response":RESPONSE_1},{"question":QUESTION_1, "response":RESPONSE_1},...]
การเพิ่มแท็ก --quiet
ที่ส่วนท้ายของคำสั่งสืบค้น แอปพลิเคชันจะข้ามการเขียนอะไรก็ได้ไปยัง stdout แต่จะยังคงเขียนการตอบกลับไปยัง output_file
ที่กำหนดในไฟล์กำหนดค่าแอปพลิเคชัน
การแท็กข้อความสำหรับบริบทเมื่อใช้คำสั่ง chat
และ query
ในแอปนี้สามารถช่วยปรับปรุงความแม่นยำของการตอบกลับที่สร้างขึ้น นี่คือวิธีที่แอปจัดการบริบทด้วยคำสั่งย่อย chat
:
bananas
หรือ shakespeare
[tag]
ตัวอย่างเช่น หากบริบทของคำถามของคุณคือ "การทำอาหาร" คุณสามารถแท็กเป็น [cooking]
ได้ ตรวจสอบให้แน่ใจว่าใช้แท็กเดียวกันอย่างสม่ำเสมอสำหรับคำค้นหาที่เกี่ยวข้องทั้งหมด ต่อไปนี้เป็นตัวอย่างลักษณะที่ปรากฏ โดยใช้คำถามที่ติดแท็กว่า [shakespeare]
สังเกตว่าในคำถามที่สอง ไม่มีการเอ่ยชื่อ 'วิลเลียม เชคสเปียร์' เลย
เมื่อคุณใช้คำสั่งย่อย query
ให้ทำตามขั้นตอนเดียวกับที่อธิบายไว้ข้างต้น แต่แทนที่จะเติมข้อความคำถามของคุณด้วยแท็กที่คุณต้องการ ให้ใช้อ็อพชัน --tag
เพื่อรวมแท็กเมื่อส่งเคียวรีของคุณ ตัวอย่างเช่น หากบริบทของคำถามของคุณคือ "การทำอาหาร" คุณสามารถใช้:
gptty --question "some question" --tag cooking
แอปพลิเคชันจะบันทึกคำถามและการตอบกลับที่แท็กไว้ในไฟล์เอาต์พุตที่ระบุในไฟล์กำหนดค่า
คุณสามารถทำให้กระบวนการส่งคำถามหลายข้อไปยังคำสั่ง gptty query
โดยอัตโนมัติได้โดยใช้สคริปต์ทุบตี สิ่งนี้มีประโยชน์อย่างยิ่งหากคุณมีรายการคำถามเก็บไว้ในไฟล์ และต้องการประมวลผลคำถามทั้งหมดพร้อมกัน ตัวอย่างเช่น สมมติว่าคุณมีไฟล์ questions.txt
โดยมีคำถามแต่ละข้อขึ้นบรรทัดใหม่ ดังตัวอย่างด้านล่าง
What are the key differences between machine learning, deep learning, and artificial intelligence?
How do I choose the best programming language for a specific project or task?
Can you recommend some best practices for code optimization and performance improvement?
What are the essential principles of good software design and architecture?
How do I get started with natural language processing and text analysis in Python?
What are some popular Python libraries or frameworks for building web applications?
Can you suggest some resources to learn about data visualization and its implementation in Python?
What are some important concepts in cybersecurity, and how can I apply them to my projects?
How do I ensure that my machine learning models are fair, ethical, and unbiased?
Can you recommend strategies for staying up-to-date with the latest trends and advancements in technology and programming?
คุณสามารถส่งแต่ละคำถามจากไฟล์ questions.txt
ไปยังคำสั่ง gptty query
ได้โดยใช้ bash one-liner ต่อไปนี้:
xargs -d ' n ' -I {} gptty query --question " {} " < questions.txt
คลาส UniversalCompletion มอบอินเทอร์เฟซแบบรวมสำหรับการโต้ตอบกับโมเดลภาษาของ OpenAI (ส่วนใหญ่) โดยสรุปความเฉพาะเจาะจงว่าแอปพลิเคชันใช้โหมด Completion หรือ ChatCompletion แนวคิดหลักคือการอำนวยความสะดวกในการสร้าง การกำหนดค่า และการจัดการโมเดลภาษา นี่คือตัวอย่างการใช้งานบางส่วน
# First, import the UniversalCompletion class from the gptty library.
from gptty import UniversalCompletion
# Now, we instantiate a new UniversalCompletion object.
# The 'api_key' parameter is your OpenAI API key, which you get when you sign up for the API.
# The 'org_id' parameter is your OpenAI organization ID, which is also provided when you sign up.
g = UniversalCompletion ( api_key = "sk-SOME_CHARS_HERE" , org_id = "org-SOME_CHARS_HERE" )
# This connects to the OpenAI API using the provided API key and organization ID.
g . connect ()
# Now we specify which language model we want to use.
# Here, 'gpt-3.5-turbo' is specified, which is a version of the GPT-3 model.
g . set_model ( 'gpt-3.5-turbo' )
# This method is used to verify the model type.
# It returns a string that represents the endpoint for the current model in use.
g . validate_model_type ( g . model ) # Returns: 'v1/chat/completions'
# We send a request to the language model here.
# The prompt is a question, given in a format that the model understands.
# The model responds with a completion - an extension of the prompt based on what it has learned during training.
# The returned object is a representation of the response from the model.
g . fetch_response ( prompt = [{ "role" : "user" , "content" : "What is an abstraction?" }])
# Returns a JSON response with the assistant's message.