Ask codex
der 22. April 2025
🚀 Codex ist OpenAIs neues Open-Source-CLI-Tool für lokale Agenten. Nur fünf Tage nach seiner Veröffentlichung habe ich mich daran gemacht, seine Weiterentwicklung zu erkunden. In diesem Artikel erkläre ich Ihnen, wie ich Codex mit Uniflow verbunden habe, um das Verständnis und die Zusammenfassung von Code zu automatisieren.
✨ Was ist Codex? Mit Codex können Sie über das Terminal Fragen zu Ihrer Codebasis stellen. Die Installation erfolgt mit:
npm install -g openai/codex
Anschließend können Sie Eingabeaufforderungen wie diese ausführen:
codex -q --json "explain utils.ts"
Dieses Beispiel ist einer der offiziellen Anwendungsfälle, die von OpenAI in ihrem GitHub-Repository veröffentlicht wurden.
⚖️ Warum mit Uniflow automatisieren?
Ich wollte Befehle nicht nur manuell ausführen. Ich wollte die Interaktion industrialisieren und Codex zu einem aufrufbaren Tool innerhalb von Uniflow machen. Dadurch kann ChatGPT die Ausführung an Codex delegieren und lesbare Ergebnisse liefern.
🌍 Workflow erstellen
In Uniflow habe ich ein neues Projekt namens „AskCodex“ erstellt. Mithilfe des Node-Clients von Uniflow habe ich den Workflow folgendermaßen strukturiert:
- „OPENAI_API_KEY“ als ENV-Variable festlegen
- Eine benutzerdefinierte Eingabeaufforderung definieren, z. B.: „Codex zur Erklärung von utils.ts verwenden“
- „runCodex“ als Tool in der ChatGPT-Anfrage registrieren
- ChatGPT „runCodex“ mit der Eingabeaufforderung aufrufen lassen
- Das CLI-Tool über die Batch-Bridge von Uniflow ausführen
- Die Codex-Ausgabe mit einem zweiten Aufruf von ChatGPT zusammenfassen
🦄 Beispielausgabe
In meinem Test hat Codex „utils.ts“ erfolgreich gelesen und erklärt. Es wurden Hilfsfunktionen wie diese identifiziert:
sleep()
– erzeugt eine VerzögerungisNil()
– gibt „true“ für „null“ oder „undefined“ zurücksaveAsJSON()
– verwaltet die Objektpersistenz
Nach Ausführung des Tools liefert ChatGPT eine saubere Zusammenfassung der Datei.
🌧 Einschränkungen und zukünftige Ideen
❌ Codex behält derzeit den Kontext nicht über Aufrufe hinweg bei. Ein persistenter interaktiver API-Modus, in dem das Modell klärende Fragen stellen kann, wäre fantastisch.
🧠 Bis dahin simulieren wir die Interaktivität mit Uniflow, indem wir GPT erneut mit zusätzlichen Informationen auffordern.
🏫 Selbst testen
Wenn Sie lokal testen möchten:
npm install -g openai/codex
export OPENAI_API_KEY=Ihr_Schlüssel
codex -q "explain utils.ts" --json
🔥 Vollständige Automatisierung testen
Um das in diesem Video gezeigte Beispiel zu reproduzieren, führen Sie Ihren eigenen Flow in Uniflow mit dem Node-Client aus. Mein Beispiel verwendet die CLI + Docker-API und verbindet sich lokal mit Uniflow über Port 9016.
Hier sind die verwendeten Ressourcen:
Flows:
- Objekt
Variable:
env = { openai_api_key: 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 }
- Text
Variable: codex_prompt =
Codex-Tool verwenden und ihn bitten, Folgendes zu erklären. utils.ts"
- Funktion Code:
// Tool function to run Codex CLI
function runCodex(prompt) {
console.log(`?️ Running Codex with prompt:\n${prompt}`);
try {
const sanitizedPrompt = prompt.replace(/"/g, '\\"');
const command = `OPENAI_API_KEY=${env.openai_api_key} codex -q "${sanitizedPrompt}" --json`;
const output = Bash.exec(command, { encoding: 'utf-8' });
return output;
} catch (error) {
return 'Codex error: ' + (error.stderr || error.message);
}
}
// Function to call ChatGPT with fetch
function askChatGPT(prompt) {
console.log(`? Asking ChatGPT:\n${prompt}`);
return fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + env.openai_api_key,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'gpt-4',
tools: [
{
type: 'function',
function: {
name: 'runCodex',
description: 'Executes Codex CLI with a given prompt',
parameters: {
type: 'object',
properties: {
prompt: { type: 'string', description: 'Prompt to send to Codex CLI' }
},
required: ['prompt']
}
}
}
],
messages: [
{
role: 'system',
content: 'You are an automation assistant that can call a custom CLI tool named "codex".'
},
{
role: 'user',
content: prompt
}
]
})
});
}
// Full flow execution
askChatGPT(codex_prompt)
.then(res => res.json())
.then(data => {
const toolCalls = data.choices?.[0]?.message?.tool_calls || [];
if (toolCalls.length === 0) {
console.log('ℹ️ No tool calls detected in the response.');
return Promise.resolve('No output from Codex.');
}
const executions = toolCalls.map(call => {
if (call.function?.name === 'runCodex') {
const args = JSON.parse(call.function.arguments);
return runCodex(args.prompt);
}
return Promise.resolve(null);
});
return Promise.all(executions);
})
.then(outputs => {
const content = outputs.join('\n');
console.log('? Codex Output:\n', content);
// Summarize Codex result with ChatGPT
return askChatGPT(`Summarize this content:\n\n${content}`);
})
.then(res => res.json())
.then(result => {
const summary = result.choices?.[0]?.message?.content || '❌ No summary generated.';
console.log('? Final Summary:\n', summary);
})
.catch(error => {
console.error('❌ Flow error:', error.message);
});
📌 Flow ausführen
Gehe zu library/uniflow-client-node
Generiere dist/node.js
npm run build:dev
Flow mit dem Uniflow-Node-Client ausführen
node dist/node.js --env=dev --api-key=zxtl1facmgbapyvjg581oip28sinzyr4 ask-codex
👏 Fazit
Wir haben gesehen, wie Codex durch die Einbindung in einen Orchestrator wie Uniflow deutlich leistungsfähiger wird. Diese Kombination wandelt CLI-Rohausgaben in verfeinerte, automatisierte Zusammenfassungen um. Perfekt für DevOps, Onboarding oder Code-Review-Pipelines.
🚀 Möchten Sie Ihre eigenen Workflows erstellen?
🎥 Sehen Sie sich das Video auf YouTube an und vergessen Sie nicht, uns zu liken, zu teilen und zu abonnieren. Bis bald!