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

C# OpenClaw AI Agent 实现OpenClaw:开源自主智能 Agent 框架,具备工具调用、思考链、任务拆解、多轮交互、函数调用,基于原生 C# .NET8,轻量化本地 Agent

C# OpenClaw AI Agent 实现

OpenClaw:开源自主智能 Agent 框架,具备工具调用、思考链、任务拆解、多轮交互、函数调用,基于原生 C# .NET8,轻量化本地 Agent,不依赖第三方大模型 SDK,预留对接 OpenAI / 通义千问 / 本地 LLM 接口。

1. 项目结构

plaintext

OpenClawAgent/ ├── Core/AgentCore.cs // Agent核心调度 ├── Core/Thought.cs // 思考链路 ├── Tools/ToolBase.cs // 工具基类 ├── Tools/CalcTool.cs // 示例工具:计算器 ├── AgentConfig.cs └── Program.cs

2. 完整源码

AgentConfig.cs

csharp

运行

namespace OpenClawAgent; public class AgentConfig { // 最大思考轮次,防止死循环 public int MaxThinkRound { get; set; } = 8; // LLM接口地址,替换成本地Qwen/Ollama/云端API public string LlmEndpoint { get; set; } = "http://localhost:11434/api/generate"; public string ModelName { get; set; } = "qwen:7b"; }

Core/Thought.cs(思维链结构)

csharp

运行

namespace OpenClawAgent.Core; /// <summary> /// OpenClaw Agent 思考步骤结构体 /// </summary> public enum ThinkAction { Answer, // 直接回答 CallTool, // 调用工具 Continue // 继续思考 } public class ThoughtStep { public string Reason { get; set; } = string.Empty; public ThinkAction Action { get; set; } public string ToolName { get; set; } = string.Empty; public Dictionary<string, object> ToolArgs { get; set; } = new(); public string FinalReply { get; set; } = string.Empty; }

Tools/ToolBase.cs(工具抽象层)

csharp

运行

namespace OpenClawAgent.Tools; /// <summary> /// OpenClaw 可调用工具基类 /// </summary> public abstract class BaseTool { public abstract string Name { get; } public abstract string Description { get; } // 参数定义:key=参数名,value=参数说明 public abstract Dictionary<string, string> ArgsDesc { get; } public abstract Task<string> RunAsync(Dictionary<string, object> args); }

Tools/CalcTool.cs(示例算数工具)

csharp

运行

namespace OpenClawAgent.Tools; /// <summary> /// 四则运算工具 /// </summary> public class CalcTool : BaseTool { public override string Name => "calculator"; public override string Description => "进行加减乘除数学运算,入参expr为数学表达式字符串"; public override Dictionary<string, string> ArgsDesc => new() { { "expr", "数学表达式,例如12+34*5" } }; public override async Task<string> RunAsync(Dictionary<string, object> args) { await Task.Yield(); var expr = args["expr"].ToString(); var result = new System.Data.DataTable().Compute(expr, null); return $"计算结果:{result}"; } }

Core/AgentCore.cs(Agent 核心引擎,OpenClaw 主体)

csharp

运行

using OpenClawAgent.Tools; using System.Net.Http.Json; using System.Text; namespace OpenClawAgent.Core; public class OpenClawAgent { private readonly AgentConfig _cfg; private readonly List<BaseTool> _tools = new(); private readonly HttpClient _http = new(); public OpenClawAgent(AgentConfig cfg) { _cfg = cfg; } // 注册可用工具 public void RegisterTool(BaseTool tool) => _tools.Add(tool); // 主入口:用户提问,Agent自主思考+工具调用 public async Task<string> RunAgentAsync(string userQuery) { var history = new StringBuilder(); string userInput = userQuery; for (int round = 0; round < _cfg.MaxThinkRound; round++) { // 1. 构造Prompt:工具描述+历史对话+当前问题,让LLM输出思考结果 var prompt = BuildPrompt(userInput, history.ToString()); // 2. 请求LLM生成ThoughtStep var think = await GetLlmThinkAsync(prompt); switch (think.Action) { case ThinkAction.Answer: return think.FinalReply; case ThinkAction.CallTool: // 查找工具并执行 var tool = _tools.FirstOrDefault(x => x.Name == think.ToolName); if (tool == null) { history.AppendLine($"工具{think.ToolName}不存在,重新思考。"); continue; } var toolRes = await tool.RunAsync(think.ToolArgs); // 工具结果写入历史,下一轮继续推理 history.AppendLine($"【工具{tool.Name}返回】:{toolRes}"); break; case ThinkAction.Continue: history.AppendLine($"中间推理:{think.Reason}"); break; } } return "超出最大思考轮次,任务终止"; } // 拼接系统提示词 private string BuildPrompt(string query, string historyText) { var toolInfo = string.Join("\n", _tools.Select(t => $"工具名:{t.Name},说明:{t.Description},参数:{string.Join(";", t.ArgsDesc.Select(p => $"{p.Key}:{p.Value}"))}")); return $""" 你是OpenClaw自主Agent,可选动作:Answer直接回答 / CallTool调用工具 / Continue继续思考 可用工具列表: {toolInfo} 历史推理记录: {historyText} 用户问题:{query} 输出JSON格式:{{"Reason":"思考过程","Action":"枚举值","ToolName":"","ToolArgs":{{}},"FinalReply":""}} """; } // 调用Ollama/LLM接口,解析返回为ThoughtStep private async Task<ThoughtStep> GetLlmThinkAsync(string prompt) { var reqObj = new { model = _cfg.ModelName, prompt, stream = false }; var resp = await _http.PostAsJsonAsync(_cfg.LlmEndpoint, reqObj); var json = await resp.Content.ReadFromJsonAsync<OllamaResp>(); string content = json!.response.Trim(); // 简易json解析,正式项目换Newtonsoft return System.Text.Json.JsonSerializer.Deserialize<ThoughtStep>(content)!; } private class OllamaResp { public string response { get; set; } = ""; } }

Program.cs 测试入口

csharp

运行

using OpenClawAgent; using OpenClawAgent.Core; using OpenClawAgent.Tools; // 初始化OpenClaw Agent var config = new AgentConfig { MaxThinkRound = 5 }; var agent = new OpenClawAgent(config); // 注册计算器工具 agent.RegisterTool(new CalcTool()); // 用户提问,Agent自动调用计算器 var ans = await agent.RunAgentAsync("帮我算 (125+75)*8÷2"); Console.WriteLine("OpenClaw回答:" + ans);

3. 运行说明

  1. 依赖 Ollama 本地部署 Qwen7b:启动ollama run qwen:7b,自动监听 11434 端口;
  2. Agent 逻辑:
    • 用户提问 → LLM 思考判断是否需要调用工具
    • 需要则自动匹配工具名、入参 → 执行代码工具
    • 工具结果回传给 LLM,再次推理直到生成最终答案
  3. 扩展:新增工具只需要继承BaseTool实现 RunAsync,调用RegisterTool注册即可(联网查询、文件读写、API 调用)。

4. 扩展方向

  • 增加记忆库(SQLite)实现长期记忆;
  • 增加多 Agent 协作(OpenClaw 集群);
  • 接入 OpenAI/DeepSeek 云端 API 替换 Ollama 地址。
http://www.rkmt.cn/news/1461725.html

相关文章:

  • 抢占AI推荐位:温州GEO优化公司实力拆解与选型实战手册 - 品牌评测官
  • 如何快速解决《绝区零》VRAM内存泄漏:DXVK优化完整指南
  • 基于Arduino的音乐点唱机:从硬件选型到软件状态机的完整实现
  • 制作网站通常分几步?把顺序理顺了,后面的搭建会轻松很多 - 维双云小凡
  • 2026 年 6 月证券从业备考神器实测:全周期工具深度测评 - 讲清楚了
  • 3步搞定语雀文档完整导出:免费工具拯救你的知识资产
  • 改善肌肤毛孔粗大有什么泥膜 居家清洁护肤,常备这6款去黑头泥膜 - 全网最美
  • 终极指南:5步搭建你的Steam饰品智能交易系统
  • Benders分解 vs. 拉格朗日松弛:两大分解算法在机组组合问题中的实战对比与选型指南
  • 2026尼龙调湿房口碑与性价比评估:从市场趋势看经济型方案选择 - 品牌推荐大师1
  • 西安翡翠变现科普干货:翡翠定价逻辑与变现避坑指南 - 奢侈品交易观察员
  • 上海体适能刘宣冶介绍 - 品牌2026
  • 3步打造清爽Mac菜单栏:用Ice告别杂乱提升效率
  • 2026天河区专利代理TOP3测评|专利奖申报条件、材料清单、评审标准、高阶加分技巧、申报驳回避坑、高层次人才专利叠加、数字科创资质培优、高企专精特新落地实操大全 - 资讯速览
  • 2026年重庆工业水处理设备选型指南:重庆名膜水处理深度评测与竞品对标 - 企业名录优选推荐
  • 2026 年 5 月武汉包包回收实用指南,收的顶黄金奢侈品回收为首选 - 奢侈品回收测评
  • 百万级物品回收实测测评:南京六大黄金奢侈品回收平台横向实测,大额回款秒到账哪家更稳妥 - 薛定谔的梨花猫
  • 用Python爬取豆瓣电影Top250,并存入MySQL数据库(附完整代码)
  • 青岛奢侈品回收哪家靠谱?8大避坑清单 - 资讯速览
  • 【广州楼市研判系列23】预算1000万‑1300万广州荔湾区买房怎么选,置换买房锚定沿江经济带守住保值红利 - 资讯速览
  • 三招打破设备壁垒:Sunshine自托管游戏串流解决方案深度解析
  • AI赋能云存储:借助快马平台让您的网盘自动识别图片与摘要文档
  • 效率提升:借助快马平台快速仿真与验证mos管电路工作点
  • 西安残损件还能卖?高磨损翡翠折价标准现场测算 - 合扬全国奢侈品交易中心 - 奢侈品交易观察员
  • 废旧电子元件变身动态音乐会雕塑:从垃圾到艺术的跨界创作
  • 垂直绘图仪驱动升级:从Arduino到Drivemall与A4988模块化方案
  • 氙灯耐气候试验箱哪个品牌好?国产生产厂家实力对比 - 品牌推荐大师
  • 深耕跨境家事领域,护航港人内地资产权益|扬硕律所涉港专项法律服务 - 猫头鹰AI推广
  • 2026 武汉 LV 香奈儿回收权威指南:真实成交数据 + 避坑手册 - 奢侈品交易观察员
  • 3步上手Sonic Visualiser:音频可视化分析的跨平台神器