# Tools 定义方法

## 导入方法

- 网络搜索:`from veadk.tools.builtin_tools.web_search import web_search`
- 链接读取:`from veadk.tools.builtin_tools.link_reader import link_reader`
- 图像生成:`from veadk.tools.builtin_tools.image_generate import image_generate`
- 视频生成:`from veadk.tools.builtin_tools.video_generate import video_generate`
- 代码沙箱执行(用来执行 Python 代码):`from veadk.tools.builtin_tools.run_code import run_code`

## 自定义 Tool

你可以通过撰写一个 Python 函数来定义一个自定义 Tool(你必须清晰地定义好 Docstring):

```python
def add(a: int, b: int) -> int:
    """Add two integers together.
    
    Args:
        a (int): The first integer.
        b (int): The second integer.
    
    Returns:
        int: The sum of a and b.
    """
    return a + b


agent = Agent(tools=[add])
```

如果你使用自定义 Tool,请遵循以下规范:

推荐:(1)返回 dict,字段名稳定且语义清晰;(2)对外部错误用“可解释的错误字符串”或 {"error": "...", "details": ...},避免直接抛异常导致整轮失败

不推荐:(1)返回复杂对象实例(模型侧不可读);(2)返回超大文本(建议先做裁剪/分页/只返回必要字段)

为了让模型更愿意正确用工具,挂载与触发建议:(1)instruction 里明确“什么时候必须用工具”;(2)工具函数参数名要贴近业务语义(例如 order_id、city);(3)返回里提供模型可直接引用的字段(例如 result、items、summary)

## 代码规范

你可以通过如下方式将某个工具挂载到智能体上,例如 `web_search` 网络搜索工具:

```python
from veadk.tools.builtin_tools.web_search import web_search

root_agent = Agent(
    name="...",
    description="...",
    instruction="...", # 智能体系统提示词
    tools=[web_search] # 挂载工具列表
)
```