| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
parent directory.. | ||||
使用 TextGrad 框架自动优化 Agent 提示词的模块。通过迭代执行 Agent 任务并根据执行结果自动调整提示词,提升 Agent 性能。
from src.optimizers.textgrad_optimizer import optimize_agent_with_textgrad
# 获取 Agent 实例
agent = acp.get_info("tool_calling").instance
# 运行优化
await optimize_agent_with_textgrad(
agent=agent,
task="Create a simple HTML Sokoban web mini-game",
files=[],
optimization_steps=3,
optimizer_model="gpt-4o",
log_dir=config.workdir
)适合快速使用,自动处理大部分配置:
from src.optimizers.textgrad_optimizer import optimize_agent_with_textgrad
# 在异步函数中调用
async def main():
# ... 初始化 Agent、环境、工具等 ...
agent = acp.get_info("tool_calling").instance
# 执行优化
optimizer = await optimize_agent_with_textgrad(
agent=agent,
task="Your task description here",
files=[], # 可选的文件列表
optimization_steps=3, # 优化迭代次数
optimizer_model="gpt-4o", # 用于优化的模型
log_dir=config.workdir # 日志保存目录
)
# 可以使用返回的 optimizer 对象访问优化后的变量
optimized_vars = optimizer.get_optimized_variables()
# 使用优化后的提示词运行 Agent
result = await agent.ainvoke(task="Your task", files=[])
if __name__ == "__main__":
import asyncio
asyncio.run(main())完整示例:参考 examples/run_tool_calling_agent_optimized.py
适合需要更多控制或自定义优化的场景:
from src.optimizers.textgrad_optimizer import TextGradOptimizer
async def main():
# ... 初始化 Agent ...
agent = acp.get_info("tool_calling").instance
# 创建优化器实例
optimizer = TextGradOptimizer(
agent=agent,
log_dir=config.workdir # 日志保存目录
)
# 执行优化
await optimizer.optimize(
task="Your task description here",
files=[], # 可选的文件列表
optimization_steps=3, # 优化迭代次数
optimizer_model="gpt-4o" # 用于优化的模型名称或引擎对象
)
# 获取优化后的变量
optimized_vars = optimizer.get_optimized_variables()
# 访问特定优化后的变量
for tg_var in optimized_vars:
print(f"变量描述: {tg_var.role_description}")
print(f"优化后的值: {tg_var.value}")
# 使用优化后的提示词运行 Agent
result = await agent.ainvoke(task="Your task", files=[])
if __name__ == "__main__":
import asyncio
asyncio.run(main())| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| agent | Agent 实例 | ✅ | 要优化的 Agent 对象,必须包含 prompt_manager 和 ainvoke 方法 |
| task | str | ✅ | Agent 要执行的任务描述 |
| files | List[str] | ❌ | 附件文件路径列表,默认为 [] |
| optimization_steps | int | ❌ | 优化迭代次数,默认为 3 |
| optimizer_model | str 或引擎对象 | ❌ | 用于优化的 LLM 模型,默认为 "gpt-4o" |
| log_dir | str | ❌ | 日志保存目录,如果为 None 则使用 Agent 的 workdir |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| task | str | ✅ | Agent 要执行的任务描述 |
| files | List[str] | ❌ | 附件文件路径列表,默认为 [] |
| optimization_steps | int | ❌ | 优化迭代次数,默认为 3 |
| optimizer_model | str 或引擎对象 | ❌ | 用于优化的 LLM 模型,默认为 "gpt-4o" |
从 Agent 的所有 prompt 对象中提取标记为可优化的变量(require_grad=True),并转换为 TextGrad 变量格式。
返回:Tuple[List[tg.Variable], Dict, Dict] - (可优化的变量列表, 变量映射字典, prompt对象映射字典)
支持多 prompt 对象:会自动从 system_prompt 和 agent_message_prompt 等所有 prompt 对象中提取变量。
清除所有包含被优化变量的 prompt 对象的缓存,确保下次调用时使用更新后的变量值。
参数:
工作原理:
获取优化后的变量列表。
返回:List[tg.Variable] - 优化后的变量列表
优化器会从 Agent 的所有 prompt 对象中递归查找所有标记为 require_grad=True 的变量,并将它们转换为 TextGrad 的 Variable 对象。
优化器会自动从以下 prompt 对象中提取变量:
每次优化迭代包含以下步骤:
⚠️ 重要:当前实现采用黑盒优化方式:
重要:所有 Prompt 类(SystemPrompt, AgentMessagePrompt 等)都使用缓存机制来避免重复渲染:
优化器更新变量值后,会清除所有相关 prompt 对象的缓存。重新加载发生在以下位置:
Agent 执行流程:
Agent.ainvoke() → Agent._get_messages() → prompt_manager.get_system_message(reload=False) 或 get_agent_message(reload=True) → SystemPrompt.get_message(reload=False)
Prompt 重新渲染时机(在 SystemPrompt.get_message() 中,第 51-58 行):
if not reload and self.message is not None:
return self.message # 返回缓存
# 如果 message 为 None(缓存已清除),执行以下代码重新渲染:
prompt_str = self.prompt.render(modules) # ← 这里使用更新后的变量值
self.message = SystemMessage(content=prompt_str, cache=True)每次优化都会生成详细的日志文件,保存在 log_dir/optimization_logs/ 目录下,包含:
确保在提示词模板中正确标记需要优化的变量:
{
"name": "agent_context_rules",
"type": "system_prompt_module",
"description": "Agent 上下文规则",
"require_grad": True, # ✅ 设置为 True 才会被优化
"template": None,
"variables": AGENT_CONTEXT_RULES
}如果优化器步骤失败(通常是因为 LLM 未遵循输出格式),可以:
每次优化迭代都会调用:
请注意 API 调用成本,特别是在使用 GPT-4 系列模型时。
所有优化相关的方法都是异步的,必须在 async 函数中使用 await 调用。
参考项目根目录下的 examples/run_tool_calling_agent_optimized.py 查看完整的集成示例。
| Back | FazBrowse Home | New Git URL |