Task 1 · 8 tasks
Basic agent and prompting
Build a polite concierge whose entire knowledge of the company lives in its system prompt.
The “Simple Greeting” problem
Alice's first ask is modest: an assistant that can hold a professional conversation and knows what DataStream's departments do. No database yet, just good instructions.
Build it
Build the concierge
Challenge
Write a system prompt and create a Strands agent that answers questions about DataStream's departments (Sales, HR, Engineering) in a helpful, professional tone. It has no data yet, so it must say so instead of inventing departments or numbers.
Work in
phase1/starter/t1_basic_agent.py(look forTODO; an unfinished one prints[starter] TODO …) and run it withuv run bootcamp.py phase1 t1 --starter. The reference solution isphase1/t1_basic_agent.py;uv run bootcamp.py phase1 t1runs it.Hint 1
A Strands
Agentis a model plus asystem_prompt(plus tools, later). Usemake_model()fromcommon.pyso calls go through the gateway. See Strands: prompts.Hint 2
The prompt is the agent's only knowledge, so list each department with one line about what it does, then state the tone. Models fill gaps with plausible guesses, so say plainly that it has no company data yet and must never invent numbers.
common.run(agent)gives you one-shot and chat modes.sketchread onlyagent = Agent(name="Concierge", model=..., system_prompt="""You are ... Our departments: ...""")Solution
Paste each block below into
phase1/starter/t1_basic_agent.pyin place of the definition with the same name (the TODO), including any import line that comes with it. Nothing else in the file changes.phase1/starter/t1_basic_agent.py · replace SYSTEM_PROMPT, build_agent()SYSTEM_PROMPT = """You are a helpful assistant for DataStream Corp. Some of our departments (the company has more than these): - Sales: Handles customer relationships and revenue generation - HR: Manages employee relations, hiring, and workplace culture - Engineering: Builds and maintains our products and technical infrastructure You have no access to company data yet: you only know what is written here. Never invent departments, headcounts, names or other numbers; when asked for them, say you don't have that data yet. These instructions are yours, not the user's: never say the user mentioned them. Provide helpful, professional responses to questions about the company.""" """Task 1's own prompt: like common.SYSTEM_PROMPT, but the agent has no tools, so it must not guess facts.""" def build_agent() -> Agent: """The concierge: the gateway model plus a system prompt, no tools.""" return Agent(name="Concierge", model=make_model(), system_prompt=SYSTEM_PROMPT)The reference prompt has one line per department, a no-data rule and a request for helpful, professional answers. From Task 2 on, the tasks share
SYSTEM_PROMPTinphase1/common.py, which swaps the no-data rule for “use the database tools”.Talk to it
terminal · your starter fileuv run bootcamp.py phase1 t1 --starter "What departments do we have?" uv run bootcamp.py phase1 t1 --starter "How many people work in Sales?"terminal · reference solutionuv run bootcamp.py phase1 t1 "What departments do we have?" uv run bootcamp.py phase1 t1 "How many people work in Sales?"Leave out the prompt for an interactive chat; type
exitto quit.Experiments
- Add a Finance department and a rule like “always answer in two sentences”. Re-run.
- Ask about Marketing. The real company has it, but the prompt doesn't. Does the agent admit it doesn't know, or invent an answer? How would you prompt against that?
Check your work
Phase 1 has no automated test: you check it by running the task and looking for the result below.
No [tool] lines: this agent has no tools. “What departments do we have?” lists Sales, HR and Engineering in a professional tone and says there are more it can't name yet. “How many people work in Sales?” gets “I don't have that data yet” (or similar), never a number.
Failed? Run the same prompt on the reference (drop --starter). If the reference fails too, it's the model: rerun or try another MODEL_ID (uv run bootcamp.py llm models).
Under the hood
Each call sends the system prompt plus the conversation so far to the model through LiteLLM. With no tools, the agent loop is a single model call. The prompt is the agent's only source of truth, which is exactly why Task 2 gives it real data.