Ruka hadi maudhui makuu
Mafunzo ya AI

Endesha Mawakala wa Usimbaji Bila Kupoteza Data katika Mabomba ya Shell kwa UNCUT

Mafunzo haya yanaeleza jinsi ya kusakinisha na kusanidi UNCUT, mfumo mdogo wa kuendesha mawakala wa usimbaji bila kiolesura kwa vituo vya kazi, kazi za CI, kontena na majaribio. Utajifunza kuendesha vidokezo, kuchakata ingizo linalopitishwa kupitia bomba, kutumia zana kwa usalama, kuendelea na vipindi vya JSONL, kutumia matukio ya NDJSON, na kushughulikia vikomo vya watoa huduma bila kukata data kimya kimya.

Endesha Mawakala wa Usimbaji Bila Kupoteza Data katika Mabomba ya Shell kwa UNCUT

UNCUT ni nini?

UNCUT ni mfumo wa kuendesha mawakala wa usimbaji usio na kiolesura, ulioundwa kwa ajili ya mabomba ya shell, kazi za CI, kontena na majaribio ya mawakala. Husambazwa kama faili dogo la Go lililounganishwa tuli na huwasiliana kupitia ingizo na towe la kawaida. Hauna kiolesura cha mtumiaji cha terminali, telemetry, mfumo wa programu-jalizi, mawakala wa chinichini, majaribio ya kiotomatiki, wala kubana muktadha kwa siri.

Tabia yake kuu ni mkataba wa usafirishaji usio na upotevu. UNCUT hutuma mazungumzo yote katika kila ombi la modeli na haikati, kufupisha, kuondoa au kuandika upya vidokezo halali vya UTF-8, ujumbe uliohifadhiwa, maudhui ya faili au matokeo ya amri. Mtoa huduma akisitisha jibu kwa sababu ya kikomo cha matokeo, UNCUT huripoti kosa badala ya kuchukulia jibu lililokatika kuwa jibu lililofanikiwa.

Muhimu: Usafirishaji usio na upotevu hauongezi ukubwa wa dirisha la muktadha la modeli wala kudhibiti uchakataji wa upande wa mtoa huduma. Mtoa huduma bado anaweza kukataa ombi lililozidi ukubwa unaoruhusiwa. UNCUT hufanya kosa hilo lionekane badala ya kuondoa maudhui kimya kimya.

Vipengele muhimu

  • Muktadha kamili: Kila ujumbe uliohifadhiwa na matokeo ya zana hutumwa katika kila ombi la modeli.
  • Uendeshaji usio na kiolesura: Maandishi ya mwisho huandikwa kwenye stdout, huku --json ikitoa matukio yaliyopangwa ya NDJSON.
  • Faili la kubebeka: Toleo hutolewa kwa Linux, macOS na Windows kwenye amd64 na arm64.
  • Itifaki isiyofungamana na mtoa huduma: UNCUT hufanya kazi na vituo vya Chat Completions vinavyoendana na OpenAI, ikiwemo seva za ndani.
  • Vipindi vinavyoweza kuendelea: Faili za JSONL za kuongeza pekee huhifadhi ujumbe kamili na matokeo ya zana.
  • Zana nne zenye mwelekeo: Wakala anaweza kusoma faili, kuandika faili, kubadilisha maandishi halisi na kuendesha amri.
  • Makosa yaliyo wazi: UTF-8 isiyo sahihi, vipindi vilivyoharibika, kukatwa kwa matokeo na kuishiwa kwa kikomo cha hatua husababisha makosa badala ya uokoaji wa kimya kimya.

Sakinisha UNCUT

Linux

Pakua faili la toleo linalolingana na usanifu wako. Badilisha amd64 kuwa arm64 kwenye mfumo wa ARM64.

VERSION=0.1.1
ARCH=amd64
curl -fSLo uncut "https://github.com/Balanov/uncut/releases/download/v${VERSION}/uncut-linux-${ARCH}"
mkdir -p "$HOME/.local/bin"
install -m 0755 uncut "$HOME/.local/bin/uncut"
export PATH="$HOME/.local/bin:$PATH"
uncut --version

Ongeza $HOME/.local/bin kwenye usanidi wako wa kudumu wa PATH ikiwa bado haipo.

macOS

Mifumo ya Apple Silicon kwa kawaida hutumia arm64; Mac za Intel hutumia amd64.

VERSION=0.1.1
ARCH=arm64
curl -fSLo uncut "https://github.com/Balanov/uncut/releases/download/v${VERSION}/uncut-darwin-${ARCH}"
mkdir -p "$HOME/.local/bin"
install -m 0755 uncut "$HOME/.local/bin/uncut"
export PATH="$HOME/.local/bin:$PATH"
uncut --version

Windows PowerShell

$Version = "0.1.1"
$Arch = "amd64"
$Dest = "$env:LOCALAPPDATA\Programs\UNCUT"
New-Item -ItemType Directory -Force $Dest | Out-Null
Invoke-WebRequest -Uri "https://github.com/Balanov/uncut/releases/download/v$Version/uncut-windows-$Arch.exe" -OutFile "$Dest\uncut.exe"
$env:Path = "$Dest;$env:Path"
uncut --version

Tumia arm64 badala ya amd64 kwenye Windows ARM64. Ongeza saraka lengwa kwenye PATH ya mtumiaji wako ili amri ipatikane katika vipindi vya baadaye vya PowerShell.

Sakinisha au jenga kwa Go

Ikiwa Go 1.26 au toleo jipya zaidi limesakinishwa, sakinisha toleo jipya zaidi moja kwa moja:

go install github.com/Balanov/uncut/cmd/uncut@latest

Vinginevyo, jenga nakala ya hazina:

git clone https://github.com/Balanov/uncut.git
cd uncut
go build -trimpath -ldflags="-s -w" -o bin/uncut ./cmd/uncut

Kwenye Windows, tumia bin/uncut.exe kama njia ya matokeo.

Thibitisha faili za binary zilizopakuliwa

Kila toleo linajumuisha faili la checksums.txt. Mfano ufuatao unathibitisha upakuaji wa Linux amd64:

VERSION=0.1.1
ARCH=amd64
curl -fSLO "https://github.com/Balanov/uncut/releases/download/v${VERSION}/checksums.txt"
grep "uncut-linux-${ARCH}$" checksums.txt | sha256sum -c -

Faili za binary za toleo kwa sasa hazijasainiwa kwa msimbo, kwa hiyo Gatekeeper au SmartScreen inaweza kuonyesha onyo. Thibitisha checksum ya SHA-256 kabla ya kuruhusu faili linalotekelezeka. Baada ya kuthibitisha kwenye macOS, kizuizi cha karantini kinaweza kuondolewa kutoka kwa faili lililosakinishwa pekee:

xattr -d com.apple.quarantine "$HOME/.local/bin/uncut"

Sanidi mtoa huduma wa modeli

UNCUT inahitaji kitambulisho cha modeli. Kwa huduma inayopangishwa, kwa kawaida pia inahitaji ufunguo wa API. Weka thamani zote mbili kisha endesha kidokezo:

export UNCUT_API_KEY="your-api-key"
export UNCUT_MODEL="your-model-id"
uncut "Inspect this repository and fix the failing tests"

Kituo chaguo-msingi ni https://api.openai.com/v1, isipokuwa UNCUT_BASE_URL au OPENAI_BASE_URL iwe imewekwa. Ili kutumia kituo kingine kinachoendana na OpenAI, toa URL yake ya msingi:

export UNCUT_BASE_URL="https://openrouter.ai/api/v1"

UNCUT pia hutumia OPENAI_API_KEY ikiwa UNCUT_API_KEY haipo. Kwa chaguo-msingi, ufunguo hauhitajiki kwa vituo vya ndani.

Unganisha na Ollama ya ndani

Mfano wa README uliothibitishwa hutumia modeli ya qwen3:8b iliyosakinishwa na yenye uwezo wa kutumia zana:

ollama pull qwen3:8b
export UNCUT_BASE_URL="http://localhost:11434/v1"
export UNCUT_MODEL="qwen3:8b"
uncut "Explain this repository"

Badilisha mfano huo kwa modeli iliyosakinishwa kwenye mashine yako. Ubora na tabia ya miito ya zana hutegemea modeli iliyochaguliwa.

Endesha kazi yako ya kwanza ya usimbaji

Anzisha UNCUT kutoka kwenye hazina unayotaka wakala aikague. Kwa chaguo-msingi, saraka ya sasa inakuwa nafasi ya kazi kwa zana za faili na amri za shell.

cd path/to/project
uncut "Kagua hazina hii, endesha majaribio, na urekebishe hitilafu"

Wakati wa kazi, modeli inaweza kuita zana nne:

  • read_file husoma faili zima la maandishi la UTF-8.
  • write_file huandika maudhui kamili na kuunda saraka za mzazi zinazokosekana.
  • replace hubadilisha tukio moja kamili. Hushindwa ikiwa haipati ulinganifu wowote au ikipata zaidi ya mmoja.
  • run_command hurejesha msimbo wa kutoka pamoja na stdout na stderr zilizounganishwa kikamilifu.

Njia za zana za faili lazima zibaki ndani ya nafasi ya kazi. Kwenye Unix, amri huendeshwa kupitia /bin/sh -c. Kwenye Windows, huendeshwa kupitia cmd.exe /D /S /C.

Tumia UNCUT katika mabomba ya Unix

UNCUT huambatisha ingizo linalopitishwa kwenye prompt bila kubadilisha chochote. Hii huifanya ifae kwa ukaguzi na uchanganuzi wa kumbukumbu bila kuunda faili za muda.

git diff | uncut "Kagua tofauti hii. Usihariri faili."
cat failing-test.log | uncut "Tafuta chanzo kinachowezekana"

Ingizo lazima liwe UTF-8 halali. UNCUT hukataa ingizo batili badala ya kubadilisha baiti kimya kimya. Pia hukataa faili za mfumo jozi. Kwenye Windows, sanidi zana zitumie UTF-8 inapowezekana kwa sababu baadhi ya amri hutoa matokeo ya UTF-16 au ya ukurasa wa msimbo.

Tumia matukio yaliyopangwa ya NDJSON

Tumia --json unapounganisha UNCUT na hati, mifumo ya CI, au miundombinu mingine ya mawakala:

uncut --json "Endesha majaribio na urekebishe hitilafu"

Mtiririko wa matukio unaweza kuwa na aina zifuatazo za rekodi:

  • user kwa ujumbe wa mtumiaji.
  • assistant kwa ujumbe wa msaidizi na miito kamili ya zana.
  • assistant_meta kwa maelezo ya matumizi na sababu za kukamilika.
  • tool kwa matokeo kamili ya zana.
  • done wakati uendeshaji unakamilika kwa mafanikio.
  • error wakati uendeshaji unashindwa.

UNCUT hutumia Chat Completions zisizo za utiririshaji. Inaauni maandishi na miito ya zana, lakini haiingizi picha.

Unda na endeleza vipindi

Kipindi ni rekodi ya JSONL ya kuongeza pekee iliyo na mazungumzo kamili na matokeo ya zana. Anzisha kazi kwa faili la kipindi, kisha tumia tena faili hilo kuendelea:

uncut --session .uncut/work.jsonl "Anza urekebishaji wa muundo"
uncut --session .uncut/work.jsonl "Endelea na majaribio"

Ikiwa faili tayari lipo, UNCUT hupakia historia yake yote. Rekodi mpya huongezwa na kusawazishwa baada ya kila hatua. Rekodi batili au zisizokamilika husababisha hitilafu iliyo wazi na hazitupwi ili kulazimisha kipindi kipakiwe.

Faili za vipindi zinaweza kuwa na msimbo wa chanzo, matokeo ya amri, vitambulisho vya kuingia, au siri nyingine. Zilinde ipasavyo na epuka kuziweka kwenye udhibiti wa matoleo.

Dhibiti nafasi ya kazi na mzunguko wa wakala

Tumia --cwd kuendesha kazi kwenye nafasi ya kazi isiyo saraka ya sasa:

uncut --cwd ./services/api "Endesha majaribio ya API na ueleze hitilafu zozote"

Alama kadhaa hudhibiti tabia ya ombi na mzunguko:

  • --max-steps <n> huweka kikomo cha miito ya modeli. Chaguo-msingi ni 32.
  • --max-tokens <n> huweka kikomo mahususi cha matokeo kutoka kwa mtoa huduma badala ya kutumia chaguo-msingi la mtoa huduma.
  • --request-timeout <duration> hubadilisha muda wa kusubiri wa kila ombi kutoka chaguo-msingi cha 10m. Thamani ya 0 huzima muda huo wa kusubiri.
  • --no-agents huizuia UNCUT kusoma AGENTS.md ya nafasi ya kazi.

Kwa chaguo-msingi, UNCUT husoma AGENTS.md yote kutoka mzizi wa nafasi ya kazi na kuiongeza kwenye prompt ya mfumo. Wakati wa kuendeleza kipindi, hutumia ujumbe wa awali wa mfumo uliohifadhiwa badala ya kuuunda upya kutoka kwenye faili la sasa.

Elewa misimbo ya kutoka

Misimbo ya kutoka inayotegemeka huifanya UNCUT ifae katika otomatiki:

  • 0 humaanisha wakala ametoa jibu la mwisho lenye mafanikio.
  • 1 huonyesha hitilafu ya mtoa huduma, ingizo/tokeo, kipindi, au utekelezaji.
  • 2 huonyesha matumizi batili ya mstari wa amri.
  • 3 humaanisha mtoa huduma amerudisha finish_reason=length au max_tokens; UNCUT imekataa jibu lisilokamilika.
  • 4 humaanisha idadi ya juu zaidi ya hatua imefikiwa kabla ya jibu la mwisho.

Kwenye CI, chukulia kila msimbo usio wa sifuri kuwa uendeshaji ulioshindwa na kagua stderr au tukio la mwisho la error kutoka kwa --json.

Vidokezo vya kina

Chagua vikomo kwa makusudi

Kwa kuwa UNCUT haipunguzi muktadha, vipindi virefu na matokeo makubwa ya zana vinaweza hatimaye kuzidi dirisha la muktadha la modeli. Anzisha kipindi kipya inapofaa, chagua mtoa huduma mwenye uwezo wa kutosha wa muktadha, na weka --max-tokens tu unapofahamu kikomo cha majibu cha mtoa huduma. UNCUT haitaunganisha majibu yasiyokamilika wala kujaribu tena kiotomatiki.

Weka uendeshaji wa kiotomatiki usomeke na mashine

Tumia --json kwa CI na miunganisho badala ya kuchanganua maandishi ya mazungumzo ya jibu la mwisho. Matukio tofauti ya metadata huwawezesha watumiaji kukagua sababu za kukamilika na matumizi bila kuyachanganya na maudhui ya msaidizi.

Tumia mazingira yaliyotengwa kwa kazi zisizoaminika

UNCUT si sanduku la mchanga. Ingawa zana za faili zinatekeleza mipaka ya nafasi ya kazi, run_command huendeshwa kwa ruhusa za mtumiaji wa sasa wa mfumo wa uendeshaji na haizuiliwi na ukaguzi huo wa faili. Endesha prompt au hazina zisizoaminika kwenye kontena la kutupwa baada ya matumizi au mazingira mengine yaliyotengwa. Kagua mabadiliko ya faili na rekodi za vipindi wewe mwenyewe.

Hakuna madirisha ya maidhinisho, commit za kiotomatiki, majaribio ya kiotomatiki, au mizunguko fiche ya kurejesha hali. Hii hufanya tabia ya utekelezaji iwe ya moja kwa moja, lakini pia inamaanisha kuwa una jukumu la kuchagua mazingira yenye vizuizi vinavyofaa.

Thibitisha mkataba wa kutopoteza data ndani ya mazingira yako

Hifadhi ya msimbo inajumuisha hati ya uthibitisho inayoweza kurudiwa, inayotumia binary halisi na mtoa huduma wa ndani. Inahitaji Python 3 pekee, bila ufunguo wa API, modeli ya nje, au kifurushi cha Python cha mtu mwingine:

go build -o bin/uncut ./cmd/uncut
python bench/proof.py ./bin/uncut

Uthibitisho hukagua usafirishaji kamili wa faili kubwa na matokeo ya amri, kuendelea tena kwa usahihi wa kipindi, tabia ya uhariri, hitilafu zilizo wazi za ukataji, vikomo vya hatua, na ushughulikiaji wa UTF-8 isiyo sahihi. Ukaguzi huu hupima tabia ya usafirishaji badala ya ubora wa modeli. Matokeo yaliyorekodiwa na maelekezo ya kurudia yanapatikana katika hifadhi ya UNCUT.

Endesha ukaguzi wa uundaji

Unapobadilisha UNCUT yenyewe, fomati, jaribu, na kagua msimbo wa Go:

gofmt -w cmd internal
go test -count=1 ./...
go vet ./...

Hitimisho

UNCUT hutoa njia ndogo na iliyo wazi kwa makusudi ya kuendesha mawakala wa usimbaji kutoka kwenye vituo vya amri, mabomba ya uchakataji, kontena, na mifumo ya CI. Usafirishaji wa ujumbe kamili, ushughulikiaji wa wazi wa hitilafu, vipindi vinavyoweza kuendelezwa, matukio yaliyopangwa, na zana zake nne zilizojengewa ndani huifanya iwe muhimu wakati upunguzaji fiche wa muktadha haukubaliki. Sanidi kituo kinachooana na OpenAI, anza katika nafasi ya kazi iliyotengwa, na tumia vipindi au matokeo ya NDJSON unapohitaji otomatiki inayoweza kurudiwa.