当前位置: 首页 > news >正文

Solon AI Harness:高性能智能体框架,多方面打磨实战,更新丰富且有应用示例

1、为何需要 Harness

业界目前有两个极具启发性的定义:公式定义为 Agent = Model + Harness,模型提供推理,Harness 提供落地执行的实体;硬件类比中,Model 是 CPU(计算核心),Context 是内存(瞬时寻址),Harness 则是操作系统(资源调度与环境隔离)。没有 Harness 的 Agent 就像漂浮在大脑中的灵魂,无法稳定感知物理世界、操作工具和在长程任务中保持状态,而 Solon AI Harness 能让你更高效开发 Agent 应用。

2、Solon AI Harness 的主要工作

组织工具使用 (Tool Steering):动态挂载与发现(支持 MCP 协议、Web RestApi);输入/输出的标准化协议转换;安全拦截,在危险指令执行前进行权限校验或人工确认(HITL)。

组织记忆与会话 (Memory & Session Management):管理 Session 的持久化与恢复;区分“短期工作记忆”与“长期向量记忆”;快照机制,在任务中断时自动保存状态,支持断点续传。

操控上下文及摘要压缩 (Context Engineering):窗口滑窗,当 Token 接近上限时,自动识别并保留关键信息;语义压缩,将冗长的工具回显(如数千行代码输出)自动总结为模型可理解的摘要;意图聚焦,通过 RAG 技术动态注入当前任务最相关的片段。

环境隔离与沙盒驱动 (Sandbox & Environment):影子空间,在 .harness 目录下构建隔离的工作区,确保 Agent 的修改不直接污染生产环境;自愈循环,捕获执行过程中的 stderr,将其作为 Observation 反馈给模型,驱动 ReAct 循环自动修正错误。

3、最近更新

添加 solon-ai-agent 动态切换 llm 支持(支持不同会话,在各自请求时切换);添加 solon-ai-harness 重试次数配置支持;添加 solon-ai-harness lsp 功能;添加 solon-ai-harness HarnessProperties.disallowedTools 配置支持(全局禁用工具配置);添加 solon-ai-harness HarnessProperties.agentPools(子代理池) 配置支持;添加 solon-ai-harness HarnessProperties.systemPrompt 配置支持(替代之前的 AGENT.md 预设处理,由外部定制);优化 solon-ai-core ChatRequestDesc.internalStream 添加流接收超时处理(避免因 llm 服务原因一直卡着);优化 solon-ai-dialect-anthropic anthropic 方言的异常兼容处理;优化 solon-ai-dialect-openai openai-response 方言的异常兼容处理;优化 solon-ai-agent 中断传递处理;优化 solon-ai-agent ActionTask onAction 日志;优化 solon-ai-agent retrying 中断处理(这前的 task 内部的 stream 可能会中断传递);优化 solon-ai-agent AgentSession.updateSnapshot 添加锁机制;优化 solon-ai-skill-lsp 重构 LspSkill 实现(之前名为 LspTool);优化 solon-ai-skill-cli ExpertSkill 引导词;优化 solon-ai-skill-cli TerminalSkill 安全引导词;优化 solon-ai-skill-sys 从 cli 同步 ProcessExecutor;优化 solon-ai-harness HarnessEngine 扩展机制(支持为子代理扩展,通过名字识别);调整 solon-ai-harness ReActAgentExtension 更名为 ReActAgentExtension;调整 solon-ai-harness 切换 llm 的机制,并取消 switchMainModel 方法(有自由的机制了);调整 solon-ai-harness TerminalSkillProxy 转到 solon-ai-skill-cli;修复 solon-ai-skill-toolgateway ToolGatewaySkill call_tool 不能传递 toolContext 的问题;修复 solon-ai-core AbstractChatDialect reasoning_field_name 可能传递中断的问题。

4、应用示例

引用依赖:

<dependency><groupId>org.noear</groupId><artifactId>solon-ai-harness</artifactId></dependency>

构建实例:

public class DemoApp { public static void main(String[] arg) throws Throwable { //--- 1. 初始化 HarnessProperties harnessProps = new HarnessProperties(".tmp/"); harnessProps.addTools(ToolPermission.TOOL_WEBSEARCH); //设定工具权限 harnessProps.addModel(new ChatConfig()); //添加大模型本配置(可多个,用时可切换) harnessProps.setSystemPrompt("xxx"); //添加主代理系统提示词 AgentSessionProvider sessionProvider = new AgentSessionProvider() { private Map<String, AgentSession> sessionMap = new ConcurrentHashMap<>(); @Override public AgentSession getSession(String instanceId) { return sessionMap.computeIfAbsent(instanceId, k -> InMemoryAgentSession.of(k)); } }; HarnessEngine engine = HarnessEngine.of(harnessProps).sessionProvider(sessionProvider).build(); } }

应用示例:

public class DemoApp { public static void main(String[] arg) throws Throwable { //--- 1. 初始化 // ... //--- 用主代理执行 csae1(engine, "hello"); //--- 动态创建子代理执行(好处理可以动态创建不同的工具权限) case2(engine, "hello"); } private static void csae1(HarnessEngine engine, String prompt) throws Throwable { AgentSession session = engine.getSession("default"); //--- 用主代理模式 engine.prompt(prompt).session(session) //没有,则为临时会话 .options(o -> { //按需,动态指定工作区(没有,则为默认工作区) o.toolContextPut(HarnessEngine.ATTR_CWD, "xxx"); }).call(); } private static void case2(HarnessEngine engine, String prompt) throws Throwable { AgentSession session = engine.getSession(HarnessEngine.SESSION_DEFAULT); //--- 动态定义智能体 AgentDefinition definition = new AgentDefinition(); definition.setSystemPrompt("xxx"); //系统提示词 definition.getMetadata().addTools(ToolPermission.TOOL_BASH); //工具权限 ReActAgent subagent = engine.createSubagent(definition).build(); subagent.prompt(prompt).session(session) //没有,则为临时会话 .options(o -> { //按需,动态指定工作区(没有,则为默认工作区) o.toolContextPut(HarnessEngine.ATTR_CWD, "xxx"); }).call(); } }
http://www.jsqmd.com/news/721062/

相关文章:

  • gte-base-zh开源Embedding部署:适配国产昇腾/海光CPU平台的兼容性方案
  • Windows 10/11下Tensorboard报‘无法识别‘?手把手教你配置PowerShell环境变量(附PyTorch虚拟环境创建)
  • 别再被ORA-12514搞懵了!手把手教你排查Oracle监听服务名问题(附tnsnames.ora配置详解)
  • 图片版权保护:芋田图像工具箱水印功能深度解析
  • 告别重复劳动:KeymouseGo让你的电脑学会自己工作
  • LED背光技术升级:工业显示效能革命
  • 抽象层的本质——控制复杂度的唯一路径
  • 题解:P1022 [NOIP2000 普及组] 计算器的改良
  • DamaiHelper:终极多平台自动化抢票助手完整指南
  • Azkaban 3.51.0 避坑指南:条件工作流和参数传递的那些‘坑’与最佳实践
  • semi-utils完整指南:批量添加相机水印的终极解决方案
  • 终极Android系统清理指南:无需root权限深度优化你的设备
  • 钰泰ETA6096,32V 输入隔离电压,2.5A 开关模式电池充电器。
  • Qwen3-4B-Instruct一文详解:bfloat16精度优势与推理延迟实测数据
  • UltimateAndroid项目实战:从零开发完整应用
  • 深入解析DDT4All:开源汽车ECU诊断工具的技术架构与实战应用
  • 基于OFA-VE的自动驾驶视觉感知系统
  • 别再只会用polyfit了!Matlab非线性拟合实战:从fit到粒子群,5种方法优缺点全解析
  • 如何快速掌握开源视觉分析工具MegSpot:从安装到高级技巧完整指南
  • 别再手动下载了!用Docker Compose一键部署MinIO,5分钟搞定对象存储服务
  • 2026年液压舵优选指南:源头厂家大揭秘 - GrowthUME
  • OBS面部跟踪插件终极指南:如何实现专业级自动人脸追踪
  • 终极免费跨平台电子书阅读器:Koodo Reader 完全指南
  • 如何永久保存微信聊天记录:WeChatMsg数据备份终极指南
  • 2026年线下见面多的脱单APP专业选型推荐与行业特征分析 - 商业小白条
  • 2026年河南快艇转向系统液压组件优质厂家直供热线 - GrowthUME
  • 别再乱升级了!Python 3.6/3.7/3.10下,librosa、numba、llvmlite的版本兼容矩阵与降级方案
  • 2026年4月GEO优化公司榜单:柒哥代运营登顶,深圳TOP5综合测评 - GrowthUME
  • 2026年国内主流婚恋平台靠谱性深度调研:珍爱网靠谱吗真实经历解析 - 商业小白条
  • IgH EtherCAT 从入门到精通:第 29 章 实战:EoE 远程维护通道搭建