I am developing a non-neural conversational AI model

Over the past eight months, I have been developing a conversational symbolic AI architecture.

I believe symbolic AI architectures offer two major advantages worth exploring: computational efficiency and the ability to maintain thousands—or even millions—of lines of reasoning.

Now, imagine if we could extract structured information from the internet using non-neural methods to feed a symbolic model. I view the lack of exploration in this area as a significant gap; such AI models could potentially converse with the same fluency as today’s large models.

Computational intelligence: essentially, computational heuristics. Upon reflection, I realized that computational intelligence—in the context of reasoning—is simply the ability to employ computational heuristics. Try solving 3x² + 2x - 1 = 3 without using the quadratic formula. To do so, you would need to rule out various algebraic paths and instead use the “completing the square” method.

Right now, I’m trying to program my ideas; I’m not good at programming—just a beginner—and I’m open to talking with other developers.

Hmm… for a start, quite a lot would depend on what exactly the non-neural constraint covers. For example:


I think this is a legitimate direction to explore, but it is not only one technical problem. It separates into several substantially different projects depending on the constraints.

There is already a fair amount of prior work on the individual pieces: symbolic dialogue management, controlled natural-language parsing, information extraction, provenance, rule engines, automated planning, and template- or grammar-based language generation. The less settled question is how far those pieces can be integrated, under a particular definition of “non-neural,” while retaining useful coverage, maintainability, and conversational quality.

You would not need to implement all of the components below at once. The longer sections are mainly a map of the available design choices and some ways to test them independently.

A first decision tree might look roughly like this:

What does “non-neural” constrain?
├─ Runtime only
│  └─ Neural systems may still help create data, rules, grammars, or tests
└─ The entire development process
   ├─ Classical statistical methods are allowed
   │  └─ BM25, HMMs, CRFs, SVMs, probabilistic grammars, etc.
   └─ Only manually specified symbolic methods are allowed

What kind of input must it handle?
├─ Controlled language
├─ Semi-structured sources such as tables, forms, and FAQs
├─ A fixed collection of ordinary documents
└─ Arbitrary open-Web prose

What kind of conversation is required?
├─ A bounded task with known tools and goals
├─ Multi-step collaborative problem solving
└─ Broad, open-domain, socially fluent conversation

Those branches lead to very different architectures and expectations.

My default route would be:

  1. Pick one language, one narrow domain, a small versioned document collection, and perhaps three tools.
  2. Define the internal data passed between components before optimizing the individual components.
  3. Make the complete end-to-end path work initially with manually supplied correct intermediate representations.
  4. Replace one controlled component at a time with the real parser, extractor, dialogue manager, or planner.
  5. Evaluate both the individual boundaries and the complete task.
  6. Expand toward less controlled language and less structured sources only after failures can be localized.

For example, the three initial tools could be something concrete such as:

  • check a product version;
  • check whether a policy applies;
  • create a support ticket.

The smallest useful integrated target would be something like:

natural-language utterance
→ semantic interpretation
→ dialogue-state update
→ retrieval and source-backed candidate claims
→ symbolic inference and/or action planning
→ tool call with typed arguments
→ observed result
→ grounded natural-language response

Here, semantic interpretation means a structured representation of what the user appears to mean. Dialogue state means the information the system is currently tracking about the conversation: the user’s goal, known facts, missing information, unresolved questions, and previous actions. A candidate claim is information extracted from a source but not yet automatically treated as a trusted fact.

This target would test a conversational symbolic architecture without reducing the goal to only a theorem prover, search system, intent classifier, or fixed response template.

The first public artifact would not need to be a large repository. Any one of these could make the design much easier to discuss:

  • a one-page architecture diagram;
  • one complete trace from user input to final response;
  • a small rule-language or knowledge-representation example;
  • a runnable demo with one domain and a few tools;
  • a benchmark containing expected intermediate states as well as final answers.

For example, one trace could expose:

utterance
possible interpretations
chosen interpretation or clarification request
dialogue state before and after the turn
retrieved source passages
candidate claims and their sources
rules that fired
selected action and arguments
tool result
response content plan
surface response

This would make the discussion concrete without requiring the whole system to be complete.

Why the exact non-neural boundary matters

“Symbolic,” “non-neural,” and “manually programmed” are not necessarily the same constraint.

For example, a system might use:

  • manually written rules at runtime;
  • a classical probabilistic dialogue model;
  • BM25 retrieval over documents;
  • an SVM or CRF for a bounded classification task;
  • a probabilistic grammar;
  • rules generated or proposed by a neural model but reviewed before deployment;
  • synthetic training or test data produced during development;
  • a neural parser during development but a symbolic runtime.

Each would support a different research claim.

A useful separation would be:

Constraint What it changes
Runtime must be non-neural Development-time models may still generate annotations, rules, tests, or candidate grammars
No neural component anywhere Data creation and language coverage become much more labor-intensive
Classical statistical learning is allowed Probabilistic parsing, ranking, tagging, and dialogue-state estimation remain available
Only explicit symbolic rules are allowed Coverage depends heavily on controlled language, domain restriction, and manual maintenance
Open Web is required Extraction, attribution, time, contradiction, and source-quality problems become central
Fixed versioned corpus is acceptable Knowledge can be validated, regression-tested, and updated more safely

The most useful description would therefore state separately:

  1. the runtime constraint;
  2. the development-time constraint;
  3. the allowed learning algorithms;
  4. the allowed source formats;
  5. the intended domain and language coverage.

This is also relevant to computational efficiency. Runtime latency and memory can be measured, but they should not be conflated with the cost of writing, curating, debugging, and updating rules or knowledge.

A system could be extremely fast at runtime while still requiring considerable human effort to expand its language coverage. That would not make the approach unsuccessful, but it would be a different advantage from low total development cost.

Existing work that may provide components or comparison points

These are not all the same design, and none should be treated as a drop-in solution. They are useful mainly as vocabulary, components, controls, or historical comparison points.

Dialogue state and control

RavenClaw is a plan-based dialogue-management framework that separates domain-specific dialogue logic from more general conversational behavior. That separation is relevant if the intended system has reusable conversation mechanisms but different domain tasks.

OpenDial uses an information-state architecture in which the dialogue state is shared across components and represented probabilistically. Its rules and domain models provide a useful comparison point if classical probabilistic methods are allowed.

The TRIPS project treats dialogue as collaborative problem solving. Its architecture separates conversation management from problem solving, while using dialogue context to interpret utterances, resolve ambiguities, plan responses, and coordinate domain actions. That is closer to an integrated conversational agent than a simple intent router, although its demonstrated systems were still bounded domains.

For more deterministic task control, SCXML is a general-purpose event-based state-machine notation. A state machine or frame system can be appropriate for turn flow, retries, timeouts, collecting required information, and predictable recovery, while a separate reasoner handles domain facts and rules.

The important idea here is not that one of these systems is necessarily the correct implementation. It is that dialogue flow, domain reasoning, and action execution do not all have to be placed inside one large rule engine.

Controlled natural language and semantic parsing

Attempto Controlled English and the APE parser are strong controls for the text-to-symbol boundary. ACE restricts English enough that sentences can be mapped deterministically to a formal representation and then queried or reasoned over.

That demonstrates that non-neural text-to-logic is feasible under a controlled-language contract. It does not by itself demonstrate reliable interpretation of arbitrary Web prose, which is a much broader requirement.

For very bounded commands and structured arguments, HassIL is a practical example of template-based intent parsing with alternatives, optional words, lists, expansion rules, and typed slot values. It is useful as a comparison or control for tool routing, not as a general semantic parser.

A possible progression would therefore be:

fixed command templates
→ controlled language
→ ordinary paraphrases in one domain
→ fixed-corpus prose
→ open-Web prose

Success at each level would be meaningful, but it would not automatically establish success at the next level.

Information extraction

Open Information Extraction is already a substantial research area, including rule-based, statistical, neural, and hybrid systems. For example, MinIE produces compact extractions and explicitly annotates polarity, modality, attribution, and quantities.

That is important because:

Alice said that the device might not work after Friday.

should not become an unconditional, timeless fact such as:

device → does_not_work

The statement contains at least:

  • an attributed speaker;
  • uncertainty or modality;
  • negation;
  • a temporal condition;
  • a source passage;
  • a particular extraction process.

The extraction should therefore initially be treated as a candidate claim, not immediately as trusted knowledge.

A simple admission process could be:

source sentence
→ extracted candidate claim
→ type and schema checks
→ attribution, time, and negation checks
→ accepted, quarantined, conflicted, or rejected

“Quarantined” here could simply mean that the information is stored for inspection but is not yet allowed to affect answers or actions.

Provenance, time, and validation

Provenance means information about where something came from and how it was produced.

PROV-O provides standard vocabulary for entities, activities, agents, derivations, attribution, revisions, and primary sources. It can help represent where a claim came from and how it was transformed.

However:

provenance available ≠ proposition verified as true

Source provenance answers questions such as:

Where did this claim come from?

Proof provenance answers:

Which facts and rules produced this conclusion?

Those are different records, and neither alone proves that the original interpretation was correct.

TimeML is a useful reference for separating events, temporal expressions, signals, and temporal relations. Even a simpler architecture will probably need to distinguish:

  • the document publication time;
  • the time of the described event;
  • the time at which the system extracted the claim;
  • the period during which the claim is valid.

If RDF is used, SHACL can validate a graph against structural and datatype constraints. It can detect that required fields are missing or incorrectly typed. It cannot determine that a grammatically valid claim is factually correct.

For example, a validator could detect that a policy record has no effective date, but it normally cannot determine whether the date extracted from the original document is the correct one.

Symbolic inference and explanation

A Datalog-style engine can be useful when the knowledge and rule language are intentionally bounded. Soufflé’s provenance support can produce proof trees explaining how derived results were obtained.

That kind of trace is useful, but it should be interpreted carefully:

The conclusion follows from these encoded premises and rules.

is not equivalent to:

The parser understood the source correctly and every premise is true.

Long-running reasoning also creates an update problem. If a source is revised or a premise is withdrawn, the system should be able to identify which derived conclusions depend on it, retract or recompute those conclusions, and preserve unrelated conclusions.

Therefore “millions of lines of reasoning” would benefit from a more precise unit. It might mean:

  • stored source assertions;
  • active facts;
  • rule firings;
  • proof-tree nodes;
  • event-log entries;
  • alternative hypotheses;
  • dependency edges;
  • or conversational turns.

Those have different storage, inference, and maintenance costs.

For example, storing one million independent assertions is different from maintaining one million mutually dependent inference steps. The latter also requires a strategy for updates, invalidation, and partial recomputation.

Tool selection and planning

Selecting one tool label from a list is routing.

Planning normally adds:

  • parameterized actions;
  • preconditions, meaning what must already be true;
  • effects, meaning what the action is expected to change;
  • a current world state;
  • a goal;
  • and possibly replanning after failure.

The Unified Planning library gives a concrete vocabulary for modeling planning problems, invoking planners, grounding problems, and validating plans.

A useful architecture may therefore have separate mechanisms for:

  • deterministic dialogue flow;
  • symbolic inference;
  • one-step tool routing;
  • multi-step planning;
  • action execution;
  • checking observed results.

For example:

Goal: create a support ticket for the affected product

Possible actions:
1. identify the product
2. check whether the product version is supported
3. collect the required contact information
4. create the ticket
5. verify that a ticket ID was returned

A router may select create_ticket, but a planner or task controller must also determine whether the required earlier steps have been completed.

Natural-language generation

Conversational fluency also needs to be decomposed.

At least the following are different problems:

  1. deciding which information to communicate;
  2. ordering and grouping that information;
  3. choosing references and vocabulary;
  4. syntactic and morphological realization;
  5. maintaining discourse coherence;
  6. producing varied social or stylistic language.

SimpleNLG is a useful example of non-neural surface realization. It can help test whether a correct response plan can be rendered as a grammatical sentence.

However, surface realization alone does not solve:

  • deciding what the user needs to know;
  • choosing relevant evidence;
  • resolving conversational implications;
  • managing broad open-domain context;
  • producing a wide variety of natural social responses.

This suggests testing two separate claims:

  • Can the system produce a correct, grounded, grammatical task response?
  • Can it match the breadth and flexibility of contemporary open-domain conversational models?

The first is a realistic early end-to-end target. The second is a much larger research question.

A small end-to-end experiment with controls

A compact initial domain might contain:

  • one language;
  • 8–12 versioned documents;
  • a mixture of tables, FAQs, and ordinary prose;
  • 20–50 facts;
  • 10–20 explicit rules;
  • three tools;
  • 40–60 multi-turn test dialogues.

A product-support or policy domain would work because it naturally contains versions, exceptions, dates, conditions, and actions.

The three tools could be:

check_product_version(product, version)
check_policy(policy, customer_type, date)
create_ticket(product, issue, contact)

The end-to-end task could include:

  1. answering a question from a cited document;
  2. applying an explicit rule or exception;
  3. asking for clarification when required information is missing;
  4. selecting a tool with typed arguments;
  5. recovering from one tool failure;
  6. explaining the answer with source and proof information.

Step-by-step control ladder

In this section, gold means a manually supplied correct intermediate result. It is used temporarily to test the later components without requiring every earlier component to work first.

Stage Controlled component What it isolates
1 Gold semantic interpretation + gold knowledge Dialogue, reasoning, actions, and response generation
2 Gold knowledge only Natural-language interpretation and dialogue-state updates
3 Controlled-language parser Broader paraphrase and ambiguity handling
4 Semi-structured ingestion Tables, fields, FAQs, and version handling
5 Fixed-corpus prose extraction Attribution, negation, time, entities, and claim admission
6 Broader Web input Retrieval quality, source disagreement, revisions, and unknown schemas

This avoids debugging every uncertain boundary at the same time.

For example, suppose a complete test fails. If the system succeeds when given the correct semantic interpretation manually, then the reasoner and action system may be working and the error is probably earlier in the pipeline.

Suggested internal records

A claim could contain fields such as:

claim_id:
proposition:
source_document:
source_span:
speaker_or_author:
polarity:
modality:
event_time:
valid_from:
valid_until:
extraction_method:
extractor_version:
status: candidate | accepted | conflicted | superseded | rejected

A derived conclusion could separately contain:

conclusion_id:
proposition:
supporting_claims:
rules_used:
assumptions:
reasoner_version:
status:

An action record could contain:

action:
arguments:
preconditions_checked:
expected_effects:
execution_result:
observed_effects:
recovery_action:

These do not need to use YAML internally. The point is to make the information passed between components explicit and inspectable.

Small change tests

A useful test is to change one part of an otherwise working example and see whether the system responds correctly.

1. Ambiguity test

Change an input so that two interpretations are plausible.

Expected behavior:

  • preserve both candidates;
  • request a narrow clarification;
  • avoid silently selecting one;
  • continue after clarification without losing dialogue state.

For example:

User: Check whether it is still supported.

If two products were recently mentioned, the system should ask which product the user means rather than silently choosing one.

Clarification should be a normal system action, not merely a fallback after a crash or complete parsing failure.

2. Knowledge-update test

Revise or retract one source statement.

Expected behavior:

  • affected conclusions are recomputed or withdrawn;
  • unrelated conclusions remain stable;
  • the system can explain why the answer changed;
  • the old version remains available for auditing.

For example, if a document changes a support deadline from June to September, answers depending on that deadline should change without requiring the whole knowledge base to be rebuilt manually.

3. Action-failure test

Make a tool unavailable or violate one precondition.

Expected behavior:

  • do not execute an invalid action;
  • report or represent the failed precondition;
  • choose a safe alternative, request information, replan, or stop;
  • do not invent a successful tool result.

For example, if ticket creation fails, the system should not answer as though a ticket ID exists.

Evaluation

Final-answer quality alone will not localize errors. It would be useful to score:

Layer Example measurements
Semantic interpretation structured match, ambiguity retention, clarification accuracy
Dialogue state correct known facts, references, goals, missing information, and updates
Extraction argument boundaries, polarity, modality, attribution, time, and source span
Knowledge admission accepted, rejected, conflicted, and incomplete decisions
Reasoning conclusion correctness, proof correctness, and retraction behavior
Actions tool selection, argument validity, precondition checks, and recovery
Response generation factual adequacy, grammaticality, source support, and coherence
End-to-end task task success, turns, latency, memory, failures, and human corrections

The older PARADISE framework is one useful historical reference for separating task success from dialogue costs and behavior. It would not cover all of the extraction and provenance metrics above, but it is a useful reminder not to reduce evaluation to whether a final answer merely sounds good.

A few failure modes worth separating early

These distinctions would prevent several misleading successes:

Observation It does not necessarily establish
The parser emitted valid JSON or RDF The intended meaning was captured
An OpenIE system emitted a tuple The tuple is a trusted fact
A source URL was stored Attribution, time, scope, and revision were represented correctly
A proof tree was produced The original premises were true
The whole transcript was retained The system maintained a useful dialogue state
A tool name was selected Multi-step planning occurred
A response was grammatical It was correct, relevant, or grounded
A controlled-language demo worked Ordinary Web prose will work
Runtime inference was fast Rule creation and maintenance were inexpensive
A single demonstration succeeded Updates, ambiguity, contradiction, and failure recovery work

The boundaries between components are therefore as important as the components themselves.

For every transition such as:

text → semantic interpretation
semantic interpretation → dialogue state
document → candidate claim
candidate claim → accepted knowledge
knowledge → conclusion
goal → action
tool result → response

it helps to define:

  • the input and output format;
  • the uncertainty the component is allowed to return;
  • possible failure states;
  • whether the system may ask for clarification or decline to decide;
  • where the information came from;
  • which component and version transformed it;
  • how the result is updated when a source or rule changes;
  • tests for outputs that are correctly formatted but semantically wrong.

This does not need to become a heavy governance framework. It is simply a way to make an integrated symbolic system debuggable.

So, depending on your intended branch, there are several reasonable starting points:

  • Strictly symbolic and manually specified: begin with controlled language, explicit data formats, a small knowledge base, abstention, and very narrow tasks.
  • Classical non-neural learning is allowed: add probabilistic parsing, ranking, tagging, or dialogue-state estimation where handwritten rules become brittle.
  • Runtime only must be non-neural: use development-time automation for annotations, test generation, and candidate rules, while verifying the deployed runtime independently.
  • Web retrieval is enough initially: keep retrieved passages as evidence and postpone automatic conversion into trusted knowledge.
  • Free Web prose must become knowledge: prioritize attribution, polarity, modality, time, entity resolution, conflict handling, and provenance before increasing the size of the reasoner.
  • The main goal is task-oriented conversation: use a bounded dialogue state, explicit actions, clarification, and controlled generation.
  • The main goal is broad LLM-like fluency: treat that as a separate hypothesis from symbolic reasoning efficiency and evaluate it independently.

The standard path I would recommend is therefore not “build the largest symbolic knowledge base first.” It is:

Build one small, complete, inspectable conversational loop; keep the uncertain boundaries replaceable; measure where coverage or maintenance breaks; then expand one dimension at a time.

That would make the computational-efficiency, long-reasoning, Web-extraction, and conversational-fluency claims independently testable, while still preserving the larger architectural goal.

Interesting idea. Symbolic AI still has a lot of potential, especially for explainable reasoning and handling large chains of logic. A good starting point would be building a small prototype and gradually improving it rather than trying to solve the whole architecture at once. Learning from existing tools in knowledge graphs, rule engines, and hybrid AI systems could also help shape the approach.

Hello, thank you very much for your advice.

When I say “non-neural AI,” I mean that the system can function at every stage without neural networks.

The idea is to use the natural language processing structures I have been developing so that the program can complete all the steps allowing a user to provide input and receive a valid output.

Yes, I also intend to implement probabilistic systems, since they can offer significant advantages with low computational cost in multiple aspects.

Hello. Thank you very much for the tips.

Your suggestions are great. Thank you very much for taking the time to share your insights, tips, and so on.

When I say “non-neural AI,” I mean that the system can function at every stage without neural networks.

Oh. I see. If that mean neural networks are allowed during development, that opens up quite a few more options. These are only a few examples, but for instance:


A practical distinction could be:

Neural systems may help discover, generate, organize, or test the runtime artifacts, but the deployed system must still operate without neural networks.

Under that definition, the development process could use an LLM as an annotator, hypothesis generator, program author, test generator, or black-box teacher. The deployed artifacts could then be ordinary rules, classical statistical models, finite-state machines, probability tables, symbolic programs, decision tables, or lookup tables.

This would not automatically transfer the full open-domain ability of an LLM into a compact symbolic system. However, it could substantially reduce the human effort required to construct a narrower non-neural system.

The most defensible current pattern seems to be:

human defines the domain and formal interfaces
→ neural tools propose many candidate artifacts
→ independent tools execute, verify, compare, and compress them
→ only accepted non-neural artifacts are deployed
→ the completed runtime is tested with every neural dependency removed

This is different from simply asking an LLM for a set of rules and trusting the answer. In one study of inductive rule learning, language models were strong at proposing plausible hypotheses, but much less reliable at consistently applying those hypotheses. Performance improved when a task-specific symbolic interpreter systematically filtered the proposed rules. That suggests a useful division of labor: use the model as a broad hypothesis generator and another system as the judge. See Qiu et al., “Phenomenal Yet Puzzling”.

A rough decision tree would be:

Can the generated artifact be checked mechanically?
├─ Yes
│  ├─ rule, regular expression, grammar
│  ├─ program, workflow, query, planning domain
│  └─ automaton or state machine
│     → generate candidates and use execution, tests, solvers,
│       type checkers, or model checkers to reject bad ones
└─ No
   ├─ semantic label
   ├─ natural-language judgment
   └─ response-quality judgment
      → use independent human-reviewed data or another gold standard

Is the target a bounded prediction problem?
├─ Yes
│  └─ generate annotations, then train a classical model
└─ No

Is the relevant behavior mostly sequential or finite-state?
├─ Yes
│  └─ extract or learn a DFA, weighted automaton, HMM,
│     transition matrix, or probabilistic policy
└─ No

Are there already many related symbolic solutions?
├─ Yes
│  └─ find repeated structures and build a compressed reusable library
└─ No

Is the target broad open-domain understanding and fluency?
├─ Yes
│  └─ compact and faithful non-neural distillation is not established
└─ No
   └─ domain-specific compilation is much more realistic

My default route would therefore be:

  1. Define a small symbolic language for the runtime artifacts.
  2. Let development-time neural tools generate examples and candidates in that language.
  3. Make every candidate executable or otherwise testable whenever possible.
  4. Reject candidates using independent tests, counterexamples, and formal checks.
  5. merge repeated or behaviorally similar artifacts;
  6. compile the result into a compact non-neural runtime;
  7. disconnect all neural services and run a cold end-to-end evaluation.

The target does not need to be one monolithic “distilled LLM.” It may be more effective to distill different bounded functions into different representations:

Function Possible deployed artifact
Intent or dialogue-act recognition SVM, logistic regression, decision tree, rule list
Entity or slot extraction CRF, finite-state transducer, grammar
Dialogue progression State machine or probabilistic transition matrix
Tool selection Decision table, rule list, classical classifier
Multi-step action Symbolic program, workflow, planner
Repeated reasoning pattern Reusable symbolic function or library primitive
Sequential probability HMM or weighted finite automaton
Known finite mappings LUT, perfect hash, decision tree
Response realization Templates, grammar, deterministic surface realizer
Knowledge candidates Versioned symbolic records with source and confidence

The important part would be to keep the meaning of each artifact explicit. A compact state transition table is useful only if the states themselves still preserve distinctions needed by the task.

1. Generating annotations and training classical non-neural models

One relatively mature option is to use an LLM to help create a labeled dataset, then train a conventional non-neural student.

For example, the development system could generate or label:

  • intents;
  • dialogue acts;
  • slots and entity spans;
  • semantic-form candidates;
  • paraphrases;
  • negative examples;
  • ambiguous examples;
  • tool-selection examples;
  • error categories;
  • clarification cases.

The final runtime learner might be:

  • logistic regression;
  • an SVM;
  • a CRF;
  • an HMM;
  • a decision tree;
  • gradient-boosted trees;
  • a sparse rule list;
  • a probabilistic grammar.

Alfred is an example of prompted weak supervision. It lets users express weak-supervision sources through natural-language prompts, maps their outputs to weak labels, and combines disagreeing sources with a label model.

This route is relatively practical when the output space is already well defined. For example:

refund_request
product_compatibility_question
account_access_problem

is a bounded label space. It is much easier to transfer this decision than to transfer unrestricted natural-language understanding.

A useful pipeline would be:

human defines labels and edge cases
→ LLM generates or weakly labels examples
→ human reviews a stratified sample
→ classical model is trained
→ evaluation uses a separately created holdout set
→ uncertain inputs cause clarification or abstention

The independent holdout is important. If the teacher labels both training and evaluation data, a student can appear successful merely by reproducing the teacher’s biases.

It would also help to compare at least three quantities:

  1. agreement with the neural teacher;
  2. agreement with independently checked gold labels;
  3. performance relative to a manually written or classical baseline.

Teacher agreement and correctness are not the same measurement.

2. Generating rules, grammars, and symbolic programs

If an output can be executed, compiled, or checked, neural generation becomes more useful because incorrect candidates can be rejected mechanically.

Possible generated artifacts include:

  • regular expressions;
  • finite-state grammar rules;
  • semantic parsing rules;
  • production rules;
  • SQL queries;
  • logic programs;
  • action schemas;
  • PDDL domains;
  • workflows;
  • small deterministic programs;
  • response-planning rules.

A simple workflow could be:

examples and specification
→ LLM proposes 100 candidate rules
→ parser rejects invalid syntax
→ type checker rejects invalid interfaces
→ interpreter runs candidates on tests
→ solver searches for counterexamples
→ redundant candidates are removed
→ accepted rules become part of the runtime

This resembles counterexample-guided inductive synthesis, often abbreviated CEGIS.

In a CEGIS loop:

candidate
→ verifier
├─ valid → accept
└─ invalid → return a counterexample
              → refine the next candidate

A study combining LLM generation with an SMT solver used counterexamples from the solver to iteratively improve planning artifacts: Jha et al., “Neuro Symbolic Reasoning for Planning”.

This does not mean that arbitrary generated programs become safe automatically. The strength of the result depends on the specification.

If the specification only contains ten examples, the generated program may merely fit those ten examples. If the specification includes types, invariants, preconditions, postconditions, forbidden states, and exhaustive finite cases, the verifier can provide much stronger evidence.

The ideal role split is therefore:

LLM:
- searches broadly;
- proposes unusual candidates;
- translates between natural language and the DSL;
- produces test and counterexample suggestions.

Formal or classical tools:
- define what acceptance means;
- execute candidates;
- prove bounded properties;
- reject contradictions;
- produce concrete failure cases.

For a beginner-friendly implementation, this could start without SMT solving. A strict parser, a small interpreter, and a comprehensive test table would already provide the same basic architecture.

3. Learning reusable symbolic libraries rather than accumulating rules forever

A particularly relevant research direction is library learning.

Suppose development-time tools generate hundreds or thousands of symbolic programs or rules. Many will contain repeated structures.

Instead of deploying all of them independently, a library-learning system can search for common subprograms and replace them with reusable abstractions.

Conceptually:

program 1: normalize name → find account → check status → answer
program 2: normalize name → find account → check plan → answer
program 3: normalize name → find account → open ticket

could become:

resolve_account(name):
    normalize name
    find account

followed by smaller task-specific programs.

DreamCoder alternates between solving tasks as programs and extending its symbolic language with reusable abstractions. A neural component guides program search, but the learned concepts themselves are compositional symbolic programs.

Stitch focuses directly on extracting reusable abstractions from a corpus of programs. It searches for functions that capture common structure and then rewrites the original programs using the learned library.

LILO combines LLM-guided program synthesis, Stitch-style symbolic compression, and automatic documentation. It repeatedly synthesizes programs, compresses them into reusable functions, and gives those functions readable names and descriptions.

These are limited program-synthesis settings, not general conversational-AI distillation. However, they provide a concrete answer to an important engineering problem:

How can a system prevent a large collection of generated symbolic solutions from becoming an unmaintainable pile of almost-duplicate rules?

A development architecture could therefore be:

LLM generates task-specific symbolic programs
→ programs are tested
→ accepted programs enter a corpus
→ library learner finds repeated structures
→ reusable abstractions are added to the DSL
→ old programs are rewritten using the abstractions
→ the new compact library becomes the next generation target

This can produce more than compression. The discovered abstractions may become the system’s higher-level vocabulary.

For example, many low-level rules involving product lookup, version comparison, and support dates might eventually be compressed into a reusable operation such as:

support_status(product, version, date)

The caution is that syntactic repetition is not always semantic equivalence. Two fragments may look similar while differing in an important side effect or exception. Library candidates should therefore be tested against both existing examples and deliberately generated counterexamples.

4. Extracting finite-state and probabilistic behavior

Your intention to use probabilistic systems makes this branch especially relevant.

Some behavior may be represented as:

  • a deterministic finite automaton;
  • a probabilistic finite-state machine;
  • a hidden Markov model;
  • a weighted finite automaton;
  • a dialogue-state transition matrix;
  • an action-selection probability table;
  • a probabilistic grammar.

For example, a bounded dialogue manager might contain states such as:

waiting_for_product
waiting_for_version
checking_policy
ready_to_act
tool_failed
completed

Development-time neural systems could generate dialogues or propose state assignments. A classical learner could then estimate:

P(next_state | current_state, observed_dialogue_act)
P(action | current_state, known_slots)
P(clarify | ambiguity_type, current_state)

There is also a more direct black-box extraction literature.

Weighted-automaton extraction has been used to approximate sequential black-box models by querying their inputs and observing numerical outputs, without requiring access to the original training data or internal representation.

Other work studies extracting a weighted automaton of a chosen size, allowing an explicit tradeoff between model size and approximation quality. This is useful when a full extracted automaton would be too large to inspect or run efficiently.

A recent and especially relevant example is Ctrl-G, which distills an HMM approximation from an LLM and combines it with deterministic finite automata representing logical constraints.

However, Ctrl-G does not replace the complete LLM with the HMM. The LLM still provides the main text-generation distribution; the HMM makes future constraint probabilities tractable.

It therefore demonstrates:

useful portions of an LLM’s sequential probability behavior can be approximated by a non-neural probabilistic model;

but not:

an HMM currently reproduces the complete meaning, reasoning, and fluency of a general LLM.

The central difficulty is usually not estimating a transition matrix after the states are known. The difficult question is deciding which histories may safely be merged into the same state.

If the states are too broad, important context is lost. If they are too specific, the state space and matrices become enormous.

A practical compromise is to define semantically meaningful states manually, then learn only the transition and output probabilities.

For example:

human-defined state:
    waiting_for_version

observed events:
    version_provided
    product_changed
    ambiguous_number
    user_cancelled

learned probabilities:
    transition or clarification policy

This is less ambitious than automatically discovering the complete latent state of a language model, but much easier to inspect and maintain.

5. Symbolic knowledge distillation

Another possible use of development-time LLMs is generating a symbolic knowledge resource.

Possible outputs include:

  • knowledge-graph edges;
  • ontology candidates;
  • commonsense relations;
  • typed claims;
  • rule candidates;
  • schema mappings;
  • entity aliases;
  • questions and answers grounded in a document set.

Symbolic Knowledge Distillation used a general language model to author a large symbolic commonsense resource based on ATOMIC, with filtering used to select higher-quality generations.

This demonstrates that a neural teacher can help construct a symbolic corpus.

It does not mean every generated symbolic statement is true.

For a conversational runtime, the generated knowledge should still pass through an admission process such as:

generated candidate
→ source or evidence check
→ schema and type validation
→ attribution, time, and negation checks
→ duplicate and conflict detection
→ accepted / quarantined / rejected

The source of a generated claim should also be distinguishable:

directly extracted from source document
inferred by symbolic rule
proposed by neural development tool
approved by human reviewer

Otherwise a later user may see a symbolic triple without knowing whether it came from a document, a derivation, or a teacher model’s prior knowledge.

The most conservative use would be to let the neural system propose:

  • possible ontology links;
  • aliases;
  • extraction patterns;
  • candidate rules;
  • likely missing tests;

while keeping factual admission dependent on the original documents or independent review.

6. Rule merging, decision tables, LUTs, and approximate compression

Once many rules exist, a separate rule compiler could simplify them before deployment.

A possible compilation process is:

candidate rules
→ canonical representation
→ remove exact duplicates
→ remove unreachable rules
→ detect logical equivalence
→ detect subsumption
→ measure behavior on probe inputs
→ cluster behaviorally similar rules
→ synthesize generalized or parameterized rules
→ test the compressed rule base
→ deploy

The first part can be exact.

For example:

A and B     → X
A and not B → X

can sometimes be simplified to:

A → X

without changing behavior.

The later part may be approximate.

For example:

premium and purchase_age < 28 → refund
premium and purchase_age < 30 → refund
premium and purchase_age < 31 → refund

might be replaced by one parameterized rule if the small difference is acceptable for the intended task.

A useful objective could informally balance:

prediction error
+ number of rules
+ total rule length
+ runtime cost
+ maintenance cost

CORELS is one example of optimizing sparse rule lists using a regularized objective that trades predictive performance against rule-list complexity.

This does not directly merge arbitrary dialogue rules, but it establishes that bounded rule systems can be optimized explicitly for both accuracy and simplicity.

Decision tables and LUTs are also valid deployed representations.

They are particularly suitable for:

  • token normalization;
  • finite grammar actions;
  • dialogue transitions;
  • operator dispatch;
  • tool selection in a bounded state space;
  • validation codes;
  • error-to-recovery mappings;
  • policy-version selection;
  • frequent query results;
  • response-template selection.

A development-time decision table can be useful even if a compiler would eventually generate a table automatically. It gives developers a visible place to inspect:

  • missing combinations;
  • conflicting outcomes;
  • unreachable rows;
  • exceptions;
  • version differences;
  • generated-rule coverage.

A practical runtime need not use one enormous dense table. It may use a mixture of:

small dense LUTs
sparse hash tables
tries
decision trees
finite automata
default rule + exception table
memoized symbolic results

The main limitation is combinatorial explosion.

If a table key includes:

utterance category
dialogue state
user attributes
document version
time
tool availability
previous tool result

the full Cartesian product may be too large.

It is therefore more realistic to use many local tables at well-defined component boundaries than one universal table for the entire conversation.

Approximate compression should also be separated from exact compression.

Exact:
- duplicates;
- equivalences;
- unreachable branches;
- dominated rules.

Approximate:
- merged thresholds;
- removed rare exceptions;
- clustered states;
- low-rank probability tables;
- generalized behaviors.

Exact transformations can often be accepted automatically.

Approximate transformations should be evaluated on:

  • ordinary holdout examples;
  • rare but important exceptions;
  • action-safety tests;
  • ambiguity tests;
  • update and rollback tests.
7. A concrete development pipeline

A small initial project could use:

  • one language;
  • one bounded support or policy domain;
  • a versioned collection of 8–12 documents;
  • three tools;
  • perhaps 8–20 dialogue states;
  • an explicit semantic schema;
  • a small rule or program DSL.

Example tools:

check_product_version(product, version)
check_policy(policy, customer_type, date)
create_ticket(product, issue, contact)

Phase 1: define the runtime contracts manually

utterance
→ semantic form
→ dialogue state
→ accepted claims
→ conclusion or plan
→ action
→ response plan

Define each intermediate format before generating a large amount of data.

Phase 2: use neural tools for data creation

Generate:

  • paraphrases;
  • ambiguous requests;
  • slot labels;
  • semantic-form candidates;
  • dialogue examples;
  • tool-call examples;
  • negative and boundary cases.

Review a sample and train classical components where appropriate.

Phase 3: generate executable symbolic candidates

Generate:

  • parsing rules;
  • policy rules;
  • clarification rules;
  • action programs;
  • knowledge-admission rules;
  • response plans.

Run them in a sandboxed interpreter.

Phase 4: use counterexamples

Whenever a candidate fails, store:

input
expected result
actual result
component responsible
candidate version

Feed the counterexample into the next synthesis or repair iteration.

Phase 5: learn abstractions

When the accepted program corpus becomes large:

  • find repeated subprograms;
  • create reusable library functions;
  • rewrite old programs;
  • rerun regression tests.

Phase 6: compile

Convert readable authoring representations into suitable runtime forms:

rules → decision tree or indexed rule engine
state transitions → table or automaton
probabilistic policy → sparse matrix
finite mappings → LUT
program library → frozen interpreter or compiled code
response plans → templates or grammar

Phase 7: perform a cold-runtime test

Remove or block:

  • all teacher APIs;
  • neural model weights;
  • embedding services;
  • neural rerankers;
  • neural critics;
  • online neural fallback;
  • cached neural outputs not declared as runtime data.

Then run the complete test suite from a clean environment.

This verifies the deployment claim:

the system can function at every stage without neural networks.

It may still be historically true that neural systems helped create its rules or resources, but the runtime dependency is independently testable.

8. Evaluation controls

Several measurements should be kept separate.

Teacher fidelity

How often does the deployed system reproduce the neural teacher?

This measures behavioral imitation.

Independent correctness

How often does it match human-reviewed or otherwise independent expected results?

This measures whether the imitation is actually useful.

Task performance

Can it complete the full task over multiple turns, including actions and recovery?

This measures the integrated system.

Compression

How much was the generated artifact reduced?

Possible measurements:

  • number of rules;
  • total rule length;
  • number of states;
  • nonzero matrix entries;
  • library size;
  • executable size;
  • memory;
  • latency.

Maintenance

How much work is required to:

  • add a new capability;
  • correct one error;
  • update one source;
  • modify a schema;
  • replace the teacher;
  • retrain or recompile after a change?

Important controls

Independent holdout

Do not let the same teacher generate all training data and all expected answers.

Distribution shift

Test paraphrases, entities, and combinations not used during generation.

Rare exceptions

Give critical exceptions more weight than ordinary examples.

A small average error may still be unacceptable if all failures occur on tool execution or policy exceptions.

Ambiguity

Test whether the system asks for clarification instead of confidently following a compressed but incorrect rule.

Knowledge update

Change one source fact and verify that only dependent conclusions change.

Action failure

Make one tool fail and verify that the system does not fabricate success.

Ablation

Compare:

manual artifacts only
neural-generated artifacts before compression
after exact compression
after approximate compression

This reveals whether the neural generation and compression steps actually improve the system.

Full provenance

For each deployed artifact, record:

how it was proposed
which tests accepted it
which source examples support it
which compiler produced it
which version is deployed

This is especially useful if a generated rule later produces an unexpected result.

9. What appears mature, conditional, or still open

Relatively mature for bounded tasks

  • neural-assisted annotation;
  • weak supervision;
  • training classical classifiers from teacher-generated labels;
  • executable rule and program generation with testing;
  • finite-state extraction for restricted sequential behavior;
  • exact duplicate and subsumption removal;
  • decision-table and LUT compilation;
  • symbolic program library learning in constrained DSLs.

Demonstrated, but dependent on strong assumptions

  • extracting weighted automata from black-box sequential models;
  • HMM approximations of portions of LLM sequence behavior;
  • LLM-guided formal synthesis with solver feedback;
  • generating symbolic knowledge resources;
  • approximate rule compression;
  • automatically discovering reusable abstractions from program corpora.

Still broadly open

  • faithfully transferring general open-domain semantics into a compact symbolic representation;
  • discovering all of the right conversational states automatically;
  • preserving rare but important behavior while aggressively compressing a large teacher;
  • transferring broad social and linguistic fluency into templates, rules, or finite-state systems;
  • jointly compressing parsing, dialogue, knowledge, reasoning, planning, tools, and generation into one general non-neural optimizer;
  • guaranteeing equivalence outside the tested input distribution.

So the main practical opportunity is probably not to treat the LLM as a complete design that must somehow be copied neuron by neuron.

It is to treat it as a development-time search system that can produce:

  • candidate data;
  • candidate rules;
  • candidate programs;
  • candidate abstractions;
  • candidate states;
  • candidate tests.

The non-neural development tools can then turn those proposals into a smaller collection of verified and reusable runtime artifacts.

For your architecture, the most promising branch may depend on what your existing “natural language processing structures” already look like:

  • If they already use explicit rules or a DSL, rule/program generation plus verification and library learning may fit naturally.
  • If they use a bounded dialogue-state model, probabilistic transition matrices or automata extraction may fit.
  • If they mainly classify intents or extract fields, weak supervision followed by a classical learner may be enough.
  • If the main target is broad unrestricted fluency, that remains the least established part of this development-time distillation route.

The default recommendation would be:

define a small inspectable runtime language first, let neural tools generate many candidates inside that language, and invest more effort in the verifier, compression process, and independent tests than in any single generation prompt.

That would preserve the requirement of a fully non-neural runtime while making substantially more development strategies available.