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

1.OpenClaw_构建你的第一个Agent

1.前言

大家好,欢迎大家来到OpenClaw代码讲解第一课。本次讲解代码参照https://github.com/shareAI-lab/claw0.git这个代码库。今天我们学习的是OpenClaw智能体最核心,最基础的部分,揭示了AI Agent运行的底层逻辑。

AI Agent的核心

在OpenClaw中,最核心的莫过于一个无限等待输入的循环,在这个循环中,包含了四个关键的步骤,分别是:

  1. 用户输入
  2. 将输入保存到历史对话中
  3. 调用LLM 获取回复
  4. 将LLM的回复存储在历史记录中

接下来我们将对代码进行解析,我们可以知道这个过程是怎么样的。

代码解析

whileTrue:# 1.--- 获取用户输入 ---try:user_input=input(colored_prompt()).strip()except(KeyboardInterrupt,EOFError):print(f"\n{DIM}再见.{RESET}")breakifnotuser_input:continueifuser_input.lower()in("quit","exit"):print(f"{DIM}再见.{RESET}")break# 2.把人类的消息追加到messages中 ---messages.append({"role":"user","content":user_input,})# --- 调用 LLM ---try:# 构建 LangChain 消息格式langchain_messages=[]# 添加系统消息ifSYSTEM_PROMPT:langchain_messages.append(SystemMessage(content=SYSTEM_PROMPT))# 转换历史消息formsginmessages:role=msg["role"]content=msg.get("content","")ifrole=="user":langchain_messages.append(HumanMessage(content=content))elifrole=="assistant":langchain_messages.append(AIMessage(content=content))# # 添加当前用户输入# langchain_messages.append(HumanMessage(content=user_input))# 3. 调用LLM 模型response=client.invoke(langchain_messages)# 提取响应文本assistant_text=""ifhasattr(response,'content'):assistant_text=response.contentelse:assistant_text=str(response)# 打印助手回复print_assistant(assistant_text)# 将LLM的消息添加到消息历史messages.append({"role":"assistant","content":assistant_text,})
http://www.cnnetsun.cn/news/2611876.html

相关文章:

  • 知识图谱:为AI助手构建关系型上下文,解决复杂决策难题
  • 超越first-fit:从ucore Lab 2出发,聊聊伙伴系统(Buddy System)与SLUB分配器的设计与实现思路
  • 从Pure-FTPd配置项入手,打造一个安全又高效的内部文件共享服务器
  • 避坑指南:在华为云CCE上手动部署Nacos集群,我踩过的那些‘服务发现’的坑
  • 在PyTorch中给ASPP模块加上SENet注意力,提升语义分割模型性能(附完整代码)
  • abulaBili-Plus
  • AI搜索工具深度横评:Perplexity、SearchGPT与Claude 3.5 Sonnet对比
  • CLI+AI社交训练场:在终端中提升开发者沟通软技能
  • 用STM32CubeMX和HAL库搞定Odrive的CAN通信:从波特率设置到控制函数编写(避坑指南)
  • DolphinDB:重新定义工业物联网的时序数据底座
  • 两小时用原生JS+Canvas打造复古打砖块游戏:从零到一的心流编程体验
  • 基于RAG与向量数据库的语义代码搜索引擎构建指南
  • 基于MCP协议构建可观测AI工具服务:从LangChain智能体到微服务架构演进
  • FactoryIO虚拟工厂避坑指南:智能仓储项目里,气叉定位不准和坐标转换的那些事儿
  • ULINK调试适配器跨平台限制与替代方案解析
  • 告别Selenium配置噩梦:用Katalon Studio 8.0+快速搞定Web/App/API自动化测试
  • Mac Mouse Fix:3个步骤让你的普通鼠标在macOS上超越苹果触控板体验
  • AI规模化应用最后一公里:变革管理与价值交付实战指南
  • UniApp地图实战:手把手教你搞定用户位置授权、跳转导航与距离计算(附完整Demo)
  • 浏览器漫画翻译扩展开发:基于OCR与实时渲染的无感阅读方案
  • 大模型成本优化实战:混合策略降低42% Token消耗
  • Stresser与DDoS攻击:地下产业链的技术原理与防御实践
  • 机器人运动控制中的观察空间与动作空间设计
  • 别再只用BERT做语义匹配了!手把手教你用SimCSE无监督对比学习提升中文句子向量质量
  • STM32CubeMX外部中断配置避坑指南:从引脚模式到回调函数,新手常犯的5个错误
  • 脉冲神经网络与神经形态计算的原理及应用
  • 无线传感器网络协作波束成形:旁瓣控制与分布式功率分配技术详解
  • 告别‘恢复出厂设置’:Android Rescue Mode源码级调试与自定义救援策略
  • 告别手动编译:在VSCode里一键运行和调试你的Makefile C/C++项目
  • 量子退火求解双目标旅行小偷问题:ε约束法与QUBO建模实践