การฆ่าคนง่อยกระทำด้วย AI ??
คอมมิตทั้งหมดใน repo นี้เขียนโดย OpenCommit — ดูที่คอมมิตเพื่อดูว่า OpenCommit ทำงานอย่างไร อิโมจิและคำอธิบายการคอมมิตแบบยาวสามารถกำหนดค่าได้ โดยพื้นฐานแล้วทุกอย่างเป็นเช่นนั้น
คุณสามารถใช้ OpenCommit ได้โดยเรียกใช้ผ่าน CLI เช่นนี้ oco
2 วินาทีและการเปลี่ยนแปลงตามขั้นตอนของคุณจะได้รับข้อความที่มีความหมาย
ติดตั้ง OpenCommit ทั่วโลกเพื่อใช้ในพื้นที่เก็บข้อมูลใดๆ:
npm install -g opencommit
รับคีย์ API ของคุณจาก OpenAI หรือผู้ให้บริการ LLM อื่นๆ ที่รองรับ (เรารองรับทั้งหมด) ตรวจสอบให้แน่ใจว่าคุณเพิ่มรายละเอียดการชำระเงิน OpenAI ลงในบัญชีของคุณ เพื่อให้ API ทำงาน
ตั้งค่าคีย์เป็นการกำหนดค่า OpenCommit:
oco config set OCO_API_KEY= < your_api_key >
คีย์ API ของคุณถูกจัดเก็บไว้ในไฟล์ ~/.opencommit
config
คุณสามารถเรียก OpenCommit ด้วยคำสั่ง oco
เพื่อสร้างข้อความคอมมิตสำหรับการเปลี่ยนแปลงตามขั้นตอนของคุณ:
git add < files... >
oco
การรัน git add
เป็นทางเลือก oco
จะทำเพื่อคุณ
คุณยังสามารถรันด้วยโมเดลท้องถิ่นผ่าน ollama:
ollama run mistral
(ทำเพียงครั้งเดียวเพื่อดึงโมเดล)git add < files... >
oco config set OCO_AI_PROVIDER= ' ollama ' OCO_MODEL= ' llama3:8b '
โมเดลเริ่มต้นคือ mistral
หากคุณมี ollama ที่ตั้งค่าไว้ใน docker/ บนเครื่องอื่นที่มี GPU (ไม่ใช่ในเครื่อง) คุณสามารถเปลี่ยน URL ปลายทางเริ่มต้นได้
คุณสามารถทำได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม OCO_API_URL
ดังนี้:
oco config set OCO_API_URL= ' http://192.168.1.10:11434/api/chat '
โดยที่ 192.168.1.10 เป็นตัวอย่างของ URL ปลายทางที่คุณได้ตั้งค่าไว้
มีแฟล็กทางเลือกหลายแฟล็กที่สามารถใช้กับคำสั่ง oco
:
ลิงก์ไปยังข้อกำหนด GitMoji: https://gitmoji.dev/
แฟล็กนี้สามารถใช้ได้ก็ต่อเมื่อรายการการกำหนดค่า OCO_EMOJI
ถูกตั้งค่าเป็น true
เท่านั้น การตั้งค่าสถานะนี้อนุญาตให้ผู้ใช้ใช้อิโมจิทั้งหมดในข้อกำหนด GitMoji โดยค่าเริ่มต้น ข้อกำหนดแบบเต็มของ GitMoji จะถูกตั้งค่าเป็น false
ซึ่งมีเพียง 10 อิโมจิเท่านั้น (?✅♻️⬆️?)
นี่เป็นเพราะการจำกัดจำนวนโทเค็นที่ส่งในแต่ละคำขอ อย่างไรก็ตาม หากคุณต้องการใช้ข้อกำหนด GitMoji แบบเต็ม คุณสามารถใช้แฟล็ก --fgm
ได้
oco --fgm
การตั้งค่าสถานะนี้อนุญาตให้ผู้ใช้ยอมรับการเปลี่ยนแปลงโดยอัตโนมัติโดยไม่ต้องยืนยันข้อความยืนยันด้วยตนเอง สิ่งนี้มีประโยชน์สำหรับผู้ใช้ที่ต้องการปรับปรุงกระบวนการคอมมิตและหลีกเลี่ยงขั้นตอนเพิ่มเติม หากต้องการใช้แฟล็กนี้ คุณสามารถรันคำสั่งต่อไปนี้:
oco --yes
สร้างไฟล์ .env
และเพิ่มตัวแปรการกำหนดค่า OpenCommit ดังนี้:
...
OCO_AI_PROVIDER = <openai (default), anthropic, azure, ollama, gemini, flowise>
OCO_API_KEY = <your OpenAI API token> // or other LLM provider API token
OCO_API_URL = <may be used to set proxy path to OpenAI api>
OCO_TOKENS_MAX_INPUT = <max model token limit (default: 4096)>
OCO_TOKENS_MAX_OUTPUT = <max response tokens (default: 500)>
OCO_DESCRIPTION = <postface a message with ~3 sentences description of the changes>
OCO_EMOJI = <boolean, add GitMoji>
OCO_MODEL = <either 'gpt-4o', 'gpt-4', 'gpt-4-turbo', 'gpt-3.5-turbo' (default), 'gpt-3.5-turbo-0125', 'gpt-4-1106-preview', 'gpt-4-turbo-preview' or 'gpt-4-0125-preview' or any Anthropic or Ollama model or any string basically, but it should be a valid model name>
OCO_LANGUAGE = <locale, scroll to the bottom to see options>
OCO_MESSAGE_TEMPLATE_PLACEHOLDER = <message template placeholder, default: ' $msg '>
OCO_PROMPT_MODULE = <either conventional-commit or @commitlint, default: conventional-commit>
OCO_ONE_LINE_COMMIT = <one line commit message, default: false>
การกำหนดค่าส่วนกลางเหมือนกับการกำหนดค่าในเครื่อง แต่จะถูกจัดเก็บไว้ในไฟล์กำหนดค่าส่วนกลาง ~/.opencommit
และตั้งค่าด้วยคำสั่ง oco config set
เช่น oco config set OCO_MODEL=gpt-4o
การกำหนดค่าในเครื่องยังคงมีลำดับความสำคัญมากกว่าการกำหนดค่าทั่วโลก แต่คุณสามารถตั้ง OCO_MODEL
และ OCO_LOCALE
ทั่วโลกและตั้งค่าการกำหนดค่าในเครื่องสำหรับ OCO_EMOJI
และ OCO_DESCRIPTION
ต่อ repo ซึ่งสะดวกกว่า
เพียงตั้งค่าตัวแปรใดๆ ข้างต้นดังนี้:
oco config set OCO_MODEL=gpt-4o-mini
กำหนดค่า GitMoji เพื่อนำหน้าข้อความ
oco config set OCO_EMOJI=true
หากต้องการลบคำนำอิโมจิ:
oco config set OCO_EMOJI=false
ตัวเลือกการกำหนดค่าอื่นๆ ทำงานเหมือนกัน
คุณสามารถตั้งค่าการกำหนดค่า OCO_WHY
ให้เป็น true
เพื่อให้ OpenCommit ส่งออกคำอธิบายสั้น ๆ ว่าเหตุใดการเปลี่ยนแปลงจึงเกิดขึ้นหลังจากข้อความคอมมิต ค่าเริ่มต้นเป็น false
เพื่อให้การดำเนินการนี้ถูกต้อง เราต้องจัดเก็บ 'ไฟล์ใดบ้างที่ทำ' ไว้ในดัชนีหรือการฝังบางประเภท และทำการค้นหา (เช่น RAG) เพื่อหาข้อความคอมไพล์ที่ถูกต้อง หากคุณรู้สึกอยากแสดงความคิดเห็นในตั๋ว #398 นี้ แล้วไปต่อจากจุดนั้นด้วยกันเถอะ
oco config set OCO_WHY=true
ตามค่าเริ่มต้น OpenCommit จะใช้รุ่น gpt-4o-mini
คุณอาจเปลี่ยนไปใช้ gpt-4o ซึ่งทำงานได้ดีกว่า แต่ราคาแพงกว่า ?
oco config set OCO_MODEL=gpt-4o
หรือเป็นตัวเลือกที่ถูกกว่า:
oco config set OCO_MODEL=gpt-3.5-turbo
ตามค่าเริ่มต้น OpenCommit จะใช้ OpenAI
คุณสามารถเปลี่ยนไปใช้บริการ Azure OpenAI หรือ Flowise หรือ Ollama
oco config set OCO_AI_PROVIDER=azure OCO_API_KEY= < your_azure_api_key > OCO_API_URL= < your_azure_endpoint >
oco config set OCO_AI_PROVIDER=flowise OCO_API_KEY= < your_flowise_api_key > OCO_API_URL= < your_flowise_endpoint >
oco config set OCO_AI_PROVIDER=ollama OCO_API_KEY= < your_ollama_api_key > OCO_API_URL= < your_ollama_endpoint >
หากต้องการระบุภาษาที่ใช้ในการสร้างข้อความคอมมิตแบบโกลบอล:
# de, German, Deutsch
oco config set OCO_LANGUAGE=de
oco config set OCO_LANGUAGE=German
oco config set OCO_LANGUAGE=Deutsch
# fr, French, française
oco config set OCO_LANGUAGE=fr
oco config set OCO_LANGUAGE=French
oco config set OCO_LANGUAGE=française
การตั้งค่าภาษาเริ่มต้นคือ ภาษาอังกฤษ ภาษาที่มีอยู่ทั้งหมดจะแสดงรายการอยู่ในโฟลเดอร์ i18n
พรอมต์สำหรับการกดไปที่ git จะเปิดไว้ตามค่าเริ่มต้น แต่หากคุณต้องการปิด ให้ใช้:
oco config set OCO_GITPUSH=false
และจะออกทันทีหลังจากยืนยันการคอมมิตโดยไม่ต้องถามว่าคุณต้องการพุชไปที่รีโมตหรือไม่
@commitlint
OpenCommit ให้คุณเลือกโมดูลพร้อมท์ที่ใช้ในการสร้างข้อความคอมมิต ตามค่าเริ่มต้น OpenCommit จะใช้ตัวสร้างข้อความคอมมิตแบบเดิมๆ อย่างไรก็ตาม คุณสามารถเปลี่ยนไปใช้โมดูลพร้อมท์ @commitlint
ได้หากต้องการ ตัวเลือกนี้ช่วยให้คุณสร้างข้อความคอมมิตที่เกี่ยวข้องกับการกำหนดค่าในเครื่อง
คุณสามารถตั้งค่าตัวเลือกนี้ได้โดยการรันคำสั่งต่อไปนี้:
oco config set OCO_PROMPT_MODULE= < module >
แทนที่ <module>
ด้วย conventional-commit
หรือ @commitlint
หากต้องการเปลี่ยนไปใช้โมดูลพรอมต์ '@commitlint
ให้รัน:
oco config set OCO_PROMPT_MODULE=@commitlint
หากต้องการเปลี่ยนกลับไปใช้ตัวสร้างข้อความคอมมิตแบบธรรมดาที่เป็นค่าเริ่มต้น ให้รัน:
oco config set OCO_PROMPT_MODULE=conventional-commit
@commitlint
การรวมระหว่าง @commitlint
และ OpenCommit จะทำโดยอัตโนมัติในครั้งแรกที่ OpenCommit ทำงานโดยตั้งค่า OCO_PROMPT_MODULE
เป็น @commitlint
อย่างไรก็ตาม หากคุณต้องการบังคับตั้งค่าหรือรีเซ็ตการกำหนดค่าสำหรับ @commitlint
คุณสามารถเรียกใช้คำสั่งต่อไปนี้:
oco commitlint force
หากต้องการดูการกำหนดค่าที่สร้างขึ้นสำหรับ @commitlint
คุณสามารถใช้คำสั่งนี้:
oco commitlint get
สิ่งนี้ช่วยให้คุณมั่นใจได้ว่าการกำหนดค่าได้รับการตั้งค่าตามต้องการ
นอกจากนี้ การรวมจะสร้างไฟล์ชื่อ .opencommit-commitlint
ซึ่งมีพร้อมต์ที่ใช้สำหรับการกำหนดค่า @commitlint
ในเครื่อง คุณสามารถแก้ไขไฟล์นี้เพื่อปรับแต่งข้อความยืนยันตัวอย่างที่สร้างโดย OpenAI สิ่งนี้ให้ความยืดหยุ่นแก่คุณในการปรับเปลี่ยนตามความต้องการหรือแนวทางโครงการของคุณ
OpenCommit สร้างไฟล์ชื่อ .opencommit-commitlint
ในไดเรกทอรีโปรเจ็กต์ของคุณซึ่งมีพร้อมต์ที่ใช้สำหรับการกำหนดค่า @commitlint
ในเครื่อง คุณสามารถแก้ไขไฟล์นี้เพื่อปรับแต่งข้อความยืนยันตัวอย่างที่สร้างโดย OpenAI หากการกำหนดค่า @commitlint
ในเครื่องเปลี่ยนแปลง ไฟล์นี้จะได้รับการอัปเดตในครั้งถัดไปที่ OpenCommit ทำงาน
สิ่งนี้ช่วยให้คุณควบคุมข้อความคอมมิตที่สร้างขึ้นได้มากขึ้น ทำให้สามารถปรับแต่งให้สอดคล้องกับแบบแผนของโปรเจ็กต์ของคุณได้
สามารถใช้คำสั่ง opencommit
หรือ oco
แทนคำสั่ง git commit -m "${generatedMessage}"
ได้ ซึ่งหมายความว่าแฟล็กปกติใดๆ ที่ใช้กับคำสั่ง git commit
จะถูกนำไปใช้เมื่อใช้ opencommit
หรือ oco
ด้วย
oco --no-verify
แปลเป็น:
git commit -m " ${generatedMessage} " --no-verify
หากต้องการรวมข้อความไว้ในข้อความที่สร้างขึ้น คุณสามารถใช้ฟังก์ชันเทมเพลตได้ เช่น:
oco ' #205: $msg’
opencommit ตรวจสอบตัวยึดตำแหน่งในพารามิเตอร์ ทำให้คุณสามารถผนวกข้อมูลเพิ่มเติมก่อนและหลังตัวยึดตำแหน่ง เช่น ปัญหาที่เกี่ยวข้องหรือคำขอดึง ในทำนองเดียวกัน คุณมีตัวเลือกในการปรับแต่งรายการการกำหนดค่า OCO_MESSAGE_TEMPLATE_PLACEHOLDER ได้ เช่น ลดความซับซ้อนให้เป็น $m!"
คุณลักษณะ OCO_MESSAGE_TEMPLATE_PLACEHOLDER
ในเครื่องมือ opencommit
ช่วยให้ผู้ใช้สามารถฝังข้อความที่กำหนดเองภายในข้อความคอมมิตที่สร้างขึ้นโดยใช้ฟังก์ชันเทมเพลต การกำหนดค่านี้ได้รับการออกแบบมาเพื่อเพิ่มความยืดหยุ่นและความสามารถในการปรับแต่งข้อความคอมมิต ทำให้ผู้ใช้สามารถรวมข้อมูลที่เกี่ยวข้องภายในคอมมิตโดยตรงได้ง่ายขึ้น
ในโค้ดเบสของเรา การใช้งานคุณลักษณะนี้สามารถพบได้ในส่วนต่อไปนี้:
commitMessage = messageTemplate . replace (
config . OCO_MESSAGE_TEMPLATE_PLACEHOLDER ,
commitMessage
) ;
บรรทัดนี้รับผิดชอบในการแทนที่ตัวยึดตำแหน่งใน messageTemplate
ด้วย commitMessage
จริง
ตัวอย่างเช่น การใช้คำสั่ง oco '$msg #205'
ผู้ใช้สามารถใช้ประโยชน์จากคุณลักษณะนี้ได้ รหัสที่ให้มาแสดงถึงกลไกแบ็กเอนด์ของคำสั่งดังกล่าว เพื่อให้แน่ใจว่าตัวยึดตำแหน่งจะถูกแทนที่ด้วยข้อความยืนยันที่เหมาะสม
เมื่อผู้ใช้สร้างข้อความคอมมิตที่ต้องการแล้ว ก็สามารถคอมมิตต่อโดยใช้ข้อความที่สร้างขึ้นได้ ด้วยการทำความเข้าใจศักยภาพทั้งหมดของคุณลักษณะและรายละเอียดการใช้งาน ผู้ใช้จะสามารถใช้ข้อความที่สร้างขึ้นสำหรับการดำเนินการของตนได้อย่างมั่นใจ
คุณสามารถลบไฟล์ไม่ให้ถูกส่งไปยัง OpenAI ได้โดยการสร้างไฟล์ . .opencommitignore
ตัวอย่างเช่น:
path/to/large-asset.zip
**/*.jpg
ซึ่งจะช่วยป้องกันไม่ให้ opencommit อัปโหลดสิ่งประดิษฐ์และไฟล์ขนาดใหญ่
ตามค่าเริ่มต้น opencommit จะละเว้นไฟล์ที่ตรงกัน: *-lock.*
และ *.lock
คุณสามารถตั้งค่า OpenCommit เป็น Git prepare-commit-msg
hook ได้ Hook ทำงานร่วมกับ IDE Source Control ของคุณและช่วยให้คุณสามารถแก้ไขข้อความก่อนดำเนินการได้
วิธีตั้งตะขอ:
oco hook set
หากต้องการยกเลิกการตั้งค่าเบ็ด:
oco hook unset
วิธีใช้ตะขอ:
git add < files... >
git commit
หรือปฏิบัติตามกระบวนการของคุณสมบัติ IDE Source Control ของคุณ เมื่อเรียกใช้คำสั่ง git commit
— OpenCommit จะรวมเข้ากับโฟลว์
ขณะนี้ OpenCommit พร้อมใช้งานในรูปแบบ GitHub Action ซึ่งจะปรับปรุงข้อความคอมมิตใหม่ทั้งหมดโดยอัตโนมัติเมื่อคุณกดไปที่ระยะไกล!
นี่เป็นวิธีที่ดีหากคุณต้องการให้แน่ใจว่าการคอมมิตทั้งหมดในสาขาพื้นที่เก็บข้อมูลทั้งหมดของคุณมีความหมายและไม่ง่อยเหมือน fix1
หรือ done2
สร้างไฟล์ .github/workflows/opencommit.yml
โดยมีเนื้อหาดังนี้:
name : ' OpenCommit Action '
on :
push :
# this list of branches is often enough,
# but you may still ignore other public branches
branches-ignore : [main master dev development release]
jobs :
opencommit :
timeout-minutes : 10
name : OpenCommit
runs-on : ubuntu-latest
permissions : write-all
steps :
- name : Setup Node.js Environment
uses : actions/setup-node@v2
with :
node-version : ' 16 '
- uses : actions/checkout@v3
with :
fetch-depth : 0
- uses : di-sukharev/[email protected]
with :
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
env :
# set openAI api key in repo actions secrets,
# for openAI keys go to: https://platform.openai.com/account/api-keys
# for repo secret go to: <your_repo_url>/settings/secrets/actions
OCO_API_KEY : ${{ secrets.OCO_API_KEY }}
# customization
OCO_TOKENS_MAX_INPUT : 4096
OCO_TOKENS_MAX_OUTPUT : 500
OCO_OPENAI_BASE_PATH : ' '
OCO_DESCRIPTION : false
OCO_EMOJI : false
OCO_MODEL : gpt-4o
OCO_LANGUAGE : en
OCO_PROMPT_MODULE : conventional-commit
แค่นั้นแหละ. ตอนนี้เมื่อคุณพุชไปที่สาขาใดก็ได้ใน repo ของคุณ — คอมมิตใหม่ทั้งหมดได้รับการปรับปรุงโดย AI ที่ไม่เคยเบื่อหน่ายของคุณ
ตรวจสอบให้แน่ใจว่าคุณได้แยกสาขาการทำงานร่วมกันแบบสาธารณะ ( main
, dev
etc
) ใน branches-ignore
ดังนั้น OpenCommit จะไม่ทำการคอมมิตที่นั่นในขณะที่ปรับปรุงข้อความ
การเปลี่ยนแปลงการรีบูตแบบโต้ตอบ ( rebase -i
) จะกระทำ 'SHA ดังนั้นประวัติการคอมมิตในระยะไกลจะแตกต่างจากประวัติสาขาในพื้นที่ของคุณ นี่เป็นเรื่องปกติหากคุณทำงานในสาขาเพียงลำพัง แต่อาจไม่สะดวกสำหรับผู้ร่วมงานคนอื่นๆ
คุณชำระเงินสำหรับคำขอ OpenAI API ด้วยตัวคุณเอง
OpenCommit จัดเก็บคีย์ของคุณไว้ในเครื่อง
OpenCommit ตามค่าเริ่มต้นจะใช้รุ่น 3.5 เทอร์โบ ซึ่งไม่ควรเกิน 0.10 ดอลลาร์ต่อวันทำงานชั่วคราว
คุณอาจเปลี่ยนไปใช้ gpt-4 ดีกว่า แต่แพงกว่า