pub struct LoadTool { /* private fields */ }Expand description
LoadTool: 让模型可以动态加载 deferred 的工具
当工具被设置为 defer 时,它不会出现在初始的工具列表中。 模型可以通过调用 LoadTool 来加载这些工具,加载后该工具在后续轮次中可用。 加载操作只影响当前会话的运行时状态,不修改用户的持久化配置。
Implementations§
Source§impl LoadTool
impl LoadTool
pub const NAME: &'static str = "LoadTool"
Sourcepub const STATIC_DESCRIPTION: &'static str = "Load a deferred tool so it becomes available in subsequent turns. \
Use this when you need a tool that is not currently available in your tool list. \
The tool name must match exactly. After loading, the tool will be available in the next turn."
pub const STATIC_DESCRIPTION: &'static str = "Load a deferred tool so it becomes available in subsequent turns. \ Use this when you need a tool that is not currently available in your tool list. \ The tool name must match exactly. After loading, the tool will be available in the next turn."
静态描述。不要在这里读 self.deferred_tools —— 一旦读,就违反了
“Tool::description 是廉价静态查询” 的 trait 契约,并会导致与外层持锁
调用栈的自死锁(参见 notes/锁与不变量.md)。
“当前可加载的工具列表” 这个动态信息由 ToolRegistry 在拼装
system prompt / LLM tool 列表时,由调用方从外部 deferred: &[String]
拼到本工具描述末尾。
pub fn new( deferred_tools: Arc<Mutex<Vec<String>>>, session_loaded_deferred: Arc<Mutex<Vec<String>>>, ) -> Self
Trait Implementations§
Source§impl Tool for LoadTool
impl Tool for LoadTool
Source§fn description(&self) -> Cow<'_, str>
fn description(&self) -> Cow<'_, str>
返回工具功能描述,静态描述返回
Cow::Borrowed,动态描述返回 Cow::OwnedSource§fn parameters_schema(&self) -> Value
fn parameters_schema(&self) -> Value
返回工具参数的 JSON Schema
Source§fn execute(&self, arguments: &str, _cancelled: &Arc<AtomicBool>) -> ToolResult
fn execute(&self, arguments: &str, _cancelled: &Arc<AtomicBool>) -> ToolResult
执行工具,传入参数字符串和取消信号,返回执行结果
Source§fn requires_confirmation(&self) -> bool
fn requires_confirmation(&self) -> bool
该工具是否需要用户确认后才能执行
Source§fn confirmation_message(&self, arguments: &str) -> String
fn confirmation_message(&self, arguments: &str) -> String
生成用户确认时显示的提示消息
Source§fn is_available(&self) -> bool
fn is_available(&self) -> bool
工具是否当前可用(默认
true)。 Read moreAuto Trait Implementations§
impl Freeze for LoadTool
impl RefUnwindSafe for LoadTool
impl Send for LoadTool
impl Sync for LoadTool
impl Unpin for LoadTool
impl UnsafeUnpin for LoadTool
impl UnwindSafe for LoadTool
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.