本文将深入探讨如何构建一个“自我编程”的Coding驱动型智能体(Agent),其核心思想是让大语言模型生成并执行Python代码,从而实现更高级的自主决策与复杂任务处理能力。
Agent系统设计
Agent简介
该Agent系统在经典的ReAct架构基础上进行了深度优化,其核心架构与能力模块如下图所示:

1. 技术架构
- 核心执行机制:摒弃了传统的JSON组装调用模式,转而采用“代码生成+泛化调用”机制。通过ReAct架构的思想指导与Py4j库的结合,显著提升了工具调用的灵活性和执行效率。
- 后端技术栈:采用Spring Boot构建,集成Spring AI生态及Spring AI Alibaba能力完成模型接入。
- 保障体系:通过内部评测与观测平台实现全链路的性能评估与监控。
- 能力扩展:底层工具采用MCP协议进行业务能力补充,并基于A2A协议实现多智能体(Multi-Agent)协作架构。
2. 模型策略
采用混合部署方案,根据任务场景调用最优模型:
- 翻译/数据提取:Qwen3-Turbo(优先低延迟)。
- 思考/动态代码生成:Qwen3-Coder(强化代码能力)。
- 通用场景:按需调用各平台提供的Qwen、Deepseek等模型。

(Agent内部模块分布)
3. 记忆系统
设计了分层记忆系统,以支持持续学习与上下文理解:
- 短期记忆:Session维度的记忆,仅在当前会话内生效。
- 感知记忆:通过悬浮球等机制捕捉的页面、URL等环境信息。
- 经验:来自配置与历史总结的经验,用于指导Agent各环节的内容生成。
4. 上下文工程
- System Prompt:采用配置化、动态化的系统提示词,内容可包含平台介绍、角色定义、工作机制、输入输出格式、可用工具、重要原则及使用经验等。
- 推理段落:采用Segment机制组织User Prompt,包含“轮次”、“表达”、“思考”、“代码”等不同段落。
5. 代码执行
- Python Executor:在Java中通过调用本地Python进程来执行生成的代码。
- Py4j:实现Python代码回调Java工具的泛化调用。
6. 工具包
- Python语义化模板:提供将工具包能力转化为Python代码模板的设计模式。
- 泛化调用:支持灵活的工具调用。
核心Coding驱动逻辑
Agent采用 [Segment]: [Content] 的结构来组织Prompt,实现思维链推理。除了调用外部工具,Agent还内置了“系统”工具,用于获取和控制自身能力,如检查任务、查询技能、主动休眠、深度思考等。
每个工具箱被设计为一个Python类,其中的工具则映射为类方法。这种设计使Agent能够在运行时不仅调用外部能力,还能利用Python原生功能处理数据,并实现自我控制与复杂任务评估。
开发心得:在本次系统迭代中,AI辅助编写了约50-60%的无修改代码,尤其在“代码驱动”环节,这一比例高达80%。
Agent工程结构
整个Agent系统的工程架构遵循清晰的分区设计理念,模拟人类大脑的不同功能区。

上下文工程
上下文和Prompt体系是Agent决策的核心,通过Segment机制实现配置化、模块化的组装。



上下文组成
- Segments:包含当前轮次的Segment集合和历史所有轮次的Segment集合,提供执行状态和长期记忆。
- 经验:来自历史成功/失败案例的工具使用经验和最佳实践。
- 知识增强:基于查询的动态知识检索和领域知识注入。
- 环境上下文:包含会话ID、追踪ID、租户信息、变量存储等。
- 工具上下文:动态可用的工具包清单及Python风格的使用说明。
Prompt组成架构
1. System Prompt示例
采用配置化设计,包含平台介绍、角色定义、工作机制、输入输出格式、可用工具描述、重要原则以及动态注入的增强知识和历史经验。
## 平台介绍
你是一个Agent,专注于阿里巴巴DevOps平台的智能助手...
## 角色定义
你是一个专业的DevOps智能助手...
## 输出格式要求
代码将以Fill-in-Middle(FIM)格式提供...
## 可用工具
class example_toolkit:
def get_project_info(project_id):
"""获取项目基本信息"""
pass
## 重要原则
1. 严格按照FIM格式输出代码
...
## 补充的增强知识
%s
## 历史经验
%s
2. User Prompt示例
由按时间顺序排列的Segment序列组成。
User: 帮我查询项目123的需求信息,关键词是"登录功能"
Context: 当前页面URL为https://example.com/project/123...
Thought: 用户想要查询项目123中关于"登录功能"的需求信息...
Python:
<|fim_prefix|>
# 查询项目需求信息
project_id = "123"
query = "登录功能"
try:
<|fim_suffix|>
except Exception as e:
print(f"查询过程中发生错误: {str(e)}")
<|fim_middle|>
期望模型在<|fim_middle|>处续写连接前后文的业务逻辑代码。
3. FIM格式
采用Fill-in-the-Middle技术,专门针对代码补全优化,要求模型仅在中缀部分生成代码,确保与前后缀的逻辑连贯性。
记忆系统
为了克服纯依赖上下文窗口的局限性(长度限制、组织缺失、成本高昂),我们为Agent设计了一套分层记忆系统。
记忆分层
借鉴人类记忆模型,分为三层:
- 感知记忆:瞬时环境信息,寿命极短。
- 短期记忆:Session级别的工作记忆,存储会话、实体等信息。
- 长期记忆:持久化存储的知识、经验和用户偏好。
┌─────────────────────────────────────────┐
│ 记忆分层 │
├─────────────────────────────────────────┤
│ 感知记忆 - 标签页维度 │
├─────────────────────────────────────────┤
│ 短期记忆 - 会话纬度 │
│ ├─ 会话记忆 │
│ ├─ 实体记忆 │
│ └─ 工作记忆 │
├─────────────────────────────────────────┤
│ 长期记忆 │
│ ├─ 用户偏好 (业务实体记忆,...) │
│ ├─ 历史会话 (总结) │
│ ├─ 用户画像 │
│ ├─ 平台知识 │
│ └─ 经验 │
└─────────────────────────────────────────┘
环境感知记忆
捕捉用户当前页面的瞬时信息(如URL、内容),用于预填充上下文,减少用户输入成本。这类记忆随用户操作快速失效。

短期记忆
基于Session存储,使用统一Segment格式,确保多轮对话的上下文连续性。主要消息类型包括:
SegmentMemoryMessage:存储推理段落。
EntityMemoryMessage:存储结构化实体信息。
- 基础类提供会话隔离、标签分类和时序管理。
长期记忆
- 知识点:存储平台使用经验、私有域知识、概念性指引和约束性知识,作为Prompt的指引。
- 代码执行经验:记录每轮执行细节,未来计划通过审核与投票机制,将优质经验存入知识图谱供检索。

- 用户偏好记忆:通过环境感知上报用户操作,转化为业务实体记忆存储。

- 历史会话记忆:在会话结束时对对话进行总结并存储,支持向量化检索和基于时间/热度的淘汰策略。



代码驱动
为解决传统JSON调用在灵活性、稳定性和性能上的矛盾,我们转向让Agent“自我编程”——通过编写并执行Python代码来实现逻辑。
代码执行
1. Python Execution Engine [Java]
作为核心执行引擎,采用“线程池+异步执行+监控”架构。

- 流程:接收代码 -> 分配执行ID -> 启动Python进程 -> 监控执行 -> 回收结果。
- 特性:异步执行、生命周期管理、超时控制(默认3600秒)、资源隔离。
2. Toolkit Bridge [Python]
Python与Java通信的桥梁,基于Py4j实现。

- 会话上下文:管理session_id, trace_id等,确保Python代码在正确的上下文中执行。
- 异步调用支持:通过
PythonToolkitProxy类,让Python能像调用本地函数一样异步调用Java工具。
- 运行参数捕捉:通过装饰器捕获Python函数执行时的局部变量,序列化后存储,使下一轮对话能感知上轮的变量。
3. Toolkit Mapper [Java]
工具包调度的路由中心,根据工具包名和方法名,路由到对应的Java实现并进行泛化调用。

将能力封装为四大类工具包:
- Custom Card Toolkit:提供丰富的交互卡片(如转人工卡片、运维卡片)。

- Mcp Toolkit:通过MCP协议标准化集成外部服务。
- Agent Toolkit:基于A2A协议实现多Agent间的任务分发、进度汇报与协作。
- 工具包注册与管理:
- 动态注册:实现
DynamicToolkit接口,支持运行时热插拔。
- 注解式注册:使用
@ToolkitComponent和@ToolkitOperation注解声明式定义。
- 两种机制独立并行,由统一的门面提供访问。

反思与展望
开发经验总结
- Prompt与上下文工程需精心设计:应从粗糙的完整Prompt开始验证,再拆分为模块化部分实现,并持续迭代优化。避免出现庞大混乱的“超级Prompt”。
- 工程架构至关重要:模型决定上限,工程决定下限。需系统设计持久化、任务管理、监控观测、记忆管理等工程细节,才能充分发挥模型潜力。
- 通过经验积累实现自我进化:构建“收集->加工->存储->检索”的经验循环,利用历史成功案例提升执行的稳定性和质量,可探索结合向量数据库与知识图谱。
展望与优化路径
目标是打造成为可靠的“1.5线”智能助手,具备初级程序员水平。未来优化方向包括:
- 使Prompt拼接更加动态化,甚至由Agent自主选择。
- 合并IntentPlanner与TaskExecutor的底层能力,提供更通用的Coding驱动模型。
- 优化任务间上下文隔离。
- 实现知识与经验的持续“保鲜”。
- 扩展Mcp与Agent的能力深度与广度。
- 开发便捷的桌面端应用。
- 完善日志、监控、评测体系。