Business & Research Use Cases Basics
8 examples to get you started with business and research agents - 5 basic and 3 intermediate.
You will shape a research question, fan out to sources, attach citations, and stop with a reviewable brief instead of a freeform chat reply.
This section is concept-heavy: sketches stay short so you can focus on evidence habits, not framework wiring.
Prerequisites
- Comfort with agent loops (decide → tool → observe → stop)
- A research or analysis question you can grade by hand
- Optional: Python 3.11+ if you want to run the tiny sketches
- Access to at least one retrieval surface (web search API, internal search, or a fixed doc set)
# Optional local sketch environment
python -m venv .venv && source .venv/bin/activate
pip install pydanticBasic Examples
1. Write a Gradable Research Goal
Before tools, write what "done" means in one sentence a reviewer can check.
Goal: Summarize three pricing changes from Competitor A in the last 90 days.
Done when: each change has a date, a source URL, and a one-line impact note.
Stop if: fewer than two independent sources after 6 search turns.- Vague goals ("learn about the market") produce wandering agents.
- Gradable goals name entities, time window, and minimum evidence.
- Stopping rules belong next to the goal, not in a later ops ticket.
Related: How Knowledge-Work Agents Differ from Coding Agents
2. Separate Query Expansion from Final Writing
Use a first pass to generate search queries, not the executive summary.
def expand_queries(question: str) -> list[str]:
# In production: model call that returns 3-5 diverse queries
return [
f"{question} official announcement",
f"{question} pricing 2026",
f"{question} customer reaction",
]- Diverse queries beat one clever query repeated.
- Keep expansion cheap; save a stronger model for synthesis.
- Log every query so reviewers see coverage, not only the final memo.
3. Treat Every Fetch as an Evidence Record
Store structured hits before the model paraphrases them.
from pydantic import BaseModel
class Evidence(BaseModel):
source_id: str
url: str
title: str
snippet: str
retrieved_at: str
def record_hit(raw: dict) -> Evidence:
return Evidence(
source_id=raw["id"],
url=raw["url"],
title=raw["title"],
snippet=raw["snippet"][:500],
retrieved_at=raw["ts"],
)- Evidence objects survive summarization errors.
- Cap snippet length to protect context budget.
- Prefer stable ids over titles alone.
4. Require Claim → Source Links in the Output Schema
Force the final answer into a structure that cannot omit citations.
class Claim(BaseModel):
text: str
source_ids: list[str]
confidence: str # high | medium | low
class Brief(BaseModel):
executive_summary: str
claims: list[Claim]
open_questions: list[str]- Schema constraints beat "please cite sources" in free prose.
open_questionsmakes ignorance visible.- Reject briefs with claims that reference missing
source_ids.
5. Bound the Research Loop
Knowledge agents need hard stops even when curiosity remains.
def research_loop(question: str, max_turns: int = 8) -> Brief:
evidence: list[Evidence] = []
for turn in range(max_turns):
# 1) model picks: search | fetch | finalize
# 2) run tool, append Evidence
# 3) if finalize or coverage_met(evidence): break
pass
return synthesize(question, evidence) # must validate Brief schema- Max turns and coverage checks prevent infinite browsing.
- Finalize is a decision, not an accident when tokens run out.
- Return partial briefs with open questions rather than inventing filler.
Related: Research Agents: Multi-Source Investigation and Synthesis
Intermediate Examples
6. Rank Sources Before You Trust Them
Not every successful HTTP 200 is equal evidence.
Prefer, in order:
1. Primary: filings, product pages, official blogs, signed policies
2. Secondary: reputable news with clear sourcing
3. Tertiary: aggregators, forums, unattributed slides
Drop: SEO farms, undated copies, paywall-teaser only pages- Teach ranking in the system policy and in tool descriptions.
- Record rank class on each Evidence row for later audit.
- One primary source can outweigh five tertiary mentions.
7. Synthesize Conflicts Explicitly
When sources disagree, the brief should show the conflict, not average it away.
Claim candidates:
- Source A (2026-03-01): list price $99/mo
- Source B (2026-05-12): promo $79/mo for annual
Good synthesis: "List remains $99/mo; a May promo offers $79 annual (B). Unclear if promo is ongoing."
Bad synthesis: "Price is about $90/mo."- Conflicts are findings, not failures.
- Date-stamp competing numbers.
- Prefer "unknown" over a false compromise.
8. Hand Off a Review Packet, Not Just a Paragraph
Package the brief so a human can approve in minutes.
Review packet:
- 5-bullet executive summary
- claims table with source_ids
- appendix: Evidence list (title, url, retrieved_at)
- open questions + suggested next queries
- cost/turns used- Reviewers need the trail without replaying the agent.
- Keep the appendix machine-readable for evals later.
- Never auto-publish from this stage until policy says so.
Related
- How Knowledge-Work Agents Differ from Coding Agents - why evidence beats green tests here
- Research Agents: Multi-Source Investigation and Synthesis - full research cheatsheet
- Data Analysis Agents: From Spreadsheet to Insight - numbers plus narrative
- Internal Knowledge-Base Agents with RAG Grounding - internal corpus pattern
- Use Cases for AI Agents Basics - broader category matching
Stack versions: Pins from the category manifest (verify at build): OpenRouter (~315+ models, July 2026 pricing/fees); LangGraph 1.0+; CrewAI 1.14+; Microsoft Agent Framework 1.0; Vercel AI SDK 6; Pydantic AI (latest); LlamaIndex (latest); OpenAI Agents SDK (latest + MCP); MCP (Linux Foundation governance); A2A (HTTP+SSE+JSON-RPC 2.0); Solana
@solana/web3.js+@solana/spl-token.