找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1757

积分

0

好友

263

主题
发表于 4 小时前 | 查看: 1| 回复: 0

本文将深入探讨如何构建一个“自我编程”的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系统的工程架构遵循清晰的分区设计理念,模拟人类大脑的不同功能区。

图片

  • Agent:一个Agent对应一个独立线程,其生命周期由线程池管理。
    图片

  • Area(功能区)
    图片

    1. 感知区:负责接收并处理用户消息、点击事件、子Agent返回结果等外部信息,进行主语言解析、场景分析、问题增强等预处理。
    2. 认知区:接收感知区的数据,通过IntentPlanner使用Segment机制处理用户需求并生成对应代码,提交给Python引擎执行。对于复杂任务,会移交给运动区。
      图片
    3. 运动区:作为高级认知区,处理复杂任务。通过TaskExecutor发起内部循环,逐轮制定子目标、执行、评估,直至任务完成或放弃。
      图片
    4. 表达区:负责将内部信息以文本、卡片或事件等形式传递给用户。
      图片
    5. 自我评估区:在任务执行后,触发SelfTaskCheck评估任务完成情况,必要时重新触发任务。
      图片

上下文工程

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

图片
图片
图片

上下文组成
  1. Segments:包含当前轮次的Segment集合和历史所有轮次的Segment集合,提供执行状态和长期记忆。
  2. 经验:来自历史成功/失败案例的工具使用经验和最佳实践。
  3. 知识增强:基于查询的动态知识检索和领域知识注入。
  4. 环境上下文:包含会话ID、追踪ID、租户信息、变量存储等。
  5. 工具上下文:动态可用的工具包清单及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实现并进行泛化调用。
图片

Toolkit工具包

将能力封装为四大类工具包:

  1. Custom Card Toolkit:提供丰富的交互卡片(如转人工卡片、运维卡片)。
    图片
  2. Mcp Toolkit:通过MCP协议标准化集成外部服务。
  3. Agent Toolkit:基于A2A协议实现多Agent间的任务分发、进度汇报与协作。
  4. 工具包注册与管理
    • 动态注册:实现DynamicToolkit接口,支持运行时热插拔。
    • 注解式注册:使用@ToolkitComponent@ToolkitOperation注解声明式定义。
    • 两种机制独立并行,由统一的门面提供访问。
      图片

反思与展望

开发经验总结
  1. Prompt与上下文工程需精心设计:应从粗糙的完整Prompt开始验证,再拆分为模块化部分实现,并持续迭代优化。避免出现庞大混乱的“超级Prompt”。
  2. 工程架构至关重要:模型决定上限,工程决定下限。需系统设计持久化、任务管理、监控观测、记忆管理等工程细节,才能充分发挥模型潜力。
  3. 通过经验积累实现自我进化:构建“收集->加工->存储->检索”的经验循环,利用历史成功案例提升执行的稳定性和质量,可探索结合向量数据库与知识图谱。
展望与优化路径

目标是打造成为可靠的“1.5线”智能助手,具备初级程序员水平。未来优化方向包括:

  1. 使Prompt拼接更加动态化,甚至由Agent自主选择。
  2. 合并IntentPlanner与TaskExecutor的底层能力,提供更通用的Coding驱动模型。
  3. 优化任务间上下文隔离。
  4. 实现知识与经验的持续“保鲜”。
  5. 扩展Mcp与Agent的能力深度与广度。
  6. 开发便捷的桌面端应用。
  7. 完善日志、监控、评测体系。



上一篇:Ubuntu 服务器重启时间查询指南:运维排查必备的5种方法
下一篇:Adam优化算法深度解析:从理论到实战,提升深度学习模型训练效率
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-24 18:57 , Processed in 0.337482 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表