Skip to content

agno docs 中的 tool.overview中的下面代码多了引号 #689

Description

@lodion

Path: /tools/overview

"""

from agno.agent import Agent
from agno.models.openai import OpenAIResponses
from agno.run import RunContext

---------------------------------------------------------------------------

Tools

---------------------------------------------------------------------------

def search_web(query: str) -> str:
"""Search the web for information."""
return f"Search results for: {query}"

def search_internal_docs(query: str) -> str:
"""Search internal documentation (admin only)."""
return f"Internal doc results for: {query}"

def get_account_balance(account_id: str) -> str:
"""Get account balance (finance only)."""
return f"Balance for {account_id}: $42,000"

---------------------------------------------------------------------------

Callable Factory

---------------------------------------------------------------------------

def tools_for_user(run_context: RunContext):
"""Return different tools based on the user's role stored in session_state."""
role = (run_context.session_state or {}).get("role", "viewer")
print(f"--> Resolving tools for role: {role}")

base_tools = [search_web]
if role == "admin":
    base_tools.append(search_internal_docs)
if role in ("admin", "finance"):
    base_tools.append(get_account_balance)

return base_tools

---------------------------------------------------------------------------

Create Agent

---------------------------------------------------------------------------

agent = Agent(
model=OpenAIResponses(id="gpt-5-mini"),
tools=tools_for_user,
instructions=[
"You are a helpful assistant.",
"Use the tools available to you to answer the user's question.",
],
)

---------------------------------------------------------------------------

Run Agent

---------------------------------------------------------------------------

if name == "main":
# Run 1: viewer role - only search_web available
# Each user_id gets its own cached toolset
print("=== Run as viewer ===")
agent.print_response(
"Search for recent news about AI agents",
user_id="viewer_user",
session_state={"role": "viewer"},
stream=True,
)

# Run 2: admin role - all tools available
# Different user_id means the factory is called again with new context
print("\n=== Run as admin ===")
agent.print_response(
    "Search internal docs for the deployment guide and check account balance for ACC-001",
    user_id="admin_user",
    session_state={"role": "admin"},
    stream=True,
)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions