创建 AI 代理

重要

此功能目前以公共预览版提供。

本文介绍如何使用马赛克 AI 代理框架创建工具调用 AI 代理

了解如何提供代理工具并开始与他们聊天以测试和原型代理。 完成代理原型制作后,导出定义代理的 Python 代码以循环访问和部署 AI 代理。

要求

创建 AI 代理工具

第一步是创建一个向代理提供的工具。 代理使用工具执行语言生成以外的操作,例如检索结构化或非结构化数据、执行代码或与远程服务通信(例如发送电子邮件或 Slack 消息)。

对于本指南,可以使用内置的 Unity 目录函数 system.ai.python_exec,使代理能够执行任意 Python 代码。

若要详细了解如何创建自己的代理工具,请参阅 创建 AI 代理工具

在 AI 操场中制作工具调用代理的原型

有了工具后,请使用 AI Playground 向代理提供该工具,并与之交互以验证和测试行为。 AI 操场提供了一个沙盒用于制作工具调用代理的原型。

注意

Unity Catalog无服务器计算Mosaic AI 代理框架以及按令牌付费的基础模型外部模型必须在当前工作区中可用,才能在 AI 操场中制作代理的原型。

制作工具调用终结点的原型。

  1. 在 Playground 中,选择启用了“工具”标签的模型。

    选择工具调用 LLM

  2. 选择“工具”,并在下拉列表中指定 Unity Catalog 函数名称:

    选择工具

  3. 通过聊天测试当前的 LLM、工具和系统提示的组合,并尝试变体。

    制作 LLM 的原型

导出和部署 AI 操场代理

在 AI Playground 中原型制作和优化 AI 代理后,可以将其导出到 Python 笔记本进行进一步开发,或将其直接部署为模型服务终结点

  1. 单击“导出以生成可帮助你开发和部署 AI 代理的 Python 笔记本。

    导出代理代码后,会看到三个文件保存到工作区:

    • agent 笔记本:包含使用 LangChain 定义代理的 Python 代码。
    • driver 笔记本:包含使用 Mosaic AI 代理框架记录、跟踪、注册和部署 AI 代理的 Python 代码。
    • config.yml:包含有关代理的配置信息,包括工具定义。
  2. 打开 agent 笔记本以查看定义代理的 LangChain 代码,使用此笔记本以编程方式测试和循环访问代理,例如定义更多工具或调整代理的参数

    注意

    导出的代码可能与 AI 操场会话具有不同的行为。 Databricks 建议运行导出的笔记本,以便进一步进行迭代和调试,评估代理质量,然后部署代理以与他人共享。

  3. 对代理的输出感到满意后,就可以运行 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 代理通常使用检索器,这是一种使用矢量搜索索引查找和返回相关文档的代理工具。 有关检索器的详细信息,请参阅 非结构化检索 AI 代理工具

若要确保检索器跟踪正确,请在代码中定义代理时调用 mlflow.models.set_retriever_schema 。 用于 set_retriever_schema 将返回表中的列名映射到 MLflow 的预期字段,例如 primary_keytext_columndoc_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 中创建链应用程序。 第一个示例创建简单的链。 第二个示例笔记本演示如何使用参数来最大程度地减少开发过程中的代码更改。

简单链笔记本

获取笔记本

简单链驱动程序笔记本

获取笔记本

参数化的链笔记本

获取笔记本

参数化的链驱动程序笔记本

获取笔记本

后续步骤