1.论文信息

标题:SEW: Self-Evolving Agentic Workflows for Automated Code Generatio:用于自动代码生成的自我进化的代理工作流程

收录的会议/期刊:

作者信息:

arxiv:🔗

github网站:🔗

github代码:🔗

2.泛读

a. 名词解释

直接进化

操作对象:直接修改 智能体的原始提示词(Agent’s Prompt)

通俗理解:直接给智能体 “换指令”

路径原始提示词 → 变异提示词(Mutation Prompt) → 新提示词(一阶 DE 是 1 次迭代,二阶 DE 是 2 次迭代)

示例
一阶 DE:
原始提示(英文):"You are a proficient Python programmer..."
变异指令(指的是进化提示词的规则)(英文):"Modify this instruction in a way that no self-respecting LLM would!"
→ 新提示(英文):"Creative Instruction... Challenge Accepted: Python Code Wizardry!"
二阶 DE 则在此基础上,再次用新变异指令迭代新提示词,让指令更简洁(如 Reimagined Challenge: As a skilled Python developer... )

超进化

操作对象:先修改 “变异提示词” 本身(Mutation Prompt / Hyper - mutation Prompt),再间接改智能体提示词

通俗理解:先给 “换指令的规则” 换思路,再让智能体指令进化

路径任务描述/思考逻辑 → 超变异提示词(Hyper - mutation Prompt) → 变异提示词(Mutation Prompt) → 新提示词

示例(零阶 HE)
任务描述(英文):"LiveCodeBench involves..."
思考式提示词(英文):"How can I simplify the problem so that it is easier to solve?"
→ 超变异后生成新 Mutation Prompt(英文):"Mutator Prompt... Challenge..."
→ 最终生成新智能体提示词(英文):"Sure! Please provide the specific problem description"
多了 “思考逻辑→超变异提示词” 的元迭代层,间接影响最终指令。


b.创新点

一、机制创新:“提示词自优化” 的自动化闭环

1. 突破人工依赖的进化逻辑

传统方式:提示词需人工设计、调试,效率低且依赖经验

创新点:用 LLM 自身能力迭代提示词,实现 “提示词→LLM→新提示词” 的自动化闭环(如一阶直接进化中,LLM 依据 Mutation Prompt 自动改写 Agent’s Prompt )。

示例(一阶直接进化):
原始提示(英文):"You are a proficient Python programmer... return anything except for the program."
变异指令(英文):"Modify this instruction in a way that no self-respecting LLM would!"
LLM 自动输出新提示(英文):"Creative Instruction""Challenge Accepted: Python Code Wizardry!"\n\nAs a skilled Python programmer...
无需人工介入,靠 LLM 完成 “提示词变异→优化”,颠覆传统 “人工调参” 模式。

2.分层进化的双轨策略

直接进化(DE):聚焦智能体提示词本身的迭代(如二阶直接进化,对已优化的提示词再次变异),让指令更精准、贴合任务(从 Challenge Accepted 到 Reimagined Challenge ,逐步简化聚焦)。

超进化(HE):新增 **“变异提示词” 的元优化层 **(如零阶超进化中,先优化 Thinking-style Prompt 间接影响智能体提示词),通过调整 “提示词的提示词”,灵活改变智能体的 “思考逻辑”。

价值:覆盖 “直接改指令” 和 “间接调思路” 两类场景,适配不同任务需求(代码生成需精准指令,复杂问题需简化思路)。

二、机制创新:“提示词自优化” 的自动化闭环

1. 多阶迭代的渐进式优化

零阶→一阶→二阶:从 “单次变异” 到 “多次迭代”,提示词逐步从 “生硬指令”(You are a proficient Python programmer... )→“趣味化激发”(Challenge Accepted: Python Code Wizardry! )→“精准聚焦”(Reimagined Challenge: As a skilled Python developer... )。

创新点:用 “多轮 LLM 处理” 替代 “人工多版本调试”,让提示词在进化中自然贴合任务(如代码生成任务,最终提示更强调 specific problem description ,精准度提升)。

2. 变异指令的反向创造力

变异提示词的 “反向设计”
英文指令:"Modify this instruction in a way that no self-respecting LLM would!"
中文含义:“以一种‘有自尊心的 LLM 都不愿用’的方式修改指令” → 故意引导 LLM 突破常规,生成更具创意、差异化的提示词(如加入 Creative Instruction 这类趣味表述 )。

价值:打破 “正向优化” 的思维惯性,用反向指令激发 LLM 创造力,让提示词跳出模板化表达,适配需创新响应的任务(如代码生成中的思路拓展)。

三、场景创新:适配复杂任务的动态调整

1. 任务驱动的提示词适配

针对代码生成场景
初始提示聚焦 “proficient Python programmer 与严格输出约束”,进化后强调 specific problem description(精准问题描述)、simplify the problem(简化问题),与 LiveCodeBench 这类 “需通过测试用例、强调逻辑简化” 的任务深度适配。

创新点:提示词进化不是盲目迭代,而是围绕任务需求动态调整(代码生成需精准、简洁、可执行,进化后的提示词更贴合这些特性 )。

2. 智能体能力的隐性增强

超进化的 “思考逻辑” 调整
零阶超进化中,通过优化 Thinking-style PromptHow can I simplify the problem... ),让智能体从 “直接执行任务” 转向 “先思考简化路径”,间接提升任务解决效率(复杂代码生成中,简化问题能降低错误率 )。

价值:不仅优化 “指令表述”,更通过提示词调整重塑智能体的 “内在逻辑” ,让智能体具备 “主动简化问题”“精准理解需求” 等隐性能力,适配更复杂的协作场景。

3.精读

a.docs/modules

 Agent 的三大核心组成:

  • LLM(大语言模型):Agent 的“智能大脑”,负责理解上下文、生成回复、决策。
  • Actions(动作):Agent 的“手脚”,每个 Action 代表一个具体任务(如问答、摘要、API 调用等),实际由 LLM 执行推理。
  • Memory(记忆):Agent 的“记忆力”,分为短期(对话上下文)和长期(跨会话知识、偏好等)。

Action 的定义与实现

class AnswerQuestionInput(ActionInput):question: strclass AnswerQuestionOutput(ActionOutput):answer: strclass AnswerQuestionAction(Action):def __init__(self, name = "answer_question",description = "Answers a factual question using the LLM",   prompt = "Answer the following question as accurately as possible:\n\n{question}",inputs_format = AnswerQuestionInput,outputs_format = AnswerQuestionOutput,**kwargs):super().__init__(name=name, description=description, prompt=prompt, inputs_format=inputs_format, outputs_format=outputs_format, **kwargs)def execute(self, llm, inputs, sys_msg = None, return_prompt = False, **kwargs) -> AnswerQuestionOutput:question = inputs.get("question")prompt = self.prompt.format(question=question)response = llm.generate(prompt=prompt, system_message=sys_msg,parser=self.outputs_format, parse_mode="str")if return_prompt:return response, promptreturn response async def async_execute(self, llm, inputs, sys_msg = None, return_prompt = False, **kwargs) -> AnswerQuestionOutput:question = inputs.get("question")prompt = self.prompt.format(question=question)response = await llm.async_generate(prompt=prompt, system_message=sys_msg,parser=self.outputs_format, parse_mode="str")   if return_prompt:return response, promptreturn response 

输入输出数据结构定义

class AnswerQuestionInput(ActionInput):question: strclass AnswerQuestionOutput(ActionOutput):answer: str

这两行定义了动作的输入输出格式,都继承自 ActionInput 和 ActionOutput。

AnswerQuestionInput 只包含一个字段 question,表示用户要提问的问题。

AnswerQuestionOutput 只包含一个字段 answer,表示 LLM 返回的答案。

这种结构化定义有利于类型检查、自动文档生成和后续解析。

动作类定义

class AnswerQuestionInput(ActionInput):question: strclass AnswerQuestionOutput(ActionOutput):answer: strclass AnswerQuestionAction(Action):def __init__(self, name = "answer_question",description = "Answers a factual question using the LLM",   prompt = "Answer the following question as accurately as possible:\n\n{question}",inputs_format = AnswerQuestionInput,outputs_format = AnswerQuestionOutput,**kwargs):super().__init__(name=name, description=description, prompt=prompt, inputs_format=inputs_format, outputs_format=outputs_format, **kwargs)def execute(self, llm, inputs, sys_msg = None, return_prompt = False, **kwargs) -> AnswerQuestionOutput:question = inputs.get("question")prompt = self.prompt.format(question=question)response = llm.generate(prompt=prompt, system_message=sys_msg,parser=self.outputs_format, parse_mode="str")if return_prompt:return response, promptreturn response async def async_execute(self, llm, inputs, sys_msg = None, return_prompt = False, **kwargs) -> AnswerQuestionOutput:question = inputs.get("question")prompt = self.prompt.format(question=question)response = await llm.async_generate(prompt=prompt, system_message=sys_msg,parser=self.outputs_format, parse_mode="str")   if return_prompt:return response, promptreturn response 

name:动作名称,便于 agent 调用和管理。

description:动作描述,便于文档和 profile 展示。

prompt:LLM 提示词模板,{question} 会被实际问题替换。

inputs_format/outputs_format:指定输入输出的数据结构。

**kwargs:支持额外参数传递。

super().__init__:调用父类 Action 的构造方法,完成注册和初始化。

参数说明:

llm:大语言模型实例(如 OpenAI GPT)。

inputs:输入数据(字典),应包含 question 字段。

sys_msg:系统提示词(可选)。

return_prompt:是否返回 prompt(调试用)。

执行流程:

从 inputs 取出 question。

用 prompt 模板格式化出最终提示词。

调用 llm.generate 生成答案,传入 prompt、系统提示词、输出解析器(outputs_format)、解析模式。

如果 return_prompt 为 True,则返回 (response, prompt);否则只返回 response。

返回值类型为 AnswerQuestionOutput(结构化答案)。

Agent 的创建与调用

from evoagentx.agents import Agent
from evoagentx.models import OpenAILLMConfigllm_config = OpenAILLMConfig(model="gpt-4o-mini", openai_key="your-api-key")agent = Agent(name="AssistantAgent",description="Answers a factual question using the LLM",llm_config=llm_config,system_prompt="You are a helpful assistant.",actions=[AnswerQuestionAction()]
)

gent 通过 llm_config 绑定大模型(如 OpenAI GPT-4o)。

actions 参数传入所有可用的 Action 实例。

system_prompt 设定全局系统提示词。

Memory 管理

messages = agent.short_term_memory.get(n=5)  # 获取最近5条消息
agent.clear_short_term_memory()              # 清空短期记忆

Agent 内置短期记忆(如对话历史),可随时获取或清空。

Agent Profile(能力描述)

profile = agent.get_agent_profile()
print(profile)

可输出 agent 及其所有 action 的能力描述,便于理解和调试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92324.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92324.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/92324.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MCP 协议:AI 时代的 “万能转接头”,从 “手动粘贴” 到 “万能接口”:MCP 协议如何重构 AI 工具调用规则?

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)【陈敬雷编著】【清华大学出版社】 清华《GPT多模态大模型与AI Agent智能体》书籍配套视频课程【陈敬雷…

VUE本地构建生产环境版本用于局域网访问

🚀构建生产环境版本用于局域网访问(适用于 Vue 项目) 在开发 Vue 项目的过程中,很多人使用 yarn serve 启动开发服务器进行调试。但开发模式存在以下问题: 访问速度慢,特别是局域网访问;热更新频…

【密码学】5. 公钥密码

这里写自定义目录标题公钥密码密码学中的常用数学知识群、环、域素数和互素数模运算模指数运算费尔马定理、欧拉定理、卡米歇尔定理素性检验欧几里得算法中国剩余定理(CRT)离散对数二次剩余循环群循环群的选取双线性映射计算复杂性公钥密码体制的基本概念…

VINS-Fusion+UWB辅助算法高精度实现

VINS-FusionUWB辅助算法高精度实现 摘要 本文详细介绍了基于VINS-Fusion框架结合UWB辅助的高精度定位算法实现。通过将视觉惯性里程计(VIO)与超宽带(UWB)测距技术融合,显著提高了复杂环境下的定位精度和鲁棒性。本文首先分析了VINS-Fusion和UWB各自的技术特点&#…

新手向:Python实现简易计算器

你是否一直想学习编程但不知从何入手?这篇详细的教程将带领完全零基础的读者,循序渐进地掌握如何用Python实现一个简易计算器。我们将从最基本的编程概念讲起,确保每一位初学者都能跟上进度。准备工作在开始之前,你需要&#xff1…

区块链赋能供应链金融:解决信任与效率问题

摘要: 随着全球经济一体化和数字化进程的加速,供应链金融在实体经济发展中的作用愈发关键。然而,传统供应链金融面临着信任机制薄弱和效率低下等诸多挑战。区块链技术凭借其去中心化、不可篡改、可追溯等特性,为供应链金融带来了创新的解决方案,能够有效解决信任与效率问题…

无人机 × 巡检 × AI识别:一套可复制的超低延迟低空视频感知系统搭建实践

✳️ 引言:低空感知,正重构数字世界的“底层感官接口” 随着低空经济进入规模化部署阶段,感知系统不再是“任务辅助”,而是演变为支撑智能化运行的基础设施核心模块。从电力巡检的高空细节识别,到城市安防的区域态势掌…

STM32U5 外部中断不响应问题分析

关键字: EXTI 1. 问题背景 客户的终端客户反馈产品会有偶发性的功能异常。问题比较难以复现。 经过调查,在 BOOT 程序跳转到 APP1 程序中时相对比较容易复现问题。查看客户代码,发现客户在 BOOT 程序中会对 EXTI 进行初始化,跳…

17.Linux :selinux

Linux : selinux DAC vs MAC 对比模型控制方式决策依据安全强度DAC自主访问控制文件所有者的权限设置低MAC强制访问控制系统级安全策略极高SELinux的核心原理是基于 强制访问控制(MAC) 模型,通过为系统资源打上安全标签并制定精细…

如何在不停机的情况下,将MySQL单库的数据迁移到分库分表的架构上?

在业务高速发展的过程中,单库单表的MySQL架构往往会成为系统性能的瓶颈。将单库迁移到分库分表架构是一种常见的扩展方案,但如何在保证业务连续性的前提下完成这一迁移是一个挑战。以下是不停机迁移的几种主要方案: 一、基于双写的迁移方案 1…

Unix/Linux 系统编程中用于管理信号处理行为的核心概念或模型

在 Unix/Linux 系统编程中,管理信号处理行为涉及以下核心概念和模型,它们共同构成了信号处理的框架:1. 信号(Signal)模型 软件中断:信号是异步事件通知机制,类比硬件中断预定义类型:…

webrtc弱网-OveruseFrameDetector源码分析与算法原理

一、核心功能CPU负载检测:监控视频帧的捕获、编码、发送全流程耗时,实时计算CPU使用率自适应决策:基于CPU使用率阈值触发视频质量调整(降级/升级)多策略支持:提供新旧两套CPU负载估计算法,支持实…

Spring Cloud系列—Eureka服务注册/发现

上篇文章: Spring Cloud系列—简介https://blog.csdn.net/sniper_fandc/article/details/149936339?fromshareblogdetail&sharetypeblogdetail&sharerId149936339&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 在上篇文章中&…

QUdpSocket 详解:从协议基础、通信模式、数据传输特点、应用场景、调用方式到实战应用全面解析

前言 在网络通信的世界里,UDP 协议以其独特的 “快准狠” 特性占据着一席之地。作为 Qt 框架中 UDP 协议的封装者,QUdpSocket 为开发者提供了便捷高效的网络编程接口。​ 一、UDP 协议基础:QUdpSocket 的 历史 要理解 QUdpSocket,…

vue中reactive()和ref()的用法

在 Vue 3 的 Composition API 里,reactive() 和 ref() 都是用来把「普通数据」变成「响应式数据」的函数。 一句话区别: reactive() 只能包裹对象/数组;ref() 可以包裹任何类型,但在 模板 里读取时,不需要 .value。 下…

【公考基础】----备考规划篇

公考 公考:国家公务员考试 即:国考和省考 或 参公考试 包括但不限于:国考、省考、事业单位招考、教师招聘考试、军队文职招考等,一切进入国家党政军事业单位的考试。 考公整体流程 备考前:准备备考资料&#xf…

STM32江科大学习笔记,全功能按键非阻塞式实现,按键点击,双击,长按

目录 一、前言 二、关于实现非阻塞的办法 2.1 中断类型的选择 2.2 定时器中断 二、程序流程图 2.1 状态S0空闲状态 2.2 状态S1按键判断长按还是其他的事件 2.3 状态S2按键判断双击或者单击 2.4 状态S3按键已双击状态 2.5 状态S4长按状态 三、编写代码 3.1 按键初始…

动态代理常用的两种方式?

口语化回答好的,面试官,动态常见的两种,一种是 jdk 动态代理,一种是 cglib 动态代理,两者的最主要区别是 jdk 动态代理主要是依赖于接口创建代理对象,cglib 是通过生成子类的方式,不需要接口&am…

StarRocks vs ClickHouse:2025 年 OLAP 引擎终极对比指南

StarRocks 与 ClickHouse:高性能 OLAP 引擎的两种选择在当今数据驱动的商业环境中,选择合适的分析型数据库对于企业数据战略至关重要。StarRocks 和 ClickHouse 作为两款领先的 OLAP(在线分析处理)引擎,各自拥有独特的…

RuoYi-Cloud 微服务本地部署详细流程实录(IDEA + 本地 Windows 环境)

本文以 RuoYi-Cloud 3.x 版本为例,开发工具用的是 IntelliJ IDEA,数据库为 MySQL 8.x,注册中心选用本地 Nacos 2.2.3,Redis 为 3.x/5.x 均可。亲测全流程可用,细节与官方文档略有不同,避免新手踩坑。 目录 …