Steering observations
Experimental API
Observation steering is an experimental feature. The API may change in future releases.
Available to Flex Plus and Enterprise customers — the same plans that generate observations.
Why use observation steering
Zep automatically derives observations — durable, evidence-backed patterns — from a graph. By default, Zep decides how each observation is worded and labels every observation with the type generic. Observation steering lets you guide that generation without changing the underlying evidence.
Steering influences generation along two axes. You can set either one on its own, or both together:
- Instruction: free-text guidance that shapes the wording and relevance of the observations Zep writes. The instruction cannot introduce facts, choose which evidence is used, or change how many observations are produced — evidence always comes from the graph.
- Observation types: up to ten named categories Zep may assign to an observation. Zep writes the selected type to the
observation_typeproperty on the observation node, which you can filter on during graph search. When none of your types fit, Zep falls back togeneric.
Steering applies only to observations generated after you configure it. It does not enqueue a job or regenerate existing observations; those update on their own as new evidence arrives.
Use cases
- Domain vocabulary: Label observations with categories that match your product —
commitment,risk,preference,churn_signal— then filter graph search by type. - Relevance tuning: Steer wording and emphasis toward what your agent needs, without post-processing.
- Per-user or per-graph control: Apply distinct guidance to a specific user or graph while keeping a project-wide default.
Basic usage
Use set_observation_steering to replace the configuration at a scope, and get_observation_steering to read it back. Both return the resulting configuration. With no user_id or graph_id, the request addresses the project-wide default.
Scoping to a user or graph
Steering resolves at one of three scopes:
- Project: the default configuration, applied to every user and graph in the project. Addressed when you pass neither
user_idnorgraph_id. - User: configuration for a single user’s graph, addressed with
user_id. - Graph: configuration for a single named graph, addressed with
graph_id.
Pass at most one of user_id or graph_id; passing both returns a 400. A user or graph configuration is a complete override, not a merge — when a user or graph has its own configuration, Zep uses it in full and ignores the project default. Reading a user or graph scope returns its effective configuration, falling back to the project default when that scope has none of its own.
Observation types
Each entry in types defines a category Zep may assign to an observation. When Zep generates an observation, it selects the best-fitting type and writes the name to the observation_type property on the observation node. If none of your configured types fit — or you configure no types — Zep uses generic.
You can configure up to 10 types.
Because the selected type is stored as the observation_type node property, you can retrieve observations of a given type with graph search property filters:
Clearing steering
Sending an empty configuration — a null instruction and an empty types list — clears steering at the addressed scope. Clearing the project scope removes the default; clearing a user or graph scope removes the override, so that scope falls back to the project default.
Configurable parameters
*Pass at most one of user_id or graph_id. Passing both returns a 400; passing neither addresses the project scope. In the TypeScript and Go SDKs, instruction and types are set on the request’s body field.
Observation type fields
Response
Both get_observation_steering and set_observation_steering return the resulting configuration at the addressed scope:
Reading a user or graph scope returns its effective configuration, falling back to the project default when that scope has no configuration of its own.
Related
- Observations — the durable, evidence-backed context that steering shapes.
- Searching the Graph — filter observations by the
observation_typeproperty. - Customizing context — the other ways to tailor how Zep builds context.