创建 AI 代理
重要
此功能目前以公共预览版提供。
本文介绍如何使用马赛克 AI 代理框架创建工具调用 AI 代理 。
了解如何提供代理工具并开始与他们聊天以测试和原型代理。 完成代理原型制作后,导出定义代理的 Python 代码以循环访问和部署 AI 代理。
要求
- 了解什么是复合 AI 系统和 AI 代理?中所述的 AI 代理和工具的概念
- Databricks 建议在开发代理时安装最新版本的 MLflow Python 客户端。 有关
mlflow
版本要求的信息,请参阅相关资源的身份验证。
创建 AI 代理工具
第一步是创建一个向代理提供的工具。 代理使用工具执行语言生成以外的操作,例如检索结构化或非结构化数据、执行代码或与远程服务通信(例如发送电子邮件或 Slack 消息)。
若要详细了解如何创建代理工具,请参阅 “创建 AI 代理工具”。
对于本指南,请创建一个 执行 Python 代码的 Unity 目录函数 。 代理可以使用此工具运行用户提供的 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 output of the previous tool executions. i.e. No such variables "rows", "observation" 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()
$$
在 AI 操场中制作工具调用代理的原型
创建 Unity 目录函数后,使用 AI Playground 向 LLM 提供该工具并测试代理。 AI 操场提供了一个沙盒用于制作工具调用代理的原型。
对 AI 代理感到满意后,可以将其导出以在 Python 中进一步开发它,或者按原样将其作为模型服务端点部署。
注意
Unity Catalog、无服务器计算、Mosaic AI 代理框架以及按令牌付费的基础模型或外部模型必须在当前工作区中可用,才能在 AI 操场中制作代理的原型。
制作工具调用终结点的原型。
在 Playground 中,选择启用了“工具”标签的模型。
选择“工具”,并在下拉列表中指定 Unity Catalog 函数名称:
通过聊天测试当前的 LLM、工具和系统提示的组合,并尝试变体。
导出和部署 AI 操场代理
添加工具和测试代理后,将操场代理导出到 Python 笔记本:
单击“导出”以生成可帮助你开发和部署 AI 代理的 Python 笔记本。
导出代理代码后,会看到三个文件保存到工作区:
agent
笔记本:包含使用 LangChain 定义代理的 Python 代码。driver
笔记本:包含使用 Mosaic AI 代理框架记录、跟踪、注册和部署 AI 代理的 Python 代码。config.yml
:包含有关代理的配置信息,包括工具定义。
打开
agent
笔记本以查看定义代理的 LangChain 代码,使用此笔记本以编程方式测试和循环访问代理,例如定义更多工具或调整代理的参数。注意
导出的代码可能与 AI 操场会话具有不同的行为。 Databricks 建议运行导出的笔记本,以便进一步进行迭代和调试,评估代理质量,然后部署代理以与他人共享。
对代理的输出感到满意后,就可以运行
driver
笔记本来记录代理并将其部署到模型服务终结点。
在代码中定义代理
除了从 AI Playground 生成代理代码之外,还可以使用 LangChain 或 Python 代码等框架自行在代码中定义代理。 若要使用代理框架部署代理,其输入必须符合支持的输入和输出格式之一。
使用参数来配置代理
在代理框架中,可以使用参数来控制代理的执行方式。 这样,就可以通过代理的不同特征进行快速迭代,而无需更改代码。 参数是在 Python 字典或 .yaml
文件中定义的键值对。
若要配置代码,请创建一个 ModelConfig
,即一组键值参数。 ModelConfig
是 Python 字典或 .yaml
文件。 例如,可以在开发期间使用字典,然后将其转换为 .yaml
文件以用于生产部署和 CI/CD。 有关 ModelConfig
的详细信息,请参阅 MLflow 文档。
下面显示了一个示例 ModelConfig
。
llm_parameters:
max_tokens: 500
temperature: 0.01
model_serving_endpoint: databricks-dbrx-instruct
vector_search_index: ml.docs.databricks_docs_index
prompt_template: 'You are a hello world bot. Respond with a reply to the user''s
question that indicates your prompt template came from a YAML file. Your response
must use the word "YAML" somewhere. User''s question: {question}'
prompt_template_input_vars:
- question
若要从代码调用配置,请使用以下操作之一:
# Example for loading from a .yml file
config_file = "configs/hello_world_config.yml"
model_config = mlflow.models.ModelConfig(development_config=config_file)
# Example of using a dictionary
config_dict = {
"prompt_template": "You are a hello world bot. Respond with a reply to the user's question that is fun and interesting to the user. User's question: {question}",
"prompt_template_input_vars": ["question"],
"model_serving_endpoint": "databricks-dbrx-instruct",
"llm_parameters": {"temperature": 0.01, "max_tokens": 500},
}
model_config = mlflow.models.ModelConfig(development_config=config_dict)
# Use model_config.get() to retrieve a parameter value
value = model_config.get('sample_param')
设置检索器架构
AI 代理通常使用检索器,这是一种使用矢量搜索索引查找和返回相关文档的代理工具。 有关检索器的详细信息,请参阅 创建矢量搜索检索器工具。
若要确保检索器跟踪正确,请在代码中定义代理时调用 mlflow.models.set_retriever_schema 。 用于 set_retriever_schema
将返回表中的列名映射到 MLflow 的预期字段,例如 primary_key
, text_column
和 doc_uri
。
# Define the retriever's schema by providing your column names
# These strings should be read from a config dictionary
mlflow.models.set_retriever_schema(
name="vector_search",
primary_key="chunk_id",
text_column="text_column",
doc_uri="doc_uri"
# other_columns=["column1", "column2"],
)
注意
在评估检索器的性能时,该 doc_uri
列尤为重要。 doc_uri
是检索器返回的文档的主要标识符,允许将它们与地面真相评估集进行比较。 请参阅 评估集
还可以通过提供包含字段的列名称 other_columns
列表,在检索器的架构中指定其他列。
如果有多个检索器,则可以为每个检索器架构使用唯一名称来定义多个架构。
支持的输入和输出格式
代理框架使用 MLflow 模型签名来定义代理的输入和输出架构。 马赛克 AI 代理框架功能需要一组最少的输入/输出字段才能与“审阅应用”和“AI 操场”等功能进行交互。 有关详细信息,请参阅 定义代理的输入和输出架构。
示例笔记本
这些笔记本创建一个简单的“Hello,world”链,以演示如何在 Databricks 中创建链应用程序。 第一个示例创建简单的链。 第二个示例笔记本演示如何使用参数来最大程度地减少开发过程中的代码更改。