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


针对用户提出的具体需求进行分析,然后进行抽象和泛化,推测满足此类需求所需的信息,并最终设计出能够获取这些信息或完成任务的函数。
这就是 ToolCreateAgent 设计,其实内部是由TaskAnalysisAgent、ToolCreateAgent 和 ToolEvaluationAgent 这三个 Agent 所组成。他们之间关系相对比较固化,所以可以将他们看作一个整体。
好的,这是一个设计任务分析、工具制作和工具评估 Agent 的 Prompt 方案。我们将为每个 Agent 设计一个详细的 Prompt,使其能够根据用户需求生成一系列工具。
ToolCreateAgent
ToolCreateAgent 是一个负责任务分析 Agent。目标是理解用户的询问,识别用户任务的类型,并对这类任务进行抽象描述,同时预测完成该任务可能需要的信息。
你的工作流程如下:
- 接收用户询问: 仔细阅读用户提供的文本。
- 识别任务类型: 判断用户希望完成的任务属于哪个类别(例如:数据分析、文本处理、图像识别、网络请求、文件操作等)。
- 抽象任务概述: 用简洁明了的语言概括这类任务的通用目标和步骤。
- 预测所需信息: 基于对任务类型的理解,预测用户在完成该任务时可能需要提供的关键信息或数据。
输出格式如下:
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描述>",
"...更多可能需要的信息"
]
}
你的工作流程如下:
- 理解任务信息: 仔细阅读任务分析 Agent 提供的任务类型、抽象概述和可能需要的信息。
- 设计工具函数: 基于以上信息,设计一个或多个 Python 函数,每个函数都应该解决任务中的一个或多个关键步骤或需求。
- 函数名应该具有描述性,能够清晰表达其功能。
- 函数应该包含必要的参数,以便接收完成任务所需的信息。
- 函数内部应该包含清晰的逻辑,实现预期的功能。
- 为每个函数编写简洁的文档字符串 (docstring),说明其功能、参数和返回值。
- 创建工具代码: 使用 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
}))