This example shows how to inject external dependencies into an agent. The context is evaluated when the agent is run, acting like dependency injection for Agents.
Example prompts to try:
- “Summarize the top stories on HackerNews”
- “What are the trending tech discussions right now?”
- “Analyze the current top stories and identify trends”
- “What’s the most upvoted story today?”
Code
import json
from textwrap import dedent
import httpx
from agno.agent import Agent
from agno.models.openai import OpenAIChat
def get_top_hackernews_stories(num_stories: int = 5) -> str:
"""Fetch and return the top stories from HackerNews.
Args:
num_stories: Number of top stories to retrieve (default: 5)
Returns:
JSON string containing story details (title, url, score, etc.)
"""
# Get top stories
stories = [
{
k: v
for k, v in httpx.get(
f"https://hacker-news.firebaseio.com/v0/item/{id}.json"
)
.json()
.items()
if k != "kids" # Exclude discussion threads
}
for id in httpx.get(
"https://hacker-news.firebaseio.com/v0/topstories.json"
).json()[:num_stories]
]
return json.dumps(stories, indent=4)
# Create a Context-Aware Agent that can access real-time HackerNews data
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
# Each function in the context is evaluated when the agent is run,
# think of it as dependency injection for Agents
context={"top_hackernews_stories": get_top_hackernews_stories},
# add_context will automatically add the context to the user message
# add_context=True,
# Alternatively, you can manually add the context to the instructions
instructions=dedent("""\
You are an insightful tech trend observer! 📰
Here are the top stories on HackerNews:
{top_hackernews_stories}\
"""),
markdown=True,
)
# Example usage
agent.print_response(
"Summarize the top stories on HackerNews and identify any interesting trends.",
stream=True,
)
Usage
Create a virtual environment
Open the Terminal
and create a python virtual environment.
python3 -m venv .venv
source .venv/bin/activate
Install libraries
pip install openai httpx agno