1. 核心API概览

LiveKit Agents框架提供了一套完整的API来构建实时语音代理。以下是主要的公共API入口点:

1.1 主要API类别

graph TB
    subgraph "核心API (Core APIs)"
        Agent[Agent<br/>代理核心类]
        AgentSession[AgentSession<br/>会话管理类]
        JobContext[JobContext<br/>任务上下文类]
        Worker[Worker<br/>工作进程类]
    end
    
    subgraph "工具API (Tool APIs)"
        FunctionTool[FunctionTool<br/>函数工具接口]
        function_tool[function_tool<br/>装饰器函数]
        ChatContext[ChatContext<br/>对话上下文]
    end
    
    subgraph "组件API (Component APIs)"
        LLM[LLM<br/>大语言模型基类]
        STT[STT<br/>语音转文本基类]
        TTS[TTS<br/>文本转语音基类]
        VAD[VAD<br/>语音活动检测]
    end
    
    subgraph "事件API (Event APIs)"
        EventEmitter[EventEmitter<br/>事件发射器]
        AgentEvent[AgentEvent<br/>代理事件]
        RunContext[RunContext<br/>运行上下文]
    end
    
    subgraph "CLI API (CLI APIs)"
        cli[cli.run_app<br/>应用启动函数]
        WorkerOptions[WorkerOptions<br/>工作选项配置]
    end

2. 核心API详细分析

2.1 Agent 类

2.1.1 类定义和构造函数

class Agent:
    """
    Agent类是LiveKit Agents框架的核心,代表一个基于LLM的语音代理
    
    主要功能:
    - 定义代理的行为指令和工具集
    - 管理与各种AI服务的集成
    - 处理用户交互和生成响应
    - 支持动态工具添加和更新
    """
    
    def __init__(
        self,
        *,
        instructions: str,                                    # 代理指令,定义代理行为
        chat_ctx: NotGivenOr[llm.ChatContext | None] = NOT_GIVEN,  # 聊天上下文
        tools: list[llm.FunctionTool | llm.RawFunctionTool] | None = None,  # 工具列表
        turn_detection: NotGivenOr[TurnDetectionMode | None] = NOT_GIVEN,   # 转换检测模式
        stt: NotGivenOr[stt.STT | STTModels | str | None] = NOT_GIVEN,      # 语音转文本
        vad: NotGivenOr[vad.VAD | None] = NOT_GIVEN,                        # 语音活动检测
        llm: NotGivenOr[llm.LLM | llm.RealtimeModel | LLMModels | str | None] = NOT_GIVEN,  # 大语言模型
        tts: NotGivenOr[tts.TTS | TTSModels | str | None] = NOT_GIVEN,      # 文本转语音
        mcp_servers: NotGivenOr[list[mcp.MCPServer] | None] = NOT_GIVEN,    # MCP服务器列表
        allow_interruptions: NotGivenOr[bool] = NOT_GIVEN,                  # 是否允许中断
        min_consecutive_speech_delay: NotGivenOr[float] = NOT_GIVEN,        # 最小连续语音延迟
        use_tts_aligned_transcript: NotGivenOr[bool] = NOT_GIVEN,           # 使用TTS对齐转录
        min_endpointing_delay: NotGivenOr[float] = NOT_GIVEN,               # 最小端点延迟
        max_endpointing_delay: NotGivenOr[float] = NOT_GIVEN,               # 最大端点延迟
    ) -> None:
        """
        Agent构造函数详细说明:
        
        参数处理流程:
        1. 初始化工具列表,包括显式传入的工具和通过装饰器发现的工具
        2. 创建或复制聊天上下文,确保工具正确关联
        3. 处理字符串类型的组件配置,自动转换为相应的实例
        4. 保存所有配置参数供后续使用
        """
        tools = tools or []
        self._instructions = instructions
        
        # 自动发现使用@function_tool装饰的方法
        self._tools = tools.copy() + find_function_tools(self)
        
        # 创建聊天上下文,包含所有工具
        self._chat_ctx = chat_ctx.copy(tools=self._tools) if chat_ctx else ChatContext.empty()
        
        # 智能组件初始化:支持字符串配置自动转换
        if isinstance(stt, str):
            stt = inference.STT(model=stt)  # 自动创建STT实例
        if isinstance(llm, str):
            llm = inference.LLM(model=llm)  # 自动创建LLM实例
        if isinstance(tts, str):
            tts = inference.TTS(model=tts)  # 自动创建TTS实例
        
        # 保存所有配置
        self._stt = stt
        self._llm = llm
        self._tts = tts
        self._vad = vad
        # ... 其他参数保存

2.1.2 关键方法

class Agent:
    @property
    def label(self) -> str:
        """
        获取代理标签
        
        返回值:
        - str: 代理的显示标签,用于日志和调试
        """
        return getattr(self, "_label", self.__class__.__name__)
    
    @property
    def tools(self) -> list[llm.FunctionTool]:
        """
        获取代理工具列表
        
        返回值:
        - list[FunctionTool]: 当前代理可用的所有工具函数
        """
        return self._tools.copy()
    
    async def update_tools(self, tools: list[llm.FunctionTool]) -> None:
        """
        动态更新代理工具集
        
        参数:
        - tools: 新的工具列表
        
        功能说明:
        - 运行时动态添加或删除工具
        - 自动更新聊天上下文中的工具引用
        - 支持热更新,无需重启代理
        """
        self._tools = tools
        self._chat_ctx = self._chat_ctx.copy(tools=tools)
        
        # 如果代理正在运行,通知会话更新
        if hasattr(self, '_session'):
            await self._session._update_agent_tools(self)
    
    async def on_enter(self) -> None:
        """
        代理进入会话时的回调函数
        
        功能说明:
        - 代理被添加到会话时自动调用
        - 子类可重写此方法实现自定义入口逻辑
        - 常用于生成欢迎消息或初始化状态
        """
        pass
    
    async def on_exit(self) -> None:
        """
        代理退出会话时的回调函数
        
        功能说明:
        - 代理从会话中移除时调用
        - 用于清理资源和保存状态
        - 子类可重写实现自定义清理逻辑
        """
        pass

2.2 AgentSession 类

2.2.1 构造函数详细分析

class AgentSession(rtc.EventEmitter[EventTypes], Generic[Userdata_T]):
    """
    AgentSession是LiveKit Agents的运行时核心,负责:
    - 协调媒体流、语音/LLM组件和工具编排
    - 处理音频、视频、文本I/O与STT、VAD、TTS、LLM的交互
    - 管理转换检测、端点检测、中断和多步工具调用
    - 通过事件回调暴露所有功能,让开发者专注于工具函数编写
    """
    
    def __init__(
        self,
        *,
        turn_detection: NotGivenOr[TurnDetectionMode] = NOT_GIVEN,
        stt: NotGivenOr[stt.STT | STTModels | str] = NOT_GIVEN,
        vad: NotGivenOr[vad.VAD] = NOT_GIVEN,
        llm: NotGivenOr[llm.LLM | llm.RealtimeModel | LLMModels | str] = NOT_GIVEN,
        tts: NotGivenOr[tts.TTS | TTSModels | str] = NOT_GIVEN,
        mcp_servers: NotGivenOr[list[mcp.MCPServer]] = NOT_GIVEN,
        userdata: NotGivenOr[Userdata_T] = NOT_GIVEN,
        allow_interruptions: bool = True,
        discard_audio_if_uninterruptible: bool = True,
        min_interruption_duration: float = 0.5,
        min_interruption_words: int = 0,
        min_endpointing_delay: float = 0.5,
        max_endpointing_delay: float = 6.0,
        max_tool_steps: int = 3,
        video_sampler: NotGivenOr[_VideoSampler | None] = NOT_GIVEN,
        user_away_timeout: float | None = 15.0,
        false_interruption_timeout: float | None = 2.0,
        resume_false_interruption: bool = True,
        min_consecutive_speech_delay: float = 0.0,
        use_tts_aligned_transcript: NotGivenOr[bool] = NOT_GIVEN,
        tts_text_transforms: NotGivenOr[Sequence[TextTransforms] | None] = NOT_GIVEN,
        preemptive_generation: bool = False,
        conn_options: NotGivenOr[SessionConnectOptions] = NOT_GIVEN,
        loop: asyncio.AbstractEventLoop | None = None,
    ) -> None:

2.2.2 参数详细说明

参数名类型默认值说明
turn_detectionTurnDetectionModeNOT_GIVEN转换检测策略:stt/vad/realtime_llm/manual
sttSTT/strNOT_GIVEN语音转文本后端,支持字符串模型名
vadVADNOT_GIVEN语音活动检测器
llmLLM/RealtimeModel/strNOT_GIVEN大语言模型或实时模型
ttsTTS/strNOT_GIVEN文本转语音引擎
allow_interruptionsboolTrue是否允许用户中断代理发言
min_interruption_durationfloat0.5注册为中断的最小语音长度(秒)
min_endpointing_delayfloat0.5端点检测后的最小等待时间(秒)
max_endpointing_delayfloat6.0强制终止转换的最大等待时间(秒)
max_tool_stepsint3每个LLM回合的最大连续工具调用数
preemptive_generationboolFalse是否启用预先生成响应

2.2.3 核心方法

class AgentSession:
    async def start(
        self,
        agent: Agent,
        room: rtc.Room,
        *,
        room_input_options: RoomInputOptions | None = None,
        room_output_options: RoomOutputOptions | None = None,
    ) -> None:
        """
        启动代理会话
        
        参数:
        - agent: 要运行的代理实例
        - room: LiveKit房间对象
        - room_input_options: 房间输入选项配置
        - room_output_options: 房间输出选项配置
        
        功能说明:
        1. 初始化音视频I/O管道
        2. 连接各个AI组件(STT、LLM、TTS、VAD)
        3. 启动事件监听和处理循环
        4. 调用代理的on_enter回调
        
        调用链路:
        start() -> _initialize_components() -> _setup_pipelines() -> _start_event_loop()
        """
        self._agent = agent
        self._room = room
        
        # 初始化组件
        await self._initialize_components()
        
        # 设置音视频管道
        await self._setup_pipelines(room_input_options, room_output_options)
        
        # 启动事件处理循环
        await self._start_event_loop()
        
        # 调用代理入口回调
        if hasattr(agent, 'on_enter'):
            await agent.on_enter()
    
    async def generate_reply(
        self,
        *,
        instructions: str | None = None,
        tools: list[llm.FunctionTool] | None = None,
    ) -> None:
        """
        生成代理回复
        
        参数:
        - instructions: 可选的特殊指令,覆盖代理默认指令
        - tools: 可选的工具列表,覆盖代理默认工具
        
        功能说明:
        - 触发LLM生成响应
        - 支持临时指令和工具覆盖
        - 自动处理工具调用和TTS合成
        
        调用链路:
        generate_reply() -> _prepare_llm_request() -> _call_llm() -> _process_response()
        """
        # 准备LLM请求
        request_ctx = await self._prepare_llm_request(instructions, tools)
        
        # 调用LLM生成响应
        response = await self._call_llm(request_ctx)
        
        # 处理响应(工具调用、TTS等)
        await self._process_response(response)

2.3 JobContext 类

2.3.1 类定义和主要属性

class JobContext:
    """
    JobContext表示一个交互会话的起点,类似于Web服务器中的请求处理器
    
    主要功能:
    - 管理与LiveKit房间的连接
    - 提供日志上下文和元数据
    - 处理会话生命周期事件
    - 管理资源清理和关闭回调
    """
    
    def __init__(
        self,
        *,
        proc: JobProcess,           # 关联的作业进程
        info: RunningJobInfo,       # 运行中的作业信息
        room: rtc.Room,            # LiveKit房间对象
        publisher: rtc.LocalParticipant | None = None,  # 本地参与者
    ) -> None:
        self._proc = proc
        self._info = info
        self._room = room
        self._publisher = publisher
        self._shutdown_callbacks: list[Callable[[], Awaitable[None]]] = []
        self._log_context_fields: dict[str, Any] = {}
    
    @property
    def room(self) -> rtc.Room:
        """
        获取关联的LiveKit房间
        
        返回值:
        - rtc.Room: 当前会话的房间对象
        """
        return self._room
    
    @property
    def proc(self) -> JobProcess:
        """
        获取关联的作业进程
        
        返回值:
        - JobProcess: 当前作业的进程对象,包含共享数据和配置
        """
        return self._proc
    
    @property
    def log_context_fields(self) -> dict[str, Any]:
        """
        获取日志上下文字段
        
        返回值:
        - dict: 日志记录中包含的上下文信息
        """
        return self._log_context_fields
    
    @log_context_fields.setter
    def log_context_fields(self, value: dict[str, Any]) -> None:
        """
        设置日志上下文字段
        
        参数:
        - value: 要设置的上下文字段字典
        """
        self._log_context_fields = value

2.3.2 核心方法

class JobContext:
    async def connect(
        self,
        *,
        auto_subscribe: AutoSubscribe = AutoSubscribe.SUBSCRIBE_ALL,
        rtc_config: rtc.RtcConfiguration | None = None,
        room_options: rtc.RoomOptions | None = None,
        participant_kinds: list[rtc.ParticipantKind.ValueType] | None = None,
    ) -> None:
        """
        连接到LiveKit房间
        
        参数:
        - auto_subscribe: 自动订阅策略
        - rtc_config: RTC配置选项
        - room_options: 房间选项配置
        - participant_kinds: 参与者类型过滤
        
        功能说明:
        1. 使用提供的令牌连接到LiveKit服务器
        2. 根据配置自动订阅音视频流
        3. 设置参与者事件监听
        4. 初始化房间状态
        
        调用链路:
        connect() -> room.connect() -> _setup_subscriptions() -> _register_events()
        """
        # 连接到房间
        await self._room.connect(
            url=self._info.url,
            token=self._info.token,
            options=room_options,
            rtc_config=rtc_config,
        )
        
        # 设置自动订阅
        await self._setup_subscriptions(auto_subscribe, participant_kinds)
        
        # 注册事件监听器
        self._register_room_events()
    
    def add_shutdown_callback(
        self, 
        callback: Callable[[], Awaitable[None]]
    ) -> None:
        """
        添加关闭回调函数
        
        参数:
        - callback: 会话结束时要执行的异步回调函数
        
        功能说明:
        - 在会话结束时自动执行清理操作
        - 支持多个回调函数,按添加顺序执行
        - 常用于资源清理、数据保存等操作
        """
        self._shutdown_callbacks.append(callback)
    
    async def wait_for_participant(
        self,
        *,
        identity: str | None = None,
        timeout: float = 10.0,
        participant_kinds: list[rtc.ParticipantKind.ValueType] | None = None,
    ) -> rtc.RemoteParticipant:
        """
        等待特定参与者加入房间
        
        参数:
        - identity: 参与者身份标识(可选)
        - timeout: 等待超时时间(秒)
        - participant_kinds: 参与者类型过滤
        
        返回值:
        - rtc.RemoteParticipant: 匹配条件的参与者对象
        
        功能说明:
        - 阻塞等待直到符合条件的参与者加入
        - 支持按身份或类型过滤参与者
        - 超时后抛出TimeoutError异常
        """
        return await wait_for_participant(
            self._room,
            identity=identity,
            timeout=timeout,
            participant_kinds=participant_kinds or DEFAULT_PARTICIPANT_KINDS,
        )

2.4 Worker 类

2.4.1 工作进程配置

@dataclass
class WorkerOptions:
    """
    Worker配置选项
    
    属性说明:
    - entrypoint_fnc: 入口点函数,每个新作业的处理函数
    - prewarm_fnc: 预热函数,进程启动时的初始化函数
    - request_fnc: 请求处理函数,作业请求的自定义处理逻辑
    - initialize_process_fnc: 进程初始化函数
    - worker_type: 工作进程类型(ROOM/PUBLISHER)
    - permissions: 工作进程权限配置
    - max_retry: 最大重试次数
    - ws_url: WebSocket服务器URL
    - api_key: API密钥
    - api_secret: API密钥
    - port: HTTP服务器端口
    - host: HTTP服务器主机
    """
    entrypoint_fnc: Callable[[JobContext], Awaitable[None]] | None = None
    prewarm_fnc: Callable[[JobProcess], Any] | None = None
    request_fnc: Callable[[JobRequest], Awaitable[None]] | None = None
    initialize_process_fnc: Callable[[JobProcess], Any] | None = None
    worker_type: WorkerType = WorkerType.ROOM
    permissions: WorkerPermissions | None = None
    max_retry: int = 3
    ws_url: str | None = None
    api_key: str | None = None
    api_secret: str | None = None
    port: int | None = None
    host: str | None = None

class Worker:
    """
    Worker是协调任务调度和为用户会话启动代理的主进程
    
    主要功能:
    - 管理多个并发作业进程
    - 处理来自LiveKit服务器的作业分配
    - 监控系统资源和负载
    - 提供健康检查和状态报告
    - 支持热重载和优雅关闭
    """
    
    def __init__(
        self,
        options: WorkerOptions,
        *,
        loop: asyncio.AbstractEventLoop | None = None,
    ) -> None:
        """
        Worker构造函数
        
        参数:
        - options: Worker配置选项
        - loop: 事件循环(可选)
        
        初始化流程:
        1. 验证和处理配置选项
        2. 设置HTTP服务器和WebSocket连接
        3. 初始化进程池和任务队列
        4. 注册信号处理器和关闭回调
        """
        self._options = options
        self._loop = loop or asyncio.get_event_loop()
        self._http_server: http_server.HttpServer | None = None
        self._tasks: set[asyncio.Task[Any]] = set()
        self._shutdown_event = asyncio.Event()
        
        # 初始化组件
        self._initialize_components()

2.4.2 核心方法

class Worker:
    async def run(self) -> None:
        """
        启动Worker主循环
        
        功能说明:
        1. 启动HTTP服务器
        2. 连接到LiveKit服务器
        3. 开始监听作业分配
        4. 处理并发作业执行
        5. 监控系统状态和负载
        
        调用链路:
        run() -> _start_http_server() -> _connect_to_livekit() -> _start_job_loop()
        """
        try:
            # 启动HTTP服务器
            await self._start_http_server()
            
            # 连接到LiveKit服务器
            await self._connect_to_livekit()
            
            # 开始作业处理循环
            await self._start_job_loop()
            
        except Exception as e:
            logger.error(f"Worker运行失败: {e}")
            raise
        finally:
            await self._cleanup()
    
    async def _handle_job_assignment(
        self, 
        assignment: agent.JobAssignment
    ) -> None:
        """
        处理作业分配
        
        参数:
        - assignment: 来自LiveKit服务器的作业分配
        
        功能说明:
        1. 验证作业请求的有效性
        2. 创建新的作业进程或线程
        3. 执行用户定义的入口点函数
        4. 监控作业执行状态
        5. 处理作业完成和清理
        
        调用链路:
        _handle_job_assignment() -> _create_job_process() -> _execute_entrypoint()
        """
        try:
            # 创建作业上下文
            job_ctx = await self._create_job_context(assignment)
            
            # 执行入口点函数
            if self._options.entrypoint_fnc:
                await self._options.entrypoint_fnc(job_ctx)
            
            # 等待作业完成
            await job_ctx.wait_for_completion()
            
        except Exception as e:
            logger.error(f"作业执行失败: {e}")
            # 报告失败状态到服务器
            await self._report_job_failure(assignment, e)
        finally:
            # 清理作业资源
            await self._cleanup_job(assignment)

3. 工具API详细分析

3.1 function_tool 装饰器

def function_tool(
    fn: Callable[..., Any] | None = None,
    *,
    name: str | None = None,
    description: str | None = None,
    auto_retry: bool = True,
) -> Callable[..., Any]:
    """
    函数工具装饰器,将普通函数转换为LLM可调用的工具
    
    参数:
    - fn: 要装饰的函数(可选,支持无参数调用)
    - name: 工具名称(可选,默认使用函数名)
    - description: 工具描述(可选,默认使用函数docstring)
    - auto_retry: 是否自动重试失败的调用
    
    返回值:
    - Callable: 装饰后的函数,具有工具元数据
    
    使用示例:
    @function_tool
    async def get_weather(location: str) -> str:
        '''获取指定地点的天气信息'''
        return "晴天,25°C"
    
    # 或者带参数
    @function_tool(name="weather_api", description="天气查询工具")
    async def get_weather(location: str) -> str:
        return "晴天,25°C"
    
    装饰器处理流程:
    1. 提取函数签名和类型注解
    2. 生成JSON Schema描述参数结构
    3. 创建工具元数据对象
    4. 注册错误处理和重试逻辑
    """
    def decorator(func: Callable[..., Any]) -> Callable[..., Any]:
        # 提取函数信息
        sig = inspect.signature(func)
        func_name = name or func.__name__
        func_desc = description or (func.__doc__ or "").strip()
        
        # 生成参数schema
        parameters_schema = _generate_parameters_schema(sig)
        
        # 创建工具信息
        tool_info = _FunctionToolInfo(
            name=func_name,
            description=func_desc,
            parameters=parameters_schema,
        )
        
        # 添加工具元数据到函数
        func.__livekit_tool_info = tool_info
        
        # 包装函数以添加错误处理
        @functools.wraps(func)
        async def wrapper(*args, **kwargs):
            try:
                result = await func(*args, **kwargs)
                return result
            except ToolError:
                # 重新抛出工具错误
                raise
            except Exception as e:
                if auto_retry:
                    # 实现重试逻辑
                    return await _retry_function_call(func, args, kwargs, e)
                else:
                    # 转换为工具错误
                    raise ToolError(f"函数执行失败: {e}") from e
        
        return wrapper
    
    # 支持无参数调用
    if fn is None:
        return decorator
    else:
        return decorator(fn)

3.2 ChatContext 类

class ChatContext:
    """
    聊天上下文管理类,维护对话历史和工具状态
    
    主要功能:
    - 管理消息历史记录
    - 跟踪工具调用和结果
    - 支持上下文复制和修改
    - 提供消息过滤和转换
    """
    
    def __init__(
        self,
        messages: list[ChatMessage] | None = None,
        tools: list[FunctionTool] | None = None,
        metadata: dict[str, Any] | None = None,
    ) -> None:
        """
        构造函数
        
        参数:
        - messages: 初始消息列表
        - tools: 可用工具列表
        - metadata: 附加元数据
        """
        self._messages = messages or []
        self._tools = tools or []
        self._metadata = metadata or {}
    
    @classmethod
    def empty(cls, *, tools: list[FunctionTool] | None = None) -> "ChatContext":
        """
        创建空的聊天上下文
        
        参数:
        - tools: 可用工具列表
        
        返回值:
        - ChatContext: 新的空上下文实例
        """
        return cls(tools=tools)
    
    def copy(
        self,
        *,
        messages: list[ChatMessage] | None = None,
        tools: list[FunctionTool] | None = None,
        metadata: dict[str, Any] | None = None,
    ) -> "ChatContext":
        """
        复制上下文并可选择性修改
        
        参数:
        - messages: 新的消息列表(可选)
        - tools: 新的工具列表(可选)
        - metadata: 新的元数据(可选)
        
        返回值:
        - ChatContext: 复制的上下文实例
        """
        return ChatContext(
            messages=messages if messages is not None else self._messages.copy(),
            tools=tools if tools is not None else self._tools.copy(),
            metadata=metadata if metadata is not None else self._metadata.copy(),
        )
    
    def append(
        self,
        *,
        role: ChatRole,
        content: ChatContent,
        name: str | None = None,
        tool_calls: list[FunctionCall] | None = None,
        tool_call_id: str | None = None,
    ) -> "ChatContext":
        """
        添加新消息到上下文
        
        参数:
        - role: 消息角色(user/assistant/system/tool)
        - content: 消息内容
        - name: 消息发送者名称(可选)
        - tool_calls: 工具调用列表(可选)
        - tool_call_id: 工具调用ID(可选)
        
        返回值:
        - ChatContext: 更新后的上下文(新实例)
        """
        message = ChatMessage(
            role=role,
            content=content,
            name=name,
            tool_calls=tool_calls,
            tool_call_id=tool_call_id,
        )
        
        new_messages = self._messages + [message]
        return self.copy(messages=new_messages)

4. API调用链路分析

4.1 应用启动流程

sequenceDiagram
    participant User as 用户代码
    participant CLI as cli.run_app
    participant Worker as Worker
    participant Server as LiveKit Server
    participant JobProcess as JobProcess
    participant Agent as Agent
    
    User->>CLI: run_app(WorkerOptions)
    CLI->>Worker: 创建Worker实例
    Worker->>Worker: 初始化组件
    Worker->>Server: 连接WebSocket
    Server->>Worker: 发送作业分配
    Worker->>JobProcess: 创建作业进程
    JobProcess->>Agent: 执行entrypoint函数
    Agent->>Agent: 初始化代理和会话

4.2 会话启动流程

sequenceDiagram
    participant Entrypoint as entrypoint函数
    participant AgentSession as AgentSession
    participant Agent as Agent
    participant Components as AI组件
    participant Room as LiveKit Room
    
    Entrypoint->>AgentSession: 创建会话实例
    Entrypoint->>AgentSession: start(agent, room)
    AgentSession->>Components: 初始化STT/LLM/TTS/VAD
    AgentSession->>Room: 连接音视频流
    AgentSession->>Agent: 调用on_enter()
    Agent->>AgentSession: generate_reply()
    AgentSession->>Components: 开始处理循环

4.3 工具调用流程

sequenceDiagram
    participant User as 用户
    participant STT as STT服务
    participant LLM as LLM服务
    participant Tool as 工具函数
    participant TTS as TTS服务
    
    User->>STT: 语音输入
    STT->>LLM: 转录文本
    LLM->>Tool: 调用函数工具
    Tool->>Tool: 执行业务逻辑
    Tool->>LLM: 返回执行结果
    LLM->>TTS: 生成响应文本
    TTS->>User: 合成语音输出

5. 错误处理和异常

5.1 异常层次结构

class APIError(Exception):
    """API基础异常类"""
    pass

class APIConnectionError(APIError):
    """API连接异常"""
    pass

class APITimeoutError(APIError):
    """API超时异常"""
    pass

class APIStatusError(APIError):
    """API状态异常"""
    pass

class AssignmentTimeoutError(Exception):
    """作业分配超时异常"""
    pass

class ToolError(Exception):
    """工具执行异常"""
    def __init__(self, message: str) -> None:
        super().__init__(message)
        self._message = message
    
    @property
    def message(self) -> str:
        return self._message

class StopResponse(Exception):
    """停止响应异常 - 用于阻止代理生成回复"""
    pass

5.2 错误处理最佳实践

@function_tool
async def risky_operation(param: str) -> str:
    """演示工具函数中的错误处理"""
    try:
        # 执行可能失败的操作
        result = await external_api_call(param)
        return result
    except ValueError as e:
        # 参数错误 - LLM可以看到并理解
        raise ToolError(f"参数无效: {e}")
    except ConnectionError as e:
        # 连接错误 - 可以重试
        logger.warning(f"连接失败,将重试: {e}")
        raise  # 让auto_retry机制处理
    except Exception as e:
        # 严重错误 - 停止响应
        logger.error(f"操作失败: {e}")
        raise StopResponse()

这个API分析文档详细介绍了LiveKit Agents框架的主要公共API,包括它们的功能、参数、调用链路和使用示例。每个API都包含了详细的代码实现和注释说明,帮助开发者深入理解框架的工作原理。