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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions