Ruka hadi maudhui makuu
Mafunzo ya AI

Toa na Urekebishe Gumzo Zako za Msaidizi wa Usimbaji wa AI kwa Python

Jifunze jinsi ya kutumia Utoaji wa Data kutoka kwa Wasaidizi wa Usimbaji wa AI kugundua historia za ndani za gumzo kutoka Claude Code, Codex CLI, Cursor, Windsurf, Trae, Continue, Gemini CLI, OpenCode, Cline, Roo Code na Aider, kisha uzibadilishe kuwa JSONL iliyosanifishwa kwa ajili ya kuhifadhi nakala, uchanganuzi au mafunzo.

Toa na Urekebishe Gumzo za Msaidizi wa Usimbaji wa AI kwa Python

Kile mradi huu hufanya

AI Coding Assistant Data Extraction hukusanya mazungumzo yaliyohifadhiwa kwenye kompyuta yako kutoka kwa wasaidizi kadhaa wa uandishi wa msimbo, kisha kuyaandika katika muundo thabiti wa JSONL. Ni muhimu kwa kuhifadhi nakala ya historia ya mazungumzo, kufanya uchanganuzi binafsi, kuandaa data ya fine-tuning, au kuhifadhi mazungumzo kabla programu haijafuta hifadhidata yake ya ndani.

Zana hii hutambua kiotomatiki maeneo ya hifadhi kwenye macOS, Linux na Windows. Inaweza kusoma faili za JSONL, faili za vipindi vya JSON, nakala za Markdown, hifadhidata za SQLite na miti ya hifadhi ya JSON iliyopachikwa bila kuhitaji utegemezi wa Python wa wahusika wengine.

Vyanzo vinavyotumika

Mradi huu kwa sasa unaunga mkono zana zifuatazo:

  • Claude Code: Faili za vipindi vya JSONL zilizo chini ya ~/.claude/projects/.
  • Codex CLI: Faili za uendeshaji za JSONL zilizo chini ya ~/.codex/sessions/.
  • Cursor: Faili za SQLite state.vscdb katika hifadhi ya jumla na ya nafasi za kazi.
  • Windsurf: Hifadhi ya SQLite inayochanganuliwa kwa mbinu ya makadirio bora.
  • Trae: Hifadhi ya SQLite na JSONL inayochanganuliwa kwa mbinu ya makadirio bora.
  • Continue: Faili za JSON katika ~/.continue/sessions/.
  • Gemini CLI: Faili za mazungumzo ya JSON zilizo chini ya ~/.gemini/tmp/.
  • OpenCode: Miti ya vipindi, ujumbe na sehemu katika JSON.
  • Cline na Roo Code: Folda za kazi za JSON zinazohifadhiwa na kiendelezi cha kihariri.
  • Aider: Nakala za Markdown zinazoitwa .aider.chat.history.md ndani ya saraka za miradi.

Usakinishaji na usanidi

Clone au pakua hazina, kisha endesha hati zake kutoka kwenye mzizi wa mradi. Kitoaji hutumia maktaba ya kawaida ya Python pekee. Python 3.9 au mpya zaidi inahitajika, huku Python 3.10 au mpya zaidi ikipendekezwa.

python --version

Hakuna mazingira ya mtandaoni au usakinishaji wa utegemezi unaohitajika kwa kitoaji kikuu. Kabla ya kutoa data, hakikisha kuwa zana husika za uandishi wa msimbo kwa kutumia AI zimetumika kwenye kompyuta hiyo ili faili au hifadhidata za mazungumzo ya ndani ziwepo.

Fanya utoaji wako wa kwanza

Kwa mtiririko wa kazi wa mwingiliano, endesha hati kuu bila hoja. Itaonyesha menyu yenye nambari ili uweze kuchagua vyanzo vya kutoa.

python extract.py

Ili kutoa data kutoka kwa vyanzo vyote vinavyotumika bila maulizo, tumia --all.

python extract.py --all

Pia unaweza kuchagua vyanzo mahususi kwa kutumia orodha iliyotenganishwa kwa koma. Vitambulisho vya vyanzo vinaonyeshwa kwenye jedwali la vyanzo la hazina au kwa kutumia --list.

python extract.py --sources cursor,claude_code,aider

Ili kuona usakinishaji uliotambuliwa bila kutoa mazungumzo yoyote, endesha:

python extract.py --list

Njia fupi ya shell iliyojumuishwa hufanya utoaji kutoka kwa vyanzo vyote kwenye mifumo inayopatikana:

./extract_all.sh

Chagua njia za kutoa na kutafuta

Kwa chaguo-msingi, faili za JSONL zenye muhuri wa muda huandikwa kwenye ./extracted_data. Tumia --output-dir kuchagua eneo tofauti la kuhifadhi.

python extract.py --all --output-dir ./chat-backup

Zana nyingi zina saraka za data za programu zinazotabirika, kwa hiyo kitoaji hutafuta kiotomatiki maeneo ya kawaida ya mifumo ya uendeshaji. Aider ni tofauti: huhifadhi nakala moja ya Markdown ndani ya kila saraka ya mradi badala ya kutumia folda kuu ya data ya programu.

Tumia chaguo moja au zaidi za --search-path wakati miradi au data ya programu yako iko nje ya maeneo ya kawaida.

python extract.py --sources aider \
  --search-path ~/client-work \
  --search-path /mnt/data/repos

Njia za ziada za kutafuta pia ni muhimu kwa usakinishaji usio wa kawaida wa zana nyingine zinazotumika.

Unganisha mazungumzo kuwa faili moja

Kila chanzo kilichochaguliwa kwa kawaida hupokea faili yake ya kutoa yenye muhuri wa muda. Ongeza --merge ili pia kuunganisha mazungumzo yote yaliyotolewa kwenye all_conversations.jsonl.

python extract.py --all --merge

Saraka ya kawaida ya matokeo inaweza kuwa na faili kama hizi:

extracted_data/
├── claude_code_conversations_20260816_143022.jsonl
├── cursor_conversations_20260816_143022.jsonl
├── aider_conversations_20260816_143022.jsonl
├── cline_conversations_20260816_143022.jsonl
└── all_conversations.jsonl

Elewa muundo uliosanifishwa

Kila mstari katika faili la matokeo huwakilisha mazungumzo moja. Muundo wa kawaida unajumuisha safu ya messages, kitambulisho cha source na session_id. Sehemu nyingine hutegemea kile ambacho zana ya awali ilirekodi.

{
  "messages": [
    {
      "role": "user",
      "content": "How do I fix this TypeScript error?",
      "code_context": [
        {
          "file": "/Users/you/project/index.ts",
          "code": "const x: string = 123;"
        }
      ],
      "timestamp": "2026-01-16T14:30:22Z"
    },
    {
      "role": "assistant",
      "content": "The error occurs because a number is assigned to a string type.",
      "tool_use": [
        {
          "name": "edit_file",
          "input": {"path": "src/index.ts"}
        }
      ],
      "timestamp": "2026-01-16T14:30:25Z"
    }
  ],
  "source": "cursor-composer",
  "session_id": "c1a2b3...",
  "project_path": "/Users/you/project",
  "name": "TypeScript Type Error Fix",
  "created_at": 1705414222000
}

Sehemu kama code_context, matumizi ya tokeni, njia za miradi, mihuri ya muda, miito ya zana na tofauti hujumuishwa pale chanzo kinapozihifadhi. Sehemu unazoweza kuzitegemea kwa uthabiti ni messages, source na session_id.

Jinsi utoaji unavyofanya kazi

  1. Programu hutambua mfumo wa uendeshaji na kuunda orodha ya mizizi ya data inayowezekana, ikijumuisha maeneo kama Application Support, .config, .local/share, %APPDATA%, na %LOCALAPPDATA%.
  2. Kila chanzo hutafuta majina yake yanayojulikana ya folda na faili katika mizizi hiyo.
  3. Kisomaji kinachofaa hupakia hifadhi ya JSONL, JSON, SQLite, Markdown, au JSON iliyopachikwa.
  4. Kichujio husawazisha rekodi zilizogunduliwa ziwe katika muundo wa pamoja wa ujumbe.
  5. Faili za JSONL zenye mihuri ya muda huandikwa kwenye saraka ya matokeo.

Hifadhidata za SQLite hufunguliwa katika hali ya kusoma pekee, jambo linalosaidia kuzuia kuzuia kihariri kinachoendelea kufanya kazi. Visomaji pia hutenganishwa ili faili iliyoharibika au iliyofungwa itoe matokeo ya sehemu badala ya kusimamisha uchimbaji wote.

Kushughulikia miundo ya hifadhi isiyoandikwa

Cursor, Windsurf, na Trae hazichapishi miundo thabiti ya hifadhi. Kichujio cha Cursor hushughulikia wazi miundo kadhaa inayojulikana, ikijumuisha gumzo la ItemTable la nafasi ya kazi, data ya mtunzi iliyopachikwa, na data ya mtunzi iliyogawanywa yenye bubbleId.

Windsurf na Trae hutumia mbinu ya jumla ya kiheuristiki katika extractors/common.py. Hutafuta funguo zinazohusiana na gumzo na kupitia JSON iliyochanganuliwa kutafuta vitu vinavyofanana na jozi za ujumbe zenye jukumu na maandishi. Hii imekusudiwa kuwa juhudi bora. Ikiwa sasisho la baadaye la programu litabadilisha muundo wa hifadhi, huenda thamani husika za KEY_HINTS zikahitaji kusasishwa.

Kutumia matokeo kwa data ya mafunzo

Faili za JSONL zilizosawazishwa zinaweza kupakiwa kwa kutumia maktaba ya Hugging Face datasets. Mfano ufuatao hupakia faili zote zilizotolewa, huhifadhi mazungumzo yenye ujumbe wa msaidizi, na kuyaunda kwa kutumia kiolezo cha gumzo cha tokeniza.

from datasets import load_dataset

dataset = load_dataset(
    "json",
    data_files="extracted_data/*.jsonl",
    split="train"
)
dataset = dataset.filter(
    lambda x: any(m["role"] == "assistant" for m in x["messages"])
)

def format_chat(example):
    return {
        "text": tokenizer.apply_chat_template(
            example["messages"],
            tokenize=False
        )
    }

dataset = dataset.map(format_chat)

Kagua na ubadilishe rekodi zaidi kulingana na mahitaji ya modeli yako. Vyanzo tofauti vinaweza kuwa na sehemu za hiari tofauti, kwa hivyo mabomba ya mafunzo yanapaswa kutegemea hasa muundo wa ujumbe wa pamoja.

Kupanua kichujio kwa chanzo kipya

Kila kichujio cha chanzo hufuata kiolesura kidogo cha vitendaji viwili. Kunakili continue_ext.py kunatoa mwanzo rahisi.

DISPLAY_NAME = "My Tool"
SOURCE_ID = "my_tool"

def find_installations(extra_paths: list[Path] | None = None) -> list[Path]:
    """Return directories or files worth scanning."""

def extract(installations: list[Path]) -> list[dict]:
    """Return normalized conversation dictionaries."""

Baada ya kuunda moduli, isajili katika orodha ya REGISTRY iliyo kwenye extract.py. Visomaji vya pamoja na mbinu za jumla za kiheuristiki zinapatikana katika extractors/common.py.

Kulinda data nyeti ya mazungumzo

Historia za gumzo za ndani zinaweza kuwa na funguo za API, msimbo wa umiliki, njia za kibinafsi, taarifa za wateja, na michango ya zana. Kagua faili zilizotolewa kabla ya kuzishiriki au kuzitumia kwa mafunzo.

  1. Changanua matokeo kutafuta siri.
  2. Kagua kwa makini sehemu za code_context na tool_use.
  3. Usikabidhi extracted_data/ kwenye hazina ya umma.
  4. Hifadhi nakala rudufu nyeti kwenye hifadhi iliyosimbwa kwa njia fiche.
pip install detect-secrets --break-system-packages
detect-secrets scan extracted_data/*.jsonl

Mradi unajumuisha extracted_data/ katika .gitignore, lakini bado unapaswa kuthibitisha desturi zako za hazina na nakala rudufu kabla ya kuchapisha chochote.

Kutatua matatizo

Hakuna usakinishaji uliopatikana

Zana huenda haijasakinishwa, huenda isiwe na historia yoyote ya gumzo iliyohifadhiwa, au huenda ikatumia eneo lisilo la kawaida. Kwanza endesha --list, kisha toa saraka husika kwa --search-path. Unaweza pia kukagua vidhibiti vya SEARCH_DIRS au APP_DIR_NAMES katika kichujio cha chanzo.

Cursor au Windsurf inaripoti hifadhidata iliyofungwa

Vichujio hutumia miunganisho ya SQLite ya kusoma pekee, kwa hivyo programu inayoendelea kufanya kazi kwa kawaida haitazuia uchimbaji. Ikiwa hitilafu zitaendelea, funga programu na uendeshe uchimbaji tena.

Windsurf au Trae inatoa mazungumzo sifuri

Thibitisha kuwa saraka ya programu ilipatikana kwa --list. Ikiwa ilipatikana lakini hakuna gumzo lililotolewa, kagua funguo husika za state.vscdb na uongeze ruwaza zinazolingana kwenye KEY_HINTS katika kichujio husika.

Hitimisho

AI Coding Assistant Data Extraction hukupa njia isiyotegemea vitegemezi ya kuhifadhi na kusawazisha mazungumzo ya ndani ya usimbaji kwenye miundo mingi ya hifadhi na mifumo ya uendeshaji. Anza kwa python extract.py --list, chagua vyanzo unavyohitaji, kagua JSONL iliyozalishwa ili kutafuta taarifa nyeti, kisha utumie rekodi zilizosawazishwa kwa nakala rudufu, uchanganuzi, au michakato ya mafunzo iliyoandaliwa kwa uangalifu.

Zana hii imekusudiwa kwa data kutoka kwa zana za AI zilizosakinishwa kwenye mashine yako mwenyewe. Ni jukumu lako kuwa na haki za kutoa data hiyo, kulinda taarifa nyeti, kutii masharti ya kila zana, na kuchanganua siri kabla ya kushiriki au kufundishia kwa kutumia matokeo.