与提示智能体使用已明确定义且现有的工具不同,集成新的、自定义构建的工具或没有预先存在智能体集成的第三方API,通常会带来独特的挑战。你将经常遇到需要这种新颖集成的情况。这需要仔细考虑提示设计,因为你实际上是在教智能体如何操作它从未接触过的机制。智能体完全依赖于基于提示的指令来了解工具的用途、功能、输入、输出以及错误模式。提示中工具契约的重要作用当引入新工具时,你的主要任务是通过提示与智能体建立清晰的“契约”。可以将此契约看作是工具的操作手册,专门为大型语言模型编写的。正如人类开发者需要全面的API文档一样,智能体也需要结构良好的描述才能有效使用新工具。没有它,智能体可能会误用工具,提供不正确的输入,误解输出,或者无法妥善处理错误。提示中的工具描述有以下几个作用:它让智能体了解工具的作用,以及它何时可能与当前任务相关。它指导智能体如何调用工具,包括必要的参数及其预期格式。它使智能体准备好处理工具的响应,无论是成功的结果还是错误消息。新工具描述的必要组成部分为了有效集成新工具,提示中的工具描述应全面。考虑包含以下元素。清晰地组织这些信息,或许可以在系统提示的特定部分使用一致的格式,如JSON或XML,或者使用结构良好的自然语言描述。工具名称:一个独特、简洁且有描述性的名称,供智能体引用该工具。例如,calculate_loan_amortization 或 fetch_weather_forecast_custom。使其与其他工具区别开来,以避免歧义。用途和功能:清晰说明工具的作用。描述其主要功能以及任何重要能力或限制。示例:“这个工具,inventory_checker,连接到内部仓库数据库,以检查给定产品ID的当前库存水平。它不负责下订单或修改库存。”输入参数:名称: 每个参数的标识符(例如,product_id,location_zip_code)。类型: 预期的数据类型(例如,字符串、整数、布尔值、字符串列表)。描述: 参数代表什么的简要说明。必填/可选: 指明参数对于工具运行是否为强制性。格式(如果特定): 任何特殊的格式规则(例如,“日期必须为 YYYY-MM-DD 格式”,或“产品ID必须为10位字母数字字符串”)。工具: get_product_details 描述: 获取特定产品ID的详细信息。 输入: - name: product_id type: string description: 产品的唯一标识符。 required: true format: "以'PID-'开头,后跟6位数字 (例如, PID-123456)" - name: include_reviews type: boolean description: 设置为true以包含客户评论,否则为false。 required: false default: false输出结构:描述工具成功执行后返回的数据格式(例如,JSON对象、纯文本、XML)。如果输出是结构化的(如JSON),请指定重要的字段及其含义。示例:“输出是一个JSON对象,包含键:product_name(字符串)、price(浮点数)、in_stock(布尔值)和description(字符串)。”错误状态和消息:解释工具如何指示错误(例如,返回特定的HTTP状态码、包含error字段的JSON对象、特定的字符串前缀)。描述常见的错误类型及其含义,以便智能体可以尝试重新操作或有意义地报告它们。示例:“如果未找到产品ID,工具将返回一个JSON对象:{\"error\": \"ProductNotFound\", \"message\": \"指定的产品ID不存在。\"}。如果数据库连接失败,它将返回{\"error\": \"DBConnectionError\"}。”使用示例(少样本学习):提供一个或多个简洁的示例,说明如何调用工具以及典型的成功输出(甚至错误输出)是什么样子。如果工具的使用模式或参数结构不明显,这尤其有价值。这些示例是强大的少样本演示。调用'get_product_details'的示例: 工具调用: get_product_details(product_id="PID-789012", include_reviews=true) 预期输出 (成功): { "product_name": "无线鼠标X100", "price": 29.99, "in_stock": true, "description": "符合人体工程学的五键无线鼠标。", "reviews": [ {"rating": 5, "comment": "很棒的鼠标!"}, {"rating": 4, "comment": "物有所值。"} ] }新工具集成提示的构建如何将此工具契约嵌入到智能体的整体提示系统中很重要。系统提示: 对于始终可用的工具,将它们的描述包含在系统提示的专用部分是一种常见方法。你可能有一个 ## 可用工具 部分。动态提供: 如果工具在交互过程中变为可用或发生变化,你可能需要动态更新智能体的上下文,包含新的工具规格。使用说明: 明确指示智能体在规划步骤或决定使用哪个工具时参考工具描述。例如:“请参考‘可用工具’部分,了解如何使用每个工具,包括其所需的参数和输出格式。”参数构成: 指导智能体如何从用户查询或其内部状态中提取工具所需的参数。这可能涉及要求它列出所需参数,然后为它们找到对应的值。下面的图表说明了总体过程:digraph G { rankdir=TB; node [shape=box, style="rounded,filled", fillcolor="#e9ecef", fontname="Arial"]; edge [fontname="Arial"]; subgraph cluster_prompt_design { label="新工具的提示设计"; bgcolor="#f8f9fa"; P [label="1. 定义工具规格\n(名称, 用途, 输入, 输出, 错误)", fillcolor="#a5d8ff"]; I [label="2. 将规格整合\n到智能体提示上下文", fillcolor="#a5d8ff"]; E [label="3. 提供使用示例\n(少样本学习)", fillcolor="#a5d8ff"]; P -> I; I -> E; } subgraph cluster_agent_operation { label="智能体操作"; bgcolor="#f8f9fa"; UserRequest [label="用户请求 / 智能体目标", shape=ellipse, fillcolor="#ffec99"]; AgentLLM [label="智能体LLM", fillcolor="#b2f2bb"]; ToolExecution [label="新工具执行", fillcolor="#fcc2d7"]; AgentResponse [label="智能体响应 / 动作", shape=ellipse, fillcolor="#ffec99"]; UserRequest -> AgentLLM; I -> AgentLLM [style=dashed, label=" 提供信息 "]; E -> AgentLLM [style=dashed, label=" 指导 "]; AgentLLM -> ToolExecution [label=" 选择并调用工具 "]; ToolExecution -> AgentLLM [label=" 返回输出/错误 "]; AgentLLM -> AgentResponse; } }通过提示工程将新工具与AI智能体集成的过程。设计阶段包括定义工具契约并将其嵌入到智能体的上下文,通常还会辅以示例。在操作过程中,智能体使用这些信息与工具进行交互。管理自定义工具输出一旦新工具执行并返回数据,智能体就需要理解并使用这些输出。你的提示应指导这种理解:解析说明: 如果输出格式复杂(例如,深度嵌套的JSON或自定义文本格式),请提供如何解析它的说明或示例。信息提取: 提示智能体从工具的输出中提取与其当前目标相关的特定信息。例如:“从inventory_checker的输出中,提取current_stock的值。”总结: 如果工具返回冗长的输出,你可以指示智能体在将其呈现给用户或在后续步骤中使用之前进行总结。迭代设计与严格测试集成新工具很少能一次成功。应采用迭代方法:草拟初始提示: 编写工具描述以及其调用和输出处理的提示。情境测试: 设计一组测试用例,涵盖工具的各种使用方式,包括有效输入、边缘情况以及可能导致错误的输入。观察智能体行为: 让智能体运行这些情境,仔细观察其动作。它是否正确选择工具?输入格式是否符合预期?它是否正确理解输出?它如何处理工具错误?优化提示: 根据观察结果,优化工具描述、使用示例或教学提示,以解决发现的任何问题。例如,如果智能体始终忽略一个有益的可选参数,则使其描述更显眼,或添加一个示例展示其使用。这种提示、测试和优化的迭代循环,是成功集成智能体没有先前固有知识的工具的根本。进阶考量:有状态或序列化工具虽然本节主要关注相对直接的单次调用工具,但一些新工具可能更复杂:有状态工具: 跨多次调用维持内部状态的工具(例如,需要打开、使用然后关闭的数据库连接)。此类工具的提示需要管理操作序列和任何状态标识符(如会话令牌)。多步骤工具操作: 某些任务可能需要对单个工具或多个工具进行特定顺序的调用才能达到结果。你的提示可能需要概述这个子工作流程。这些情境通常需要智能体中更精细的状态管理和更详细的教学提示,这些内容建立在本节讨论的基础工具集成技术之上。关于安全性和副作用的说明在集成任何工具时,特别是可能与外部系统或数据交互的新工具时,务必考虑安全影响。如果工具可以修改数据、产生费用或访问敏感信息,你的提示必须经过仔细设计,以防止意外或恶意使用。在你的提示策略中实施保障措施,例如要求明确的确认步骤或限制智能体使用强大工具时可采取的动作范围。这是负责任的智能体开发的重要方面。通过仔细定义你的新工具并编写精确的提示,你可以显著增强AI智能体的能力,使其能够通过与核心模型有效交互来处理更广泛的任务。