Implementing LLM Observability for Natural Language Querying Interface

honeycomb · Tech · 2023 · source Agentic: yes · promotional bias: low · source-backed · extracted with prompt 0.5.6 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: LLM observability for natural-language querying in an observability product

Honeycomb shipped a natural-language querying interface that solved many initial use cases, but the remaining long tail of paying-customer failures required a way to improve prompts, RAG behavior, parsing, and validation without regressing behaviors that already worked.

Constraints:

Architecture

Honeycomb treated its natural-language query feature as a distributed system and instrumented it with unusually deep observability. Each request captures user/team context, every prompt sent to OpenAI, decisions across an approximately 40-step RAG pipeline, full LLM responses, parsed data structures, validation failures, and user feedback. Those details are connected into an end-to-end distributed trace that includes the application, OpenAI, the RAG pipeline, and the query engine. Engineers then filter failures, inspect traces, make prompt or fine-tuning changes, deploy daily, and compare success/failure rates over the following 24 hours to form a continuous improvement flywheel.

Diagram confidence: explicit (topology described by the source).

flowchart LR
  Natural_language_query_UI["Natural language query UI"] --> RAG_pipeline["RAG pipeline"]
  Natural_language_query_UI --> Honeycomb_application_trace["Honeycomb application trace"]
  RAG_pipeline --> OpenAI_API["OpenAI API"]
  RAG_pipeline --> Parsed_response_pipeline["Parsed response pipeline"]
  OpenAI_API --> Parsed_response_pipeline
  Parsed_response_pipeline --> Query_engine["Query engine"]
  Parsed_response_pipeline --> Failure_analysis_views["Failure analysis views"]
  Honeycomb_application_trace --> RAG_pipeline
  Honeycomb_application_trace --> OpenAI_API
  Honeycomb_application_trace --> Query_engine
  Honeycomb_application_trace --> Failure_analysis_views
  User_feedback_signal["User feedback signal"] --> Honeycomb_application_trace
  Failure_analysis_views --> Prompt_engineering_loop["Prompt engineering loop"]
  Prompt_engineering_loop --> RAG_pipeline
  Prompt_engineering_loop --> Daily_deployment_review["Daily deployment review"]
  Daily_deployment_review --> Honeycomb_application_trace
  OpenTelemetry_ecosystem["OpenTelemetry ecosystem"] --> Honeycomb_application_trace
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
Natural language query UI User-facing interface where a user types a plain-language request and asks Honeycomb to produce a query. RAG pipeline, Honeycomb application trace
Honeycomb application trace End-to-end distributed trace connecting the product UI, LLM path, RAG pipeline, OpenAI call, and query engine behavior. Natural language query UI, RAG pipeline, OpenAI API, Query engine, Failure analysis views
RAG pipeline Approximately 40-step context and decision pipeline that prepares the LLM request before the OpenAI call. Natural language query UI, OpenAI API, Parsed response pipeline, Honeycomb application trace
OpenAI API External LLM service receiving full prompt text and returning natural-language-query outputs. RAG pipeline, Parsed response pipeline, Honeycomb application trace
Parsed response pipeline Transforms LLM responses into data structures, validates them, and records every failure mode. OpenAI API, Query engine, Failure analysis views
Query engine Honeycomb querying engine that executes generated queries after successful parsing and validation. Parsed response pipeline, Honeycomb application trace
Failure analysis views Honeycomb UI queries and group-bys that isolate failures by user input, model response, and validation dimensions. Honeycomb application trace, Prompt engineering loop
Prompt engineering loop Daily iteration process that uses observed failures to change prompts or model behavior and validate results. Failure analysis views, RAG pipeline, Daily deployment review
Daily deployment review 24-hour post-deploy comparison of success and failure rates for the whole user experience. Prompt engineering loop, Honeycomb application trace
User feedback signal End-of-interaction feedback captured with the rest of the request trace. Honeycomb application trace, Prompt engineering loop
OpenTelemetry ecosystem Instrumentation standard and future semantic-convention layer for AI and vector database telemetry. Honeycomb application trace

Data flow

A user types a natural-language request and clicks get query. Honeycomb records user and team context, runs the request through a RAG pipeline with roughly 40 decision steps, sends full prompts to OpenAI, parses and validates the LLM response, and executes the resulting query against Honeycomb's query engine when valid. Every step is captured as distributed tracing spans, including failures such as invalid JSON or no query output. Engineers group failures by input and model response, open traces to inspect root cause, change prompts or model behavior, deploy the fix, and observe the next 24 hours of real user behavior.

3 supporting quotes
“we released a natural language querying interface for our product so honeycomb being an observability tool is about querying data that you send”transcript, stated
“we capture user IDs team IDs the full text that is sent to every single request to open AI every single decision that we make in our rag pipeline”transcript, stated
“somebody clicks a button called get query and a query is actually executed against our querying engine and somebody sees the result”transcript, stated

Why this architecture

Honeycomb chose distributed tracing because the LLM feature is a multi-component distributed system, and prompt/RAG changes can alter behavior in ways traditional tests do not catch. Capturing every decision and failure mode gives engineers the data needed to isolate long-tail failures, make targeted prompt or fine-tuning changes, and verify whether real user outcomes improved.

3 supporting quotes
“typical tool belt that you might have as a software engineer to make software more reliable like unit tests or debugging in your IDE or writing regression tests”transcript, stated
“those are exceptionally difficult with LMS if not impossible depending on what you're doing”transcript, stated
“Honeycomb this is open AI That's a separate system and our quering engine which is another separate system this is actually technically a distributed system”transcript, stated

Models used: OpenAI LLM API

Scale

Alternatives considered (roads not taken)

Treat initial beta launch as production-ready

Rejected because: Honeycomb found that a useful first release still left important customer edge cases and required long-term iteration.

“but the problem is pretty good is not production ready it's like well it could be production ready but it's not necessarily like high quality production stuff over time”transcript, stated
“after that initial Splash your users are going to expect a lot more out of what you're able to do”transcript, stated

Rely on conventional unit tests, IDE debugging, and regression tests

Rejected because: The speaker says those tools are exceptionally difficult or impossible for some LLM work.

“unit tests or debugging in your IDE or writing regression tests or something like that those are exceptionally difficult with LMS”transcript, stated

Monitor only latency, token usage, and errors

Rejected because: Honeycomb needed the full prompt, RAG decisions, LLM responses, parsing, validation, and user feedback to isolate failures.

“not just latency and token usage and errors and that kind of stuff like what you'll kind of see with some stuff if you kind of Google it around today”transcript, stated
“we really really did this to an extent that we've not done with any other product feature before uh we captured literally everything”transcript, stated

Trace only the LLM API call

Rejected because: Honeycomb needed the trace connected to the full application and user experience.

“this Trace critically is connected to our entire application so that we can track the full user experience rather than just the call to the llm itself”transcript, stated

Make prompt changes by intuition alone

Rejected because: Prompt changes can cause regressions, so Honeycomb uses observed failures and 24-hour outcome checks to guide changes.

“very very subtle changes in your prompt can massively influence the way that the llm is going to behave”transcript, stated
“did our rate of success or failure for the entire user experience go up or down as a result of the work that we did yes or no”transcript, stated

Patterns

observability-tracing (operations)

Honeycomb instruments the full LLM user experience as distributed traces with 48 spans covering application, RAG, OpenAI, parsing, validation, query execution, and failures.

“we're using distributed tracing because what this is is Honeycomb this is open AI That's a separate system and our quering engine which is another separate system”transcript, stated
“the slice of that Trace that deals with the llm and deals with this stuff is 48 spans in length”transcript, stated

eval-driven-development (quality)

The team uses observed production failures, prompt changes, daily deploys, and 24-hour success/failure comparisons as the empirical loop for making the LLM feature reliable.

“this allows you to establish a flywheel where you can fix a problem in prompt engineering you deploy that fix and then you look at the past 24 hours”transcript, stated
“this is your data source for fine-tuning it's your data source for any kind of evaluations that you're doing”transcript, stated

rag-retrieval (knowledge-architecture)

The feature uses a RAG pipeline with many decision steps to supply context before sending the request to OpenAI.

“every single decision that we make in our rag pipeline which is about 40 or so steps”transcript, stated
“the full rag pipeline in particular makes up the majority of it and so to give you an example of this you can see there there's a collaps one thing that's over 20 spans”transcript, stated

structured-output-contract (quality)

Honeycomb parses LLM responses into data structures, validates them, and records failures such as invalid JSON.

“we take that data we actually parse it into some data structures then we validate those and those go through a series of steps”transcript, stated
“there's an error ml response does not contain valid Json I can Group by that field I can start querying for that specific instance of things that went on”transcript, stated

data-quality-loop (quality)

The system captures user feedback and real-world behavior as data for prompt engineering, fine-tuning, and evaluation improvements.

“every possible way those can those can fail we also capture those and we capture user feedback at the end”transcript, stated
“you track real World behavior and you use that to influence how you do your prompt engineering”transcript, stated

Tradeoffs

Deep request capture

Chose capturing full prompts, responses, RAG decisions, validation outcomes, and user feedback over capturing only standard latency, token, and error telemetry.

Rationale: The full context is needed to isolate specific failure modes and feed prompt engineering, fine-tuning, and evaluations.

“we captured literally everything like not just latency and token usage and errors and that kind of stuff”transcript, stated
“this is your data source for fine-tuning it's your data source for any kind of evaluations that you're doing”transcript, stated

Distributed tracing

Chose trace the full user request across Honeycomb, OpenAI, and query execution over observing the OpenAI call in isolation.

Rationale: The user experience spans multiple systems, so the trace has to connect the entire application path.

“this Trace critically is connected to our entire application so that we can track the full user experience rather than just the call to the llm itself”transcript, stated

Production-behavior iteration loop

Chose daily deploys followed by 24-hour success/failure observation over one-time prelaunch testing or intuition-led prompt tuning.

Rationale: Real user behavior reveals whether prompt changes improve or regress the full end-to-end experience.

“you look at the past 24 hours after you've deployed it and you say okay did our rate of success or failure for the entire user experience go up or down”transcript, stated

User-facing natural-language query interface

Chose let users type what they want and generate the query over requiring new users and prospects to learn Honeycomb's query UI first.

Rationale: The sales team could onboard prospects by letting them use the text box instead of teaching the interface.

“the sales team doesn't have to teach them that they can just say yeah go to the text box type in what you want hit the button that says get query”transcript, stated

Gotchas (what bit them)

A good first LLM launch is not the same as production reliability.

Root cause: Users expect more after launch, and long-tail customer edge cases appear once real usage begins.

Resolution: Instrument the feature deeply and plan for continuous post-launch iteration.

“but the problem is pretty good is not production ready it's like well it could be production ready but it's not necessarily like high quality production stuff over time”transcript, stated
“critically that 20% was also use case cases that our paying customers cared about so it was really important that we actually got this thing done”transcript, stated

Prompt edits can create invisible regressions.

Root cause: Subtle prompt changes can massively alter LLM behavior, including behavior the team did not realize was working.

Resolution: Use trace data and real success/failure rates to validate changes after deployment.

“very very subtle changes in your prompt can massively influence the way that the llm is going to behave”transcript, stated
“it's really really easy to introduce a regression often for things that you may not have even understood were working in the first place”transcript, stated

RAG pipelines multiply sources of LLM behavior change.

Root cause: Every additional context source or RAG decision becomes another variable affecting the model response.

Resolution: Capture every RAG pipeline decision and inspect the trace before making prompt or fine-tuning fixes.

“the more that you build on top of them like with a rag pipeline or pulling in other bits of data's context”transcript, stated
“if you tweak any one of those things again massively influences the way that the LM is going to behave”transcript, stated

Latency and error metrics alone miss the reasons an LLM feature failed the user.

Root cause: Failures can arise from prompts, RAG decisions, model responses, parsing, validation, or query execution.

Resolution: Capture full prompts, responses, parsed structures, validation outcomes, and every possible failure mode.

“not just latency and token usage and errors and that kind of stuff like what you'll kind of see with some stuff if you kind of Google it around today”transcript, stated
“then we validate those and those go through a series of steps every possible way those can those can fail we also capture those”transcript, stated

LLM features need distributed-system debugging.

Root cause: The product application, OpenAI, and the query engine are separate systems connected by the user request path.

Resolution: Build a distributed trace connected to the full user experience rather than only the LLM call.

“this is actually technically a distributed system and so the best way to understand distributed systems is to build a distributed trace”transcript, stated
“this Trace critically is connected to our entire application so that we can track the full user experience rather than just the call to the llm itself”transcript, stated

Evaluation

Honeycomb evaluates the LLM feature through production observability rather than only offline tests. Engineers group failure events, inspect traces, identify invalid responses or missing queries, deploy prompt/model changes, and compare full user-experience success or failure over the next 24 hours. The same captured data supports prompt engineering, fine-tuning, and formal evaluations.

Metrics: about 80% of use cases solved in first release · 20% long-tail failure set important to paying customers · about 40 RAG pipeline steps · 48 spans in the LLM trace slice · more than 20 spans in one collapsed RAG section · daily deploy cycle · 24-hour post-deploy success/failure comparison · OpenTelemetry support for 11 languages

3 supporting quotes
“I have narrowed this down to every single time we failed to produce a query for someone and I'm grouping by user input and the response of the large language model”transcript, stated
“there's an error ml response does not contain valid Json I can Group by that field I can start querying for that specific instance of things”transcript, stated
“did our rate of success or failure for the entire user experience go up or down as a result of the work that we did yes or no”transcript, stated

Outcomes

The case is a strong production LLMOps example because it ties architecture, operations, and business outcomes together: the LLM feature is monitored at the request-trace level, not as a black-box API call, and each improvement is checked against real behavior.

3 supporting quotes
“we got quite a bit higher product retention overall especially for new teams who come in and don't know how to use our interface”transcript, stated
“we got higher conversion rates to paid tiers within our product and our sales team in particular really really loved the feature”transcript, stated
“we're taking uh this very very seriously we think that Ai and Vector databases and all that are critical components of applications”transcript, stated