创建 AI 代理工具
重要
此功能目前以公共预览版提供。
本文介绍如何使用马赛克 AI 代理框架为 AI 代理创建工具。 若要了解详细信息,请参阅 什么是复合 AI 系统和 AI 代理?。
AI 代理使用工具执行语言生成以外的操作,例如检索结构化或非结构化数据、执行代码或与远程服务通信(例如发送电子邮件或 Slack 消息)。
若要向具有马赛克 AI 代理框架的代理提供工具,可以使用以下方法的任意组合:
- 使用 Unity 目录函数创建工具:Unity 目录函数提供轻松的发现、治理和共享。 Unity 目录函数特别适用于对大型数据集应用转换和聚合。
- 使用代理代码创建工具:在调用 REST API、使用任意代码或库或执行具有非常低延迟的工具时,此方法非常有用。 但是,此方法缺少 Unity 目录函数提供的内置可发现性和治理。 构建代理时权衡这种权衡,以确定哪种方法最佳。
这两种方法适用于使用自定义 Python 代码编写的代理或使用 LangGraph 等代理创作库。
使用文档改进工具通话
AI 代理使用文档了解何时以及如何使用你提供的工具。 因此,在定义工具时,请务必为该工具、其参数及其返回值添加清晰和详细的文档。
对于 Unity 目录函数,用于 COMMENT
描述该工具。
要求
- Databricks 建议在开发代理时安装最新版本的 MLflow Python 客户端。 有关
mlflow
版本要求的信息,请参阅相关资源的身份验证。
使用 Unity 目录函数创建工具
以下示例演示如何使用 Unity 目录函数创建代理工具。
Python 执行程序工具
此示例创建一个用于执行 Python 代码的工具。
LLM 可以使用此工具执行用户提供或 LLM 编写的 Python 代码。
在笔记本单元格中运行以下代码。 它使用 %sql
笔记本 magic 创建一个名为 python_exec
的 Unity Catalog 函数。
%sql
CREATE OR REPLACE FUNCTION
main.default.python_exec (
code STRING COMMENT 'Python code to execute. Remember to print the final result to stdout.'
)
RETURNS STRING
LANGUAGE PYTHON
DETERMINISTIC
COMMENT 'Executes Python code in the sandboxed environment and returns its stdout. The runtime is stateless, and you can not read the output of the previous tool executions. No such variables, "rows", or "observations" were defined. Calling another tool inside a Python code is NOT allowed. Use standard Python libraries only.'
AS $$
import sys
from io import StringIO
sys_stdout = sys.stdout
redirected_output = StringIO()
sys.stdout = redirected_output
exec(code)
sys.stdout = sys_stdout
return redirected_output.getvalue()
$$
表查询工具
此示例创建一个工具,用于从 Unity 目录表查询客户数据。
它创建一个名为 LLM 的 Unity 目录函数,该函数 lookup_customer_info
可用于从假设 customer_data
表检索结构化数据。
在 SQL 编辑器中运行以下代码。
CREATE OR REPLACE FUNCTION main.default.lookup_customer_info(
customer_name STRING COMMENT 'Name of the customer whose info to look up'
)
RETURNS STRING
COMMENT 'Returns metadata about a particular customer given the customer name, including the customer email and ID. The
customer ID can be used for other queries.'
RETURN SELECT CONCAT(
'Customer ID: ', customer_id, ', ',
'Customer Email: ', customer_email
)
FROM main.default.customer_data
WHERE customer_name = customer_name
LIMIT 1;
将 Unity 目录工具分配给代理
创建 Unity 目录工具后,将工具分配给代理,以便其可以使用它们。
本部分介绍如何使用 AI 操场创建工具调用代理。
从 AI Playground 导出工具调用代理
使用 AI Playground 将 Unity 目录工具分配给 LLM、测试代理,然后导出定义工具调用代理的代码。
若要使用 AI Playground 导出代理,工作区必须满足以下要求:
在 Playground 中,选择启用了“工具”标签的模型。
选择 “工具 ”,然后单击“ 添加工具”。
在下拉菜单中,选择 Unity 目录函数:
使用 Playground 聊天和测试 LLM、工具和系统提示的当前组合。 请尝试变体来了解当前设置的工作原理。
添加工具后,将代理导出到 Python 笔记本:
单击“导出”以生成定义和部署代理的 Python 笔记本。
导出代理代码后,会看到三个保存到工作区的文件:
agent
笔记本:包含使用 LangChain 定义代理的 Python 代码。driver
笔记本:包含使用 Mosaic AI 代理框架记录、跟踪、注册和部署 AI 代理的 Python 代码。config.yml
:包含有关代理的配置信息,包括工具定义。
打开
agent
笔记本以查看定义代理的 LangChain 代码。 使用此笔记本以编程方式测试和迭代代理,例如定义更多工具。如果对代理的输出感到满意,可以运行
driver
笔记本来记录代理并将其部署到模型服务终结点。
使用代理代码创建工具
还可以在代理的代码而不是 Unity 目录函数中创建工具。
调用 REST API、使用任意代码或库或执行低延迟工具时,此方法非常有用。 但是,在代理代码中定义工具缺少 Unity 目录函数提供的可发现性和治理性。
有关代理代码中定义的矢量搜索检索工具的示例,请参阅 “创建矢量搜索检索器”工具。
后续步骤
- 创建代理。