我和我的 AI Agent(2)工具模块设计上花了不少心思,实现了 AI Agent 从使用工具到创建工具的进化

首先声名已经将 deepseekers 更是更名为 azent,关于 azent 名字由来,是将 agent 和 zidea 结合而来。

github项目地址

B 站视频地址

针对用户提出的具体需求进行分析,然后进行抽象和泛化,推测满足此类需求所需的信息,并最终设计出能够获取这些信息或完成任务的函数。

这就是 ToolCreateAgent 设计,其实内部是由TaskAnalysisAgent、ToolCreateAgent 和 ToolEvaluationAgent 这三个 Agent 所组成。他们之间关系相对比较固化,所以可以将他们看作一个整体。

好的,这是一个设计任务分析、工具制作和工具评估 Agent 的 Prompt 方案。我们将为每个 Agent 设计一个详细的 Prompt,使其能够根据用户需求生成一系列工具。

ToolCreateAgent

ToolCreateAgent 是一个负责任务分析 Agent。目标是理解用户的询问,识别用户任务的类型,并对这类任务进行抽象描述,同时预测完成该任务可能需要的信息。

你的工作流程如下:

  1. 接收用户询问: 仔细阅读用户提供的文本。
  2. 识别任务类型: 判断用户希望完成的任务属于哪个类别(例如:数据分析、文本处理、图像识别、网络请求、文件操作等)。
  3. 抽象任务概述: 用简洁明了的语言概括这类任务的通用目标和步骤。
  4. 预测所需信息: 基于对任务类型的理解,预测用户在完成该任务时可能需要提供的关键信息或数据。

输出格式如下:

json 复制代码
{
  "用户询问": "<用户提供的原始文本>",
  "任务类型": "<识别出的任务类型>",
  "任务抽象概述": "<对该类型任务的抽象描述>",
  "可能需要的信息": [
    "<信息1描述>",
    "<信息2描述>",
    "...更多可能需要的信息"
  ]
}

将上面描述转换为计算机语言,类如下

python 复制代码
class TaskAnalysisResult(BaseModel):
    user_input: str = Field(title="用户询问", description="用户提供的原始文本", examples=["分析一份销售数据并找出趋势。"])
    task_type: str = Field(title="任务类型", description="识别出的任务类型", examples=["数据分析"])
    task_abstract_overview: str = Field(title="任务抽象概述", description="对该类型任务的抽象描述", examples=["对结构化或非结构化数据进行处理和解释,以发现有意义的模式、关系或洞察。"])
    possible_required_information: List[str] = Field(title="可能需要的信息", description="完成该任务可能需要的信息列表", examples=[["数据文件路径或内容", "分析目标或具体问题", "数据字段的说明"]])

通过 title 和 description 已经对每一个字段都给予详细说明,所以这里没有必要用文字做过多解释,结合代码来看每一个字段含义更加容易理解。

接下来就可以定义 TaskAnalysisAgent 了

python 复制代码
task_analysis_agent = Agent(
    name="task_analysis_agent",
    description="作为用户任务分析的Agent你的目标是理解用户的询问,识别用户任务的类型,并对这类任务进行抽象描述,同时预测完成该任务可能需要的信息。",
    system_message=task_analysis_system_prompt,
    result_data_type=TaskAnalysisResult
    )

接下来就用一个场景来测试 ToolCreateAgent ,任务比较简单如下

请给 [email protected] 发送一个关于今天沈阳天气气温的邮件

python 复制代码
task_analysis_result = task_analysis_agent.sync_run("请给 [email protected] 发送一个关于今天沈阳天气气温的邮件",run_context=RunContext(deps={
    "source":"提供了获取天气的 API get_weather_api(location:str)->float\n email_address:[email protected]"
}))
console.print(task_analysis_result.get_data())

task_analysis_data_result:TaskAnalysisResult = task_analysis_result.get_data()

task_analysis_markdown_content = f"""
# 任务分析
## 任务类型 
{task_analysis_data_result.task_type}
## 任务抽象概述
{task_analysis_data_result.task_abstract_overview}
## 可能需要的信息: 
{ "\n-".join(task_analysis_data_result.possible_required_information)}
"""

console.print(Panel(Markdown(task_analysis_markdown_content),title="任务分析"))

CreateToolsAgent

CreateToolsAgent 是一个工具制作 Agent。目标是根据任务分析 Agent 提供的任务抽象信息,设计并创建一系列有助于完成该任务的 Python 函数工具。

你的输入是任务分析 Agent 的输出,格式如下:

json 复制代码
{
  "用户询问": "<用户提供的原始文本>",
  "任务类型": "<识别出的任务类型>",
  "任务抽象概述": "<对该类型任务的抽象描述>",
  "可能需要的信息": [
    "<信息1描述>",
    "<信息2描述>",
    "...更多可能需要的信息"
  ]
}

你的工作流程如下:

  1. 理解任务信息: 仔细阅读任务分析 Agent 提供的任务类型、抽象概述和可能需要的信息。
  2. 设计工具函数: 基于以上信息,设计一个或多个 Python 函数,每个函数都应该解决任务中的一个或多个关键步骤或需求。
    • 函数名应该具有描述性,能够清晰表达其功能。
    • 函数应该包含必要的参数,以便接收完成任务所需的信息。
    • 函数内部应该包含清晰的逻辑,实现预期的功能。
    • 为每个函数编写简洁的文档字符串 (docstring),说明其功能、参数和返回值。
  3. 创建工具代码: 使用 Python 编写设计的函数代码。

你的输出格式如下:

json 复制代码
{
  "任务类型": "<任务分析 Agent 提供的任务类型>",
  "任务抽象概述": "<任务分析 Agent 提供的任务抽象概述>",
  "生成的工具": [
    {
      "工具名称": "<函数名>",
      "描述": "<函数的功能描述>",
      "参数": [
        {"名称": "<参数名>", "类型": "<参数类型>", "描述": "<参数描述>"},
        "...更多参数"
      ],
      "返回值": {"类型": "<返回值类型>", "描述": "<返回值描述>"},
      "代码": "<Python 函数代码>"
    },
    "...更多生成的工具"
  ]
}
python 复制代码
class ToolParameter(BaseModel):
    name: str = Field(title="名称", description="参数名", examples=["file_path"])
    type: str = Field(title="类型", description="参数类型", examples=["str", "int", "list"])
    description: str = Field(title="描述", description="参数描述", examples=["输入文件的路径"])

class ToolReturnValue(BaseModel):
    type: str = Field(title="类型", description="返回值类型", examples=["pd.DataFrame", "dict", "bool"])
    description: str = Field(title="描述", description="返回值描述", examples=["包含分析结果的 DataFrame"])

class GeneratedTool(BaseModel):
    tool_name: str = Field(title="工具名称", description="函数名", examples=["analyze_data"])
    description: str = Field(title="描述", description="函数的功能描述", examples=["分析指定路径的数据文件并返回分析结果。"])
    parameters: List[ToolParameter] = Field(title="参数", description="函数所需的参数列表")
    return_value: ToolReturnValue = Field(title="返回值", description="函数的返回值信息")
    code: str = Field(title="代码", description="Python 函数代码", examples=["def analyze_data(file_path):\n    # ... 函数实现 ...\n    return results"])

class ToolCreationResult(BaseModel):
    task_type: str = Field(title="任务类型", description="任务分析 Agent 提供的任务类型", examples=["数据分析"])
    task_abstract_overview: str = Field(title="任务抽象概述", description="任务分析 Agent 提供的任务抽象概述", examples=["对数据进行清洗、转换和分析,以发现有价值的信息。"])
    generated_tools: List[GeneratedTool] = Field(title="生成的工具", description="生成的工具列表")


           



def create_tool_system_prompt(context):
    return f"""
你是一个工具制作 Agent。你的目标是根据任务分析 Agent 提供的任务抽象信息,设计并创建一系列有助于完成该任务的 Python 函数工具。


**你的工作流程如下:**

1.  **理解任务信息:** 仔细阅读任务分析 Agent 提供的任务类型、抽象概述和可能需要的信息。
2.  **设计工具函数:** 基于以上信息,设计一个或多个 Python 函数,每个函数都应该解决任务中的一个或多个关键步骤或需求。
    * 函数名应该具有描述性,能够清晰表达其功能。
    * 函数应该包含必要的参数,以便接收完成任务所需的信息。
    * 函数内部应该包含清晰的逻辑,实现预期的功能。
    * 为每个函数编写简洁的文档字符串 (docstring),说明其功能、参数和返回值。
3.  **创建工具代码:** 使用 Python 编写设计的函数代码。


** 用户需求 **
{context['deps']['query']}

** 任务分析 **
{context['deps']['task_analysis']}
基于以上**任务分析**提供的信息,设计一个或多个 Python 函数,每个函数都应该解决任务中的一个或多个关键步骤或需求。

"""
model_json_schema = ToolCreationResult.model_json_schema()

# print(json.dumps(extract_example_from_schema(model_json_schema['properties'],model_json_schema['$defs'])))
create_tools_agent = Agent(
    name="create_tool_agent",
    description="你是一个工具制作 Agent。你的目标是根据任务分析 Agent 提供的任务抽象信息,设计并创建一系列有助于完成该任务的 Python 函数工具。",
    system_message=create_tool_system_prompt,
    result_data_type={
        "type":ToolCreationResult,
        "model_json_schema":json.dumps(extract_example_from_schema(model_json_schema['properties'],model_json_schema['$defs']))
        }
    )
python 复制代码
# 示例用法
if __name__ == "__main__":
    example_data = {
        "任务类型": "数据分析",
        "任务抽象概述": "对CSV文件中的数据进行统计分析。",
        "生成的工具": [
            {
                "工具名称": "load_csv",
                "描述": "加载指定路径的CSV文件并返回DataFrame。",
                "参数": [
                    {"名称": "file_path", "类型": "str", "描述": "CSV文件的完整路径"}
                ],
                "返回值": {"类型": "pd.DataFrame", "描述": "包含CSV数据的DataFrame"},
                "代码": "import pandas as pd\n\ndef load_csv(file_path):\n    return pd.read_csv(file_path)"
            },
            {
                "工具名称": "calculate_mean",
                "描述": "计算DataFrame中指定列的平均值。",
                "参数": [
                    {"名称": "df", "类型": "pd.DataFrame", "描述": "输入的DataFrame"},
                    {"名称": "column_name", "类型": "str", "描述": "要计算平均值的列名"}
                ],
                "返回值": {"类型": "float", "描述": "指定列的平均值"},
                "代码": "import pandas as pd\n\ndef calculate_mean(df, column_name):\n    return df[column_name].mean()"
            }
        ]
    }

    result = ToolCreationResult(**example_data)
    print(result.model_dump_json(indent=2))

请记住:

  • 生成的工具应该具有实用性,能够帮助用户完成任务。
  • 工具的设计应该考虑到灵活性和可复用性。
  • 代码应该清晰、易懂,并遵循良好的编程实践。

现在,请根据以下任务分析结果生成工具:

python 复制代码
create_tool_result = create_tools_agent.sync_run("生成工具",run_context=RunContext(deps={
    "query":"请给 [email protected] 发送一个关于今天沈阳天气气温的邮件",
    "task_analysis":task_analysis_markdown_content
}))
相关推荐
过期动态2 小时前
【动手学深度学习】卷积神经网络(CNN)入门
人工智能·python·深度学习·pycharm·cnn·numpy
蔗理苦5 小时前
2025-04-05 吴恩达机器学习5——逻辑回归(2):过拟合与正则化
人工智能·python·机器学习·逻辑回归
程序猿阿伟6 小时前
《SQL赋能人工智能:解锁特征工程的隐秘力量》
数据库·人工智能·sql
啥都鼓捣的小yao6 小时前
Python解决“数字插入”问题
python·算法
csssnxy6 小时前
叁仟数智指路机器人是否支持远程监控和管理?
大数据·人工智能
csdn_aspnet6 小时前
如何在 Linux 上安装 Python
linux·运维·python
车斗7 小时前
win10 笔记本电脑安装 pytorch+cuda+gpu 大模型开发环境过程记录
人工智能·pytorch·电脑
KY_chenzhao7 小时前
数据驱动防灾:AI 大模型在地质灾害应急决策中的关键作用。基于DeepSeek/ChatGPT的AI智能体开发
人工智能·chatgpt·智能体·deepseek·本地化部署
大多_C7 小时前
量化方法分类
人工智能·分类·数据挖掘