Useful branding starts with accurate scope
PocketChat introduces itself as the Android Engineers AI learning assistant. Its system instruction supplies a reviewed directory of roadmaps, codelabs, courses, and 1:1 mentorship. This helps the model recommend a relevant next step without pretending to read course content or book sessions.
The directory is shared by request construction and app-owned resource buttons. That single source reduces drift between the URL the model is encouraged to mention and the URL the UI can open.
data class LearningResource(
val title: String,
val description: String,
val url: String
)
// Existing directory entry:
LearningResource(
"Codelabs",
"Hands-on Android projects",
"https://www.androidengineers.in/codelabs"
)
The system instruction says to answer the actual question first, suggest at most one relevant next step unless asked for all offerings, avoid pressure, and never invent prices or availability. These are instructions to evaluate, not a hard enforcement mechanism. A model can still produce an unsupported claim.
UI permissions stay in code
The app looks for known directory URLs in a completed answer and renders resource buttons from the curated records. It does not use arbitrary model-provided URLs as button destinations. A path-prefix collision matters: a mentorship link must not also match the courses index merely because the string starts the same way. Unit tests cover that boundary.
Review the matching code in AndroidEngineersGuide.mentionedResources and the ResourceLinks composable. Opening the browser is a user action; the model does not enroll, pay, or schedule anything. The renderer is intentionally small, so arbitrary Markdown link syntax is not equivalent to a verified app resource button.
Evaluate helpfulness and honesty
Ask for a beginner learning sequence, a hands-on project, and personalized interview guidance. Then ask for tomorrow's available slots and a guaranteed job outcome. The correct behavior is to give useful guidance, explain missing information, and refer to the current website rather than inventing details.
Check your understanding
How is this different from RAG? No documents are embedded or retrieved. The directory is a small static prompt context. Updating it changes future requests; it does not retrain the model or rewrite previously saved answers. Full-course retrieval requires an explicit ingestion, retrieval, and source-attribution design.