What is Seer and how it helps you measure retrieval quality
Seer is a retrieval evaluation and monitoring platform that helps teams keep RAG/context pipelines accurate, auditable, and fast, without labeled data.Why this matters: wrong or missing context is the #1 source of bad AI answers. Seer continuously measures retrieval quality from unlabeled live traffic, so you can test changes faster, ship them confidently, and catch regressions early.
What Seer Does
Log retrieval events from your app using a lightweight SDK
Compute metrics automatically from unlabeled inputs:
Recall: Our model enumerates the minimal requirements needed to answer a question and checks which are supported by the retrieved context. recall = covered_requirements / total_requirements
Precision: what proportion of retrieved documents in context are useful to answer the question/task. relevant_docs / total_docs
F1, nDCG: Derived from recall and precision
Compare variants using feature_flag in metadata for A/B testing
Monitor production with configurable sampling and real-time dashboards
How Seer Fits Your Stack
Tool Type
Example
Seer’s Role
Tracing
LangSmith, Arize
Seer focuses on retrieval quality signals, not full trace introspection. Use both together. Seer is OTEL-compatible and automatically picks up trace context.
Core Search Infra
Pinecone, Weaviate, Exa
These handle search. Seer evaluates whether the results were sufficient and helps evaluate and tune search infra for your product’s specific needs.
Observability
Datadog, Grafana
Seer provides domain-specific retrieval metrics that complement general APM.
Where Seer Fits In Your App
Seer integrates as a lightweight sidecar to your retrieval step:
Your app retrieves context from vector DBs, search APIs, or agent tools
After retrieval, call client.log() with the query and results
Seer evaluates quality asynchronously, with no impact on latency
Quick Example
from seer import SeerClientclient = SeerClient() # reads SEER_API_KEY from env# Your retrieval step (vector DB, search API, agent tool, etc.)def retrieve(query: str) -> list[dict]: return [ {"text": "Christopher Nolan directed Inception.", "score": 0.95}, {"text": "Nolan is British-American.", "score": 0.89}, ]query = "Who directed Inception and what is their nationality?"context = retrieve(query)client.log( task=query, context=context, metadata={ "env": "prod", "feature_flag": "retrieval-v1", # for A/B testing },)# Events are sent automatically in the background (fire-and-forget mode)
The SDK auto-flushes pending events when your process exits normally. You only need to call client.flush() explicitly if using os._exit(), process pools, or short-lived scripts.
Key Concepts
Task
The user query or question that triggered the retrieval.
Context
The list of passages/documents returned by your retriever. Can be simple strings or objects with metadata.
Metadata
Free-form key-value dict for filtering. Common fields:
env: environment (prod, staging, dev)
feature_flag: A/B test variant
Recall
The fraction of requirements needed to answer the query that are covered by the context. recall = 1.0 means the context is complete.
Precision
The fraction of context passages that actually contribute to the answer. Low precision = context bloat.
Multi-Hop & Agentic Retrieval
For multi-step retrieval (decomposed queries, agent loops), Seer supports:
is_final_context: mark which retrieval step provides the final evidence for the answer
subquery: track decomposed sub-questions for per-hop evaluation
Trace linking: automatic OTEL trace context to group related retrievals
# Example: Multi-hop retrievalclient.log( task="What awards did the director of Inception win?", context=hop2_results, subquery="What awards did Christopher Nolan win?", # this hop's goal is_final_context=True, # final evidence for the answer)
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Seer Docs","colors":{"primary":"#1FE0A1","light":"#10B981","dark":"#1FE0A1"},"logo":{"light":"https://mintcdn.com/seersearchinc/cM1syNm7U1TObVnY/images/logo-light.svg?fit=max\u0026auto=format\u0026n=cM1syNm7U1TObVnY\u0026q=85\u0026s=dd4e9cede8bb04499c2993804aad3aae","dark":"https://mintcdn.com/seersearchinc/cM1syNm7U1TObVnY/images/logo-dark.svg?fit=max\u0026auto=format\u0026n=cM1syNm7U1TObVnY\u0026q=85\u0026s=dd353d06fecc0a5bd0e06acdaa296e17"},"favicon":"/images/favicon.svg","navbar":{"links":[{"href":"https://seersearch.com","label":"Website"}]},"footer":{"socials":{}},"seo":{"indexing":"all"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"seersearchinc","hasAudioNarration":false,"actualSubdomain":"seersearchinc","customDomains":["docs.seersearch.com"],"gitSource":{"type":"github","owner":"blc16","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"entitlements":{},"buildId":"6ae9482100312e79e615ed49:success","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"Docs","count":14},{"language":"default","tag":"Platform","count":4},{"language":"default","tag":"Getting Started","count":4},{"language":"default","tag":"Guides","count":2},{"language":"default","tag":"Concepts","count":2},{"language":"default","tag":"SDK Reference","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"overview","slug":"/overview","pageMetadata":{"title":"What is Seer?","description":"What is Seer and how it helps you measure retrieval quality","href":"/overview","hidden":false},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"What is Seer and how it helps you measure retrieval quality\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Mermaid,Table,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Seer is a retrieval evaluation and monitoring platform that helps teams keep RAG/context pipelines accurate, auditable, and fast, without labeled data.`}),`\n`,_jsx(_components.p,{children:`Why this matters: wrong or missing context is the #1 source of bad AI answers. Seer continuously measures retrieval quality from unlabeled live traffic, so you can test changes faster, ship them confidently, and catch regressions early.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`what-seer-does`,children:`What Seer Does`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Log retrieval events`}),` from your app using a lightweight SDK`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Compute metrics automatically`}),` from unlabeled inputs:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Recall:`}),` Our model enumerates the minimal requirements needed to answer a question and checks which are supported by the retrieved context. `,_jsx(_components.code,{children:`recall = covered_requirements / total_requirements`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Precision:`}),` what proportion of retrieved documents in context are useful to answer the question/task. `,_jsx(_components.code,{children:`relevant_docs / total_docs`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`F1, nDCG:`}),` Derived from recall and precision`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Compare variants`}),` using `,_jsx(_components.code,{children:`feature_flag`}),` in metadata for A/B testing`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Monitor production`}),` with configurable sampling and real-time dashboards`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`how-seer-fits-your-stack`,children:`How Seer Fits Your Stack`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Tool Type`}),_jsx(_components.th,{children:`Example`}),_jsx(_components.th,{children:`Seer’s Role`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Tracing`})}),_jsx(_components.td,{children:`LangSmith, Arize`}),_jsxs(_components.td,{children:[`Seer focuses on `,_jsx(_components.strong,{children:`retrieval quality signals`}),`, not full trace introspection. Use both together. Seer is OTEL-compatible and automatically picks up trace context.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Core Search Infra`})}),_jsx(_components.td,{children:`Pinecone, Weaviate, Exa`}),_jsxs(_components.td,{children:[`These handle search. Seer evaluates `,_jsx(_components.strong,{children:`whether the results were sufficient`}),` and helps evaluate and tune search infra for your product’s specific needs.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Observability`})}),_jsx(_components.td,{children:`Datadog, Grafana`}),_jsxs(_components.td,{children:[`Seer provides `,_jsx(_components.strong,{children:`domain-specific retrieval metrics`}),` that complement general APM.`]})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`where-seer-fits-in-your-app`,children:`Where Seer Fits In Your App`}),`\n`,_jsx(Mermaid,{chart:`flowchart LR\n subgraph YourApp[\"Your Application\"]\n Q[User Query] --> R[Retrieval / Tool Call]\n R --> V[(Vector DB / Search API)]\n V --> R\n R --> L[LLM / Agent]\n L --> A[Answer]\n end\n\n R -. \"client.log(task, context)\" .-> S[Seer]\n\n subgraph Seer[\"Seer Platform\"]\n S --> E[Evaluator]\n E --> M[Metrics \u0026 Dashboards]\n end`}),`\n`,_jsxs(_components.p,{children:[`Seer integrates as a `,_jsx(_components.strong,{children:`lightweight sidecar`}),` to your retrieval step:`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Your app retrieves context from vector DBs, search APIs, or agent tools`}),`\n`,_jsxs(_components.li,{children:[`After retrieval, call `,_jsx(_components.code,{children:`client.log()`}),` with the query and results`]}),`\n`,_jsx(_components.li,{children:`Seer evaluates quality asynchronously, with no impact on latency`}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`quick-example`,children:`Quick Example`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`23`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`23`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` seer `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` SeerClient`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`client `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` SeerClient() `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# reads SEER_API_KEY from env`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Your retrieval step (vector DB, search API, agent tool, etc.)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` retrieve`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`query`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) -> list[`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`dict`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"text\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Christopher Nolan directed Inception.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"score\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0.95`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`},`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"text\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Nolan is British-American.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"score\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0.89`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`},`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`query `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Who directed Inception and what is their nationality?\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`context `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` retrieve(query)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`client.log(`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` task`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`query,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` context`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`context,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` metadata`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"env\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"prod\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"feature_flag\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"retrieval-v1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# for A/B testing`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Events are sent automatically in the background (fire-and-forget mode)`})}),`\n`]})})}),`\n`,_jsx(Tip,{title:`Auto-flush`,children:_jsxs(_components.p,{children:[`The SDK auto-flushes pending events when your process exits normally. You only need to call `,_jsx(_components.code,{children:`client.flush()`}),` explicitly if using `,_jsx(_components.code,{children:`os._exit()`}),`, process pools, or short-lived scripts.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`key-concepts`,children:`Key Concepts`}),`\n`,_jsx(Heading,{level:`3`,id:`task`,children:`Task`}),`\n`,_jsx(_components.p,{children:`The user query or question that triggered the retrieval.`}),`\n`,_jsx(Heading,{level:`3`,id:`context`,children:`Context`}),`\n`,_jsx(_components.p,{children:`The list of passages/documents returned by your retriever. Can be simple strings or objects with metadata.`}),`\n`,_jsx(Heading,{level:`3`,id:`metadata`,children:`Metadata`}),`\n`,_jsx(_components.p,{children:`Free-form key-value dict for filtering. Common fields:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`env`}),`: environment (prod, staging, dev)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`feature_flag`}),`: A/B test variant`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`recall`,children:`Recall`}),`\n`,_jsxs(_components.p,{children:[`The fraction of requirements needed to answer the query that are covered by the context. `,_jsx(_components.code,{children:`recall = 1.0`}),` means the context is complete.`]}),`\n`,_jsx(Heading,{level:`3`,id:`precision`,children:`Precision`}),`\n`,_jsx(_components.p,{children:`The fraction of context passages that actually contribute to the answer. Low precision = context bloat.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`multi-hop-\u0026-agentic-retrieval`,children:`Multi-Hop \u0026 Agentic Retrieval`}),`\n`,_jsx(_components.p,{children:`For multi-step retrieval (decomposed queries, agent loops), Seer supports:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`is_final_context`}),`: mark which retrieval step provides the final evidence for the answer`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`subquery`}),`: track decomposed sub-questions for per-hop evaluation`]}),`\n`,_jsx(_components.li,{children:`Trace linking: automatic OTEL trace context to group related retrievals`}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Example: Multi-hop retrieval`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`client.log(`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` task`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"What awards did the director of Inception win?\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` context`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`hop2_results,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` subquery`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"What awards did Christopher Nolan win?\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# this hop's goal`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` is_final_context`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`True`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# final evidence for the answer`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:_jsx(_components.a,{href:`/multi-hop-retrieval`,children:`Learn more → Multi-Hop Retrieval Guide`})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`use-cases`,children:`Use Cases`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Use Case`}),_jsx(_components.th,{children:`How Seer Helps`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Change Testing`})}),_jsx(_components.td,{children:`Compare retrieval variants (top k, rerankers, hybrid) before shipping`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Production Monitoring`})}),_jsx(_components.td,{children:`Track recall/precision trends, catch drift early`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Citation Auditing`})}),_jsx(_components.td,{children:`Verify answers cite the right sources for compliance`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Index Gap Analysis`})}),_jsx(_components.td,{children:`Find information categories that need improvement in your knowledge bases`})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`getting-started`,children:`Getting Started`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/quickstart`,children:`Quickstart`}),`: Make your first log in 5 minutes`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/sdk-python`,children:`Python SDK`}),` | `,_jsx(_components.a,{href:`/sdk-typescript`,children:`TypeScript SDK`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/metrics`,children:`Metrics`}),`: Understand what Seer computes`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/change-testing`,children:`Change Testing`}),`: A/B test retrieval changes`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/production-monitoring`,children:`Production Monitoring`}),`: Set up ongoing monitoring`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"What is Seer?","description":"What is Seer and how it helps you measure retrieval quality","href":"/overview","hidden":false}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What Seer Does","slug":"what-seer-does","depth":2,"children":[]},{"title":"How Seer Fits Your Stack","slug":"how-seer-fits-your-stack","depth":2,"children":[]},{"title":"Where Seer Fits In Your App","slug":"where-seer-fits-in-your-app","depth":2,"children":[]},{"title":"Quick Example","slug":"quick-example","depth":2,"children":[]},{"title":"Key Concepts","slug":"key-concepts","depth":2,"children":[{"title":"Task","slug":"task","depth":3,"children":[]},{"title":"Context","slug":"context","depth":3,"children":[]},{"title":"Metadata","slug":"metadata","depth":3,"children":[]},{"title":"Recall","slug":"recall","depth":3,"children":[]},{"title":"Precision","slug":"precision","depth":3,"children":[]}]},{"title":"Multi-Hop \u0026 Agentic Retrieval","slug":"multi-hop-\u0026-agentic-retrieval","depth":2,"children":[]},{"title":"Use Cases","slug":"use-cases","depth":2,"children":[]},{"title":"Getting Started","slug":"getting-started","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"seersearchinc","siteName":"Seer Docs","title":"What is Seer? - Seer Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-02-19T16:58:15.188Z","originalFileLocation":"overview.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"What is Seer and how it helps you measure retrieval quality\">\u003cmeta data-mint-head name=\"application-name\" content=\"Seer Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/seersearchinc/GWack65ptD0_vHdD/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/seersearchinc/GWack65ptD0_vHdD/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/seersearchinc/GWack65ptD0_vHdD/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/seersearchinc/GWack65ptD0_vHdD/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/seersearchinc/GWack65ptD0_vHdD/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/seersearchinc/GWack65ptD0_vHdD/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/seersearchinc/GWack65ptD0_vHdD/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/seersearchinc/GWack65ptD0_vHdD/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/seersearchinc/GWack65ptD0_vHdD/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"What is Seer? - Seer Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"What is Seer and how it helps you measure retrieval quality\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Seer Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.seersearch.com/overview\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://seersearchinc.mintlify.site/_mintlify/api/og/v2?division=Getting+Started\u0026amp;title=What+is+Seer%3F\u0026amp;description=What+is+Seer+and+how+it+helps+you+measure+retrieval+quality\u0026amp;theme=66175e371a3909bbce17fde0\u0026amp;signature=c00cdb44eef24e8dd3d636bd667ea6ce9fb848e38fc9643869853fef0649b717\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"What is Seer? - Seer Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"What is Seer and how it helps you measure retrieval quality\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://seersearchinc.mintlify.site/_mintlify/api/og/v2?division=Getting+Started\u0026amp;title=What+is+Seer%3F\u0026amp;description=What+is+Seer+and+how+it+helps+you+measure+retrieval+quality\u0026amp;theme=66175e371a3909bbce17fde0\u0026amp;signature=c00cdb44eef24e8dd3d636bd667ea6ce9fb848e38fc9643869853fef0649b717\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/seersearchinc/GWack65ptD0_vHdD/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Seer Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1FE0A1\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.seersearch.com/overview\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/overview.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.seersearch.com/#organization\",\"name\":\"Seer Docs\",\"url\":\"https://docs.seersearch.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/seersearchinc/cM1syNm7U1TObVnY/images/logo-light.svg?fit=max\u0026auto=format\u0026n=cM1syNm7U1TObVnY\u0026q=85\u0026s=dd4e9cede8bb04499c2993804aad3aae\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.seersearch.com#website\",\"name\":\"Seer Docs\",\"url\":\"https://docs.seersearch.com\",\"publisher\":{\"@id\":\"https://docs.seersearch.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.seersearch.com/overview#webpage\",\"url\":\"https://docs.seersearch.com/overview\",\"name\":\"What is Seer?\",\"description\":\"What is Seer and how it helps you measure retrieval quality\",\"dateModified\":\"2026-02-19T16:58:15.188Z\",\"isPartOf\":{\"@id\":\"https://docs.seersearch.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.seersearch.com/overview#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.seersearch.com/overview#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Getting Started\",\"item\":\"https://docs.seersearch.com/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What is Seer?\",\"item\":\"https://docs.seersearch.com/overview\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.seersearch.com/overview#article\",\"headline\":\"What is Seer?\",\"name\":\"What is Seer?\",\"description\":\"What is Seer and how it helps you measure retrieval quality\",\"url\":\"https://docs.seersearch.com/overview\",\"mainEntityOfPage\":{\"@id\":\"https://docs.seersearch.com/overview#webpage\"},\"dateModified\":\"2026-02-19T16:58:15.188Z\",\"publisher\":{\"@id\":\"https://docs.seersearch.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.seersearch.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Seer Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Seer Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/overview.md","siteName":"Seer Docs","nav":{"global":null,"tabs":[{"tab":"Docs","groups":[{"group":"Getting Started","pages":[{"title":"Introduction","description":"Retrieval evaluation \u0026 monitoring platform for AI applications","href":"/introduction"},{"title":"What is Seer?","href":"/overview"},{"title":"Quickstart","description":"Send your first log to Seer in 5 minutes","href":"/quickstart"},{"title":"Logging Events","href":"/logging"}]},{"group":"Concepts","pages":[{"title":"Metrics","href":"/metrics"},{"title":"Context \u0026 Event Schema","href":"/context-and-event-schema"}]},{"group":"Platform","pages":[{"title":"Monitoring Dashboard","href":"/production-monitoring"},{"title":"Logs Explorer","href":"/logs"},{"title":"Change Testing (A/B)","href":"/change-testing"},{"title":"Alerting","href":"/alerts"}]},{"group":"Guides","pages":[{"title":"Multi-Hop \u0026 Agentic Retrieval","href":"/multi-hop-retrieval"},{"title":"Test Seer's Accuracy","href":"/accuracy-testing"}]},{"group":"SDK Reference","pages":[{"title":"Python SDK","href":"/sdk-python"},{"title":"TypeScript SDK","href":"/sdk-typescript"}]}]}]},"basePath":"","title":"What is Seer? - Seer Docs","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":[],"chunks":[]}