Selected work

Engineering case study / 02

AI-assisted knowledge
base generation

Compare the architectures.
Check what the extra steps deliver.

I built Python pipelines to turn technical support records into knowledge articles, then compared single-pass prompts with an agent review loop. The work connects model orchestration, recoverable batch runs and evaluation.

Context Master's capstone · MSE907 · 2026
Implementation Local research prototype
Evidence reviewed 2 October 2026

01 / Problem & contribution

Useful documentation needs
the details to survive.

Resolved software issues combine discussion, diagnostic logs, configuration and code changes. Turning that material into a knowledge article is useful operational work, but a fluent summary can still omit the fix or invent an explanation.

Build. I implemented configurable Python generation and evaluation pipelines, including a LangGraph generator–auditor loop and a local Ollama backend.

Compare. I tested simpler single-pass prompts alongside the agent workflow, using the same selected technical records within each evaluation.

Inspect. I retained outputs, scores and run records to investigate where added review helped, where it did not, and what the measurements could support.

An offline research project based on 69 purposively selected GitHub issue/PR records: 40 from Kubernetes, 20 from Ansible and 9 from VS Code.

02 / Implemented architecture

One task.
Several ways to generate and check.

I separated generation, review and evaluation so each stage could be configured and inspected. The finalisation step selects and saves an existing draft.

Generate, audit, then decide

Two LLM roles and a deterministic finalisation node.

Implemented
Selected input Issue context + PR diff Context limits applied by the runner
LLM role 1 Generator Draft a Markdown knowledge article
LLM role 2 Auditor Return scores, a decision and feedback
Revise Feedback → Generator

Retry the draft while the review-iteration budget remains.

Finish Select → save

Accept a passing draft, or select the highest-scored draft at the iteration limit and record the fallback.

LangGraph carries the current draft, feedback, iteration count and best-scored draft. Finalisation is deterministic. The review budget limits draft iterations; network retries have separate logic.

A simpler comparison

Keep the generation context together and vary the prompt.

Implemented
Selected input Issue context + PR diff Same underlying task records
Baseline Direct generation

Request the knowledge article in one model call.

CoT variant Reasoning prompt

Add an explicit Chain-of-Thought instruction before the article.

Saved output Generated article Single-pass generation

A further variant adds the review loop to CoT generation. Run 09 compares these two CoT workflows; the evaluation notes describe how each path saved its output.

Compare saved outputs

Generation and scoring are separate batch steps.

Saved results
Matched records Candidate articles + reference material Paired by the original issue/PR identifier
LLM-as-a-Judge Factuality & technical completeness Structured scores and an explanation
Analysis Saved scores → paired comparisons Means, sample variation and paired t-tests

Reference material includes the PR description and diff. Generation also receives the diff. The judge scores saved candidate articles using a 0–100 rubric.

Interchangeable model providers

A provider factory supports cloud APIs and local Ollama. I used Gemini and local Llama 3 in the experiments, keeping provider selection separate from the workflow.

Recoverable batch work

Configuration, cached intermediate files, saved results and failure records let me inspect interrupted batches and reuse completed work. Cache versioning and retry behaviour are concrete areas for the next iteration.

03 / Decisions & trade-offs

Make complexity earn its place.

01

Keep cloud and local inference interchangeable

The model interface allowed experimentation to move from Gemini API calls to local Llama 3 through Ollama. This made local inference an option when API limits and running costs affected the experiments.

Trade-off Local inference trades API access and usage limits for local hardware capacity, runtime and smaller-model constraints.
02

Give the review loop an exit

The workflow tracks the best-scored draft, stops on an auditor pass and uses a recorded fallback when it reaches the configured iteration limit. Batch outputs make these outcomes inspectable.

Trade-off A completed run may still be an auditor-rejected fallback. Completion, review acceptance and factual correctness are separate signals.
03

Keep simpler baselines in the comparison

I began by exploring multi-agent review, then added single-pass CoT as a simpler alternative. Comparing both made the extra review stage a testable choice.

Trade-off A model judge makes batch comparison practical. Its rubric and presentation settings also shape the scores, so human evaluation is a useful next step.

04 / Results & interpretation

Single-pass CoT led Run 08.
Run 09 left the review effect uncertain.

Single-pass CoT received the highest average score in the retained three-way comparison. Adding a same-model reviewer in a separate experiment showed no statistically significant benefit.

The figures show the configured LLM judge's 0–100 scores for 69 paired records. Stored scores were recalculated on 2 October 2026; this was an archive review, without a new model run.

Run 08 mean judge scores: single pass 79.88, multi-agent 76.74, single-pass CoT 91.01; 69 paired records. Error bars show sample standard deviation.
Run 08 · Three-way evaluation. Llama 3 generation and judging as recorded for this experiment. Points show means for the same 69 records within this run; error bars show sample standard deviation.
Run 08: LLM-judge scores on a 0–100 scale
Workflow Mean Sample SD
Single pass 79.88 10.25
Multi-agent 76.74 14.60
Single-pass CoT 91.01 6.45

CoT scored 14.28 points above the multi-agent workflow in this run (paired t-test, p ≈ 1.65 × 10 −13 ). For these records and this judge configuration, the simpler CoT workflow was the stronger baseline.

Run 09 mean judge scores: single-pass CoT 87.88 and CoT with a reviewer 86.99. The paired difference is minus 0.90 points with a 95 percent confidence interval from minus 4.53 to plus 2.73; p equals 0.6232.
Run 09 · Reviewer-loop comparison. A separate pairwise evaluation of CoT variants, with 69 matched records. Run 08 used three-way judging; each run is interpreted within its own evaluation setting.

The reviewed outputs averaged 0.90 points lower (95% confidence interval for the paired difference: −4.53 to +2.73; p = 0.6232). This result is statistically inconclusive: the interval spans both lower and higher scores. It supports keeping single-pass CoT as the baseline while testing changes to the review stage.

Evaluation method and follow-up checks
  • These are LLM-judge scores on a 0–100 rubric, rather than measured accuracy percentages. The 69-record sample was purposive and unevenly distributed across three open-source projects. Paired t-tests are exploratory, with unadjusted p-values.
  • Candidate method names and ordering were visible to the judge. Randomised, blinded presentation and human review would help assess ordering, style and self-preference effects.
  • Single-pass CoT saved the full response. The multi-agent CoT path removed reasoning text on fresh generation but retained it on cache hits. A follow-up comparison should normalise this handling across paths.
  • Cache keys captured only part of the model, prompt and input configuration. A versioned experiment manifest should also capture the model digest, seed and environment for a reproducible rerun.
  • Both generation and evaluation receive PR diffs. The comparison measures article quality with access to the fix; a separate experiment would be needed to isolate a mechanism such as information loss during review.
  • Timing records include possible retry waits. A runtime comparison would need consistent hardware and warm-up conditions.

05 / Illustrative example

From a resolved issue
to a usable knowledge note.

This small example shows the intended transformation and the details an evaluator would need to check.

Handwritten, synthetic example. This illustration shows the target article structure for the case study.

Example input

A worker skips its final batch

A batch worker receives 23 records with a batch size of 10. It processes 20 records and leaves three behind without reporting an error.

The loop calculated its batch count using integer division. The fix iterates over record offsets, including the final partial batch.

for start in range(0, len(records), batch_size):
    process(records[start:start + batch_size])

The proposed regression check uses 23 records and checks that every record is processed once.

Example knowledge note

Preserve the partial batch

Symptom
The final three records remain unprocessed when 23 records are handled in batches of 10.
Cause
Integer division counts only complete batches.
Resolution
Iterate from zero to the record count in batch-size steps. Each slice includes the available records, including a shorter final slice.
Verification
Check a non-multiple batch size and assert that all input records are processed exactly once.

The useful details are the boundary condition, the actual fix and a regression check that targets the failure. A review should preserve all three.

06 / Work & evidence

Inspect the workflow.
Recalculate the comparison.

Implementation and experiment records
Area Work completed What to inspect
Generation & orchestration Implemented Python runners, two-role LangGraph review loop, model adapters, caching and saved fallback outcomes.
Offline experiments Scores recalculated Stored output and evaluation records, with a score export and script for recalculating Run 08 and Run 09 statistics.
Workflow diagnostics Inspection scripts Scripts print workflow behaviour and outcomes for manual inspection during development.

The public export contains scores and pseudonymous case labels. The script recalculates its means, sample variation, paired t-tests and confidence intervals. Original records and research archives remain private.

The next iteration would combine consistent output handling and versioned experiment manifests with human evaluation, tool-assisted review and broader model comparisons. The aim is to identify which review steps improve the article enough to justify their added complexity.

Back to selected work