自己使用C++开发的仿OpenClaw、Hermes智能体工具

发布时间:2026/6/28 8:49:02
自己使用C++开发的仿OpenClaw、Hermes智能体工具 使用C开发的原因是我只会C/C虽然熟悉一点Python但只能勉强上手对于开发复杂度较高的项目就会捉襟见肘。相较于Python、TypeScript等脚本语言使用C开发的难度比较大由于缺少第三方库的原因很多看似简单的功能都要亲自实现哪怕是json解析。比如一开始就遇到的通信问题也就是大模型的流式SSE输出尤其是这种输出是以chunk的方式到来。对于Python来说通信这块可能连问题都算不上因为只需要导入OpenAI库就能解决所有的通信问题。对于C来说现有的HTTP API显然无法满足这种要求因此实现一个基于HTTP协议的、稳定的、健壮的、异步的通信就只能亲自动手实现了。这就意味要用原始socket实现一边接收数据一边组装数据一边解析数据一遍展现数据。实际上即使你完成了上述通信工作也仅仅是个开始接下来还有更多的来自业务层的问题等待你去解决1、通信过程中用户取消了会话2、多轮会话中用户取消了当前会话3、如何处理工具调用超时或异常比如始终无法与一个远程MCP服务建立通信或者外部工具一直不返回结果4、如何处理多工具调用是多线程并发处理还是一个一个处理如果其中一个异常该如何解决5、工具调用过程中如果用户取消会话如何处理如何优雅的解决掉正在执行中的工具调用6、工具返回数据过大如何处理比如通过工具读取文件内容7、多轮会话如何防止上下文窗口爆炸8、多轮会话如何实现实时持久化从而保证用户取消或程序异常退出时能够恢复当前会话...上述这些不是异常而是业务层实实在在会遇到的问题一旦处理不好则会导致灾难性的后果除非你只是写一个demo。即使处理好上述工作也仅仅是让你的Agent实现了基本的chat功能如何让Agent拥有“记忆”和“自我进化”的能力才是目前主流Agent的发展趋势这也就是OpenClaw和Hermes流行的原因。上述基础开发工作已经让我精疲力竭“记忆”和“自我进化”只能在理解上述两个Agent的基础上去尽可能的实现功能不是最重要的设计思想才是最重要的没苦硬吃的好处就是可以完全理解大模型和Agent之间的工作原理以及可能会遇到的各种坑。下面介绍一下AIAgent特点先放一段视频Agent基本演示之多轮会话一、软件开发特点完全使用C开发除Openssl和Sqlite外未使用任何第三方库自主实现如下功能异步网络通信、HTTP会话、SSE流式数据解析、多轮会话管理、工具调用及MCP管理、长期记忆管理、技能沉淀等功能纯绿色软件除依赖库外不到800K无需安装拷贝即可使用,C开发难点也是它的优点就是没有部署依赖既不需要安装Python也不用安装Node.js以及对应庞杂的依赖库。下载地址http://www.softlee.cn/AIAgent.zip使用前先设置DeepSeek的API Key请前往 DeepSeek官网申请API KeyPSzip包中AIAgent.exe是主执行程序AIMemory.exe为记忆管理工具AIAgent会调用AIMemory进行记忆和技能沉淀。二、支持上下文管理和长期记忆支持长期记忆管理使用文件、数据库、向量数据库三种存储方式实现不同层次的记忆保存1.1 文件全量保存每轮会话的全部内容用于历史会话恢复以及后续数据挖掘持续优化记忆功能1.2 数据库仅保存每轮会话问答不保存工具调用结果方便用户按关键字查找历史会话消息多轮会话可能存在大量的“非显示”工具调用内容用户一般无法感知这些工具调用结果可能会比较大比如文件读取这种非显示的工具调用结果只是中间数据不是最终结论用户其实无需关心。1.3 向量库保存重要会话的“压缩”摘要实现语义级搜索方便Agent进行历史消息查找支持记忆沉淀和跨会话记忆恢复围绕用户人和工作事两个维度沉淀长期记忆。1.1、用户相关记忆包括用户的身份、行事风格、工作习惯、行为偏好等1.2、工作相关记忆包括用户使用的开发工具、语言、环境等可能从事的工作领域和常用的办公软件等支持可控上下文管理1.1、支持滑动上文窗口管理可手动配置窗口大小1.2、支持上下文长度报警当上下文超过手动设定的阀值触发报警长期记忆的提取和沉淀时机。采用如下两种方式1.1、一种是LLM根据当前会话内容自主判断是否具备沉淀价值如果具备则触发记忆沉淀即调用子AgentAIMemory.exe进行记忆提取和沉淀1.2、另一种是用户手动进行记忆沉淀手动也分两种方式一种运行时沉淀用户在对话过程中明确要求沉淀比如告诉LLM帮我记住此次会话或其它类似表达方式。另一种是事后沉淀用户可通过查看历史消息并对有价值的对话进行记忆沉淀。通过上述两种方式可以确保记忆不被“遗忘”。如果Agent没有及时沉淀记忆用户还可以进行“补救”操作。为何这样设计Agent在记忆方面是“慢热”的需要长期积累也就是说他和用户之间有一个熟悉过程。在此过程中就不可避免的会出现LLM觉得无需沉淀但用户觉得可以沉淀的情况。通常LLM会被Prompt严格限制因此更加趋于“保守”。通常用户在编写Prompt时会要求Agent沉淀最重要的、具有长期价值的会话而不是闲聊。无论你如何设计Prompt都很难在早期避免这种情况如果Prompt写的过于宽松就会导致记忆过载一旦记忆过载或被“污染”则记忆本身的价值就失去了。只有用多了Agent才能知道哪些内容对用户是有价值的用户关心的是什么这就是小龙虾为何要用“养”这个字Hermes为何越用越懂你的原因。记忆这块不存在最好的解决方案只有最合适的解决方案不同业务模式和流程对应的记忆侧重点可能是完全不同的。比如面向编程业务的Claude Code此时不仅要记住过往的重点内容还要记忆当前的工作状态即最近用户操作的文件、函数、错误日志、解决方案等。如果你面临的业务是电商显然无法套用Claude Code的记忆管理方式。正因如此原封不动的保留原始会话的内容非常重要和关键因为记忆的提取、归纳和召回是可以在后续不断改进和优化的只要原始对话数据存在这种优化改进才能在以后得以实现。整个Agent的工作其实大部分就是围绕“记忆”的保存、提取和召回开展的。图一、历史会话消息以文件形式保存方便Agent恢复会话图二、会话详情图三、 历史会话消息保存于Sqlite数据库方便用户查找三、支持技能自主沉淀内置CLI功能支持cmd和powershell和文件读写操作Agent通过上述内置功能自主实现skill的沉淀个人认为CLI对于Agent而言就是最好、最合适的工具如果不加限制的使用CLI你的Agent一定可以做出很多你想不到的事情。理论上Agent可以通过CLI操作所有工具甚至可以调用CLI安装它所需要的工具并进行学习使用从而完成自主学习。很多CLI工具其命令行参数非常庞大一般用户很难记住但对于大模型来说则完全不是问题。对于大模型Python是其最熟悉的语言甚至比大部分开发人员更加熟悉起码编写后不会出现语法错误。正因如此开放文件的读写就显得非常重要对于复杂的任务Agent完全可以通过文件操作写一段Python脚本并将其执行从而实现最终的目的。在此过程中skill的积累是自然而然的你只需要让Agent知道需要进行Skill积累这件事就行了它通常比你还了解这些“技能”以及使用过程中踩过的坑因此它会比你亲自管理这些技能要好很多。基于上述原因内置CLI和文件读写操作就非常有必要它几乎是一个通用Agent的标配。四、其它特色功能支持远程MCP功能管理按需启动远程工具提供MCP的ToolCall编辑功能支持OpenAI和Anthropic两种API数据格式支持微信接入考虑到微信几乎是国民必备优先实现微信接入用C开发有难度实在无力接入太多支持多轮会话中的查找按词查找和按会话查找远程MCP管理微信ClawBot接入会话多轮会话内容查找