跳转至

API 指南总览

本章按功能讲解 xun 包暴露的 API:示例中的导入名与签名与源码一致,标为「伪代码」的片段只示意行为。跑示例前先设好 XUN_OPENAI_BASE_URL 与 XUN_OPENAI_API_KEY(见配置);更多可执行示例见仓库根目录的 demo.ipynb。

模块地图

flowchart LR
  ENTRY["入口<br/>entrypoint.py"] --> AGENT["智能体<br/>agent.py"]
  CONFIG["配置<br/>config.py"] --> AGENT
  AGENT --> LOOP["执行循环<br/>loop.py"]
  HOOKS["钩子与命令<br/>hooks.py · command.py"] --> LOOP
  LOOP --> CONV["会话与压缩<br/>conversation.py · compact.py"]
  LOOP --> TOOLBOX["工具<br/>toolbox.py · tools"]
  LOOP --> DISPLAY["显示<br/>display_abstract.py · displays"]
  EXT["扩展<br/>extension.py"] --> AGENT

公共导出

from xun import ... 可用的名字(见 src/xun/__init__.py):

分组 名称
智能体 Agent、AgentConfig、Workspace
工具 ToolBox、ToolCallContext、tool_attr
子智能体 AgentGetterProtocol、AgentGetterParam
显示 DisplayAbstract、Display、NullDisplay、WebDisplay、WebDisplayService
命令与钩子 Command、CommandRegistry、HookArgs、Hooks
压缩 CompactorAbstract、AutoCompactor
会话入口 setup_agent、interactive_session、web_session、main、main_serve、main_container
结果类型 Result、ToolResultType、ErrorInfo、CancelledError
扩展 ExtensionContext、extension_attr、xun_version

生命周期状态命名空间 T(T.Uninit / T.Init / T.Final)不在 __all__ 中,通过 Agent.T 访问。

最小骨架

from xun import Agent, AgentConfig, ToolBox, NullDisplay

def add(a: int, b: int) -> int:
    """Add two numbers."""
    return a + b

agent = Agent(
    toolbox=ToolBox().register(add),
    display=NullDisplay(),
    config=AgentConfig.default(),      # 跳过 config.json,但仍从 os.environ 取 ${XUN_*}
).initialize()

answer = agent.instruct("What is 2 + 3?").execute()
if answer.is_ok():
    print(answer.unwrap())
else:
    print(answer.unwrap_err().error)

需要一整套内置工具、默认系统提示与会话命令时,改用 setup_agent(default_tools=True),它返回的已是初始化后的智能体。

术语

术语 含义
工具(tool) 注册进 ToolBox 的普通可调用对象,以 JSON Schema 形式暴露给模型
轮 / 步(step) 一次模型调用及其引发的工具调用集合
事件(event) 智能体向显示层广播的载荷(ToolCallEvent、InfoEvent …)
钩子(hook) 执行路径上的可注册回调,参数对象可就地修改
扩展(extension) 放在 $XUN_HOME/extensions/ 下、在每个智能体初始化时重放的源文件
工作区(workspace) 智能体可读写的目录集合:workdir + 惰性临时目录