2.1 安装与包导入
本节你会学到
- 选哪条 install 命令对应你的用法(extras 矩阵)
- 永远要用的两个 import
- 懒加载机制让
import agentao即使依赖很重也保持便宜
安装
按你的使用场景选安装行。0.4.0 起 pip install agentao 只装嵌入用的最小核心, CLI / web fetch / 中文分词都是显式声明的 extras。
bash
# 嵌入宿主(`from agentao import Agentao`)—— 闭包最小
pip install 'agentao>=0.5.0'
# 用 web_fetch / web_search 工具 —— 加上 beautifulsoup4
pip install 'agentao[web]>=0.5.0'
# 用中文记忆召回 —— 加上 jieba
pip install 'agentao[i18n]>=0.5.0'
# CLI 用户 —— 加上 rich/prompt-toolkit/readchar/pygments
pip install 'agentao[cli]>=0.5.0'
# 从 0.3.x 升级且要零行为变更
pip install 'agentao[full]>=0.5.0'完整 extras 矩阵见 1.5 运行环境要求。 0.3.x → 0.4.0 迁移指南: docs/migration/0.3.x-to-0.4.0.md。
两个核心导入
python
from agentao import Agentao # Agent 主类
from agentao.transport import SdkTransport # 回调桥接,库嵌入首选这两行基本就是嵌入的"门票"。其他符号按需:
python
from agentao.transport import (
Transport, # Protocol 基类(自定义 Transport 时实现它)
AgentEvent, # 事件对象
EventType, # 事件枚举
NullTransport, # 静默 Transport(测试用)
)
from agentao.permissions import PermissionEngine, PermissionMode
from agentao.host import CancellationToken, Tool, AsyncToolBase # Tool / AsyncToolBase:写自定义工具时(同步 / 异步)
from agentao.cancellation import AgentCancelledError # 不从 agentao.host 导出懒加载优化
agentao/__init__.py 使用 PEP 562 __getattr__ 做了懒加载——from agentao import Agentao 不会拉入 OpenAI SDK、BeautifulSoup、jieba、filelock、rich、prompt_toolkit、readchar、click、pygments、starlette、uvicorn。
当前还会被 lazy 的依赖(首次运行时再加载):
| 库 | 首次触发点 |
|---|---|
openai | LLMClient(...) 构造(仅默认 LLM 客户端会用到——宿主自己注入 llm_client= 永远不加载) |
bs4 / httpx | WebFetchTool.execute() / WebSearchTool.execute() —— 注:0.4.0 起若 bs4 缺失,这两个工具在注册阶段就被跳过([web] extra 是显式 opt-in),LLM 看不到一个会执行失败的工具 |
jieba | 含 CJK 字符的查询触发 MemoryRetriever——纯 Latin 查询完全跳过 jieba;若 [i18n] 缺失,CJK 召回会一次性 warning 并降级为空 |
filelock | SkillRegistry.save()(CLI / agentao plugin install) |
mcp SDK(McpClientManager、McpTool) | 首次接入 MCP server(init_mcp 或宿主传 mcp_manager=) |
rich、prompt_toolkit、readchar、click、pygments | 只有 agentao/cli/* 会加载——嵌入路径完全不碰 |
对嵌入者意味着:
import agentao本身很轻——上述依赖都不会进入你的 import 时图。- 访问
agentao.Agentao会加载 agent 模块,但仍然不触发上面列出的 lazy 依赖。 - 宿主自己传入
llm_client=/mcp_registry=/ filesystem / shell 时,OpenAI SDK 与 MCP SDK 永远不会被加载。 from agentao.memory import ...可以独立使用而不触发 LLM 栈导入。- 不变量由两个测试守住:
tests/test_no_cli_deps_in_core.py(AST 扫描;任何 lazy 依赖被顶层 import 到agentao/cli/之外即失败)与tests/test_import_cost.py(子进程python -X importtime;import agentao跑出来的 trace 里不能出现这些名字)。
这让你可以把 Agentao 当作"条件依赖"——只有真正调用 Agent 功能时才承担导入成本。例如:
python
# 你的 FastAPI app 模块级
import agentao # 轻量,没有实际副作用
def get_agent():
from agentao import Agentao # 加载 agent 模块;openai / bs4 / jieba 仍不会被拉
return Agentao(...)版本与 __version__
python
import agentao
print(agentao.__version__) # "0.5.0"生产代码建议在启动时校验:
python
import agentao
from packaging.version import Version
MIN = Version("0.5.0")
if Version(agentao.__version__) < MIN:
raise RuntimeError(f"Need agentao >= {MIN}, got {agentao.__version__}")最小嵌入样板
python
"""你的产品里嵌入 Agentao 的最小代码量。"""
from pathlib import Path
from agentao import Agentao
from agentao.embedding import build_from_environment
from agentao.transport import SdkTransport
def make_agent(workdir: Path, on_token=None) -> Agentao:
transport = SdkTransport(
on_event=lambda ev: on_token(ev.data.get("chunk", ""))
if on_event_is_text(ev) else None,
)
# 凭据来自环境变量 / .env。要自己传,就调用
# Agentao(api_key=..., base_url=..., model=..., working_directory=workdir, transport=transport)。
return build_from_environment(working_directory=workdir, transport=transport)
def on_event_is_text(ev) -> bool:
return ev.type.name == "LLM_TEXT"每个参数的含义见下一节。
TL;DR
pip install 'agentao>=0.5.0'是嵌入最小集——按需加[web]/[i18n]/[cli]/[full]等 extras。- 永远要用的两个 import:
from agentao import Agentao+from agentao.transport import SdkTransport。 import agentao是便宜的——重依赖(openai/bs4/jieba/mcp/rich…)都被延迟到首次运行时才加载。- 生产环境锁定版本范围:
agentao>=0.5.0,<0.6。
版本说明
- 0.5.0 — 一次移除发布:
agentao.harness、agentao.session、Agentao(...)上的八个回调参数都没有了;agentao.embedding.sessions的project_root变为必填;max_tokens之后的参数全部仅关键字。anthropic>=1.6.0与openai并列成为核心依赖(惰性导入;只有显式选用的api_format="anthropic-messages"才会加载它)。详见 0.4.x → 0.5.0 迁移指南。 - 0.4.0 —
pip install agentao现在只装嵌入核心;[web]/[cli]/[i18n]等改为显式 extras。[full]复刻 0.3.x 的依赖闭包。详见迁移指南。 - 0.3.4 — 懒加载延迟范围扩展到全部 opt-in 依赖(OpenAI SDK、BeautifulSoup、jieba、filelock、rich、prompt_toolkit、readchar、click、pygments、starlette、uvicorn)。
tests/test_no_cli_deps_in_core.py与tests/test_import_cost.py强制约束。