前言
最近参加了一个人工智能产业峰会,听到一个很有趣的观点:以前我们写代码是告诉计算机”怎么做”,而现在我们要学会告诉AI”做什么”。这种转变让我意识到,传统的编程思维需要升级了——得学会和AI协作,得了解智能体(Agent)是怎么工作的。
正好中国人工智能产业发展联盟(AIIA)最近发布了《OpenClaw类智能体部署风险管理指南》,这标志着智能体应用生态正在迎来爆发式增长。今天这篇文章,就是想用最接地气的方式,带大家入门智能体开发。
我会从一个最简单的例子开始,手把手教你用OpenClaw框架构建一个能完成特定任务的小智能体。不整那些虚的,咱们直接上代码。

什么是智能体?
在说具体实现之前,先聊聊什么是智能体。很多教程一上来就讲概念,我换个说法:你用过智能客服吗?你让ChatGPT帮你查资料、订行程吗?这些背后工作的就是智能体。
简单理解,智能体就是一个能感知环境、做出决策、执行动作的程序。它和普通程序的区别在于,普通程序是写死的逻辑,而智能体能根据情况自主决定下一步该做什么。
打个比方:传统程序像是按剧本演戏,台词都写好了;智能体则是给AI一个角色定位和目标,让它自己决定怎么演。
OpenClaw框架简介
OpenClaw是一个开源的智能体开发框架,定位是让开发者能快速构建、部署和管理AI智能体。它的核心设计理念是模块化和可观测性。
模块化体现在:框架把智能体的各个功能拆分成独立组件,包括规划组件、工具组件、记忆组件等。你可以像搭积木一样组合它们。
可观测性则是企业级应用必需的:框架内置了完整的日志、追踪和监控功能,方便排查问题和优化性能。
安装OpenClaw很简单:
bash
# 创建虚拟环境
python -m venv agent_env
source agent_env/bin/activate # Windows下用 agent_env\Scripts\activate
# 安装OpenClaw核心包
pip install openclaw-core
# 安装可选的扩展包(后续会用到)
pip install openclaw-tools openclaw-memory openclaw-planning
构建第一个智能体:任务规划助手
说了这么多,不如直接动手。我计划构建一个任务规划助手,功能很简单:接收用户的一个模糊需求,然后拆解成具体的执行步骤。
第一步:定义智能体的角色
python
# task_planner_agent.py
from openclaw_core import Agent, SystemPrompt
from openclaw_planning import ChainOfThoughtPlanner
from openclaw_memory import ConversationMemory
# 定义系统提示词 - 这就是给智能体的"角色设定"
planner_prompt = SystemPrompt(
role="资深产品经理",
description="你擅长将模糊的用户需求转化为清晰、可执行的任务清单。你会考虑任务的优先级、依赖关系和时间估计。",
rules=[
"优先识别用户的核心目标",
"任务拆解要具体可执行,避免模糊描述",
"标注每个任务的大致时间",
"识别任务间的依赖关系",
"提供优先级建议"
]
)
这段代码定义了一个”资深产品经理”的角色。你会发现,定义角色其实就是给它一个定位和规则,让AI知道该怎么思考问题。
第二步:配置规划组件
python
# 配置规划器 - 决定智能体怎么思考和规划
planner = ChainOfThoughtPlanner(
model="gpt-4", # 可以换成本地模型
temperature=0.7, # 控制创造性,越高越有创意
max_steps=10, # 最大思考步数,避免无限循环
enablereflection=True # 开启自我反思
)
ChainOfThoughtPlanner的意思是”链式思考规划器”。它会引导AI一步步推理,而不是直接给答案。这对于复杂任务特别有效。
第三步:组装智能体
python
# 创建记忆组件 - 让智能体能记住对话历史
memory = ConversationMemory(
max_history=20, # 保留最近20轮对话
summary_mode=True # 开启摘要模式,省token
)
# 组装完整的智能体
task_planner = Agent(
name="任务规划助手",
system_prompt=planner_prompt,
planner=planner,
memory=memory,
# 这里是重点:给智能体配备工具
tools=[
"calculator", # 计算工具
"text_processor" # 文本处理工具
]
)
第四步:测试运行
python
# 运行测试
def test_task_planner():
# 测试用例:用户给了一个模糊的需求
user_request = "我想做一个小红书账号,主要分享程序员日常"
# 触发智能体
response = task_planner.run(user_request)
print("=" * 50)
print("用户需求:", user_request)
print("=" * 50)
print("\nAI规划结果:")
print(response.content)
# 打印规划过程(用于学习理解)
if hasattr(response, 'reasoning_trace'):
print("\n--- 思考过程 ---")
for i, step in enumerate(response.reasoning_trace):
print(f"步骤{i+1}: {step}")
if __name__ == "__main__":
test_task_planner()
运行后,你会看到智能体把”做一个程序员小红书账号”这个模糊需求,拆解成具体的步骤:账号定位、内容规划、头像简介、第一批内容制作、数据复盘等。
深入理解:智能体的核心机制
光会用还不够,咱们得理解背后的逻辑。这样遇到问题时才知道怎么调整。
规划组件的工作原理
规划组件是智能体的”大脑”。以ChainOfThoughtPlanner为例,它的工作流程是这样的:
plaintext
用户输入 → 问题分解 → 逐个分析 → 整合方案 → 自我验证
第一步是接收用户输入,然后对问题进行拆解。接着逐个分析每个子问题,看看怎么解决。之后把所有分析整合成完整的方案。最后一步很关键:自我验证,检查方案是否真的能解决问题。
python
# 规划组件的简化伪代码
class ChainOfThoughtPlanner:
def plan(self, task):
# 1. 理解任务
subtasks = self.decompose(task)
# 2. 逐个思考
solutions = []
for sub in subtasks:
solution = self.think_about(sub)
solutions.append(solution)
# 3. 整合方案
final_plan = self.synthesize(solutions)
# 4. 反思验证
if not self.validate(final_plan):
# 如果不通过,重新规划
return self.plan(task)
return final_plan
理解了这一点,你就知道为什么有时候智能体会”想太多”——因为它的规划组件在反复验证。所以配置max_steps参数很重要,防止它陷入死循环。
记忆组件的作用
记忆组件让智能体能记住之前的对话。这对于连续性任务特别重要。
python
# 记忆组件的工作方式
class ConversationMemory:
def __init__(self, max_history, summary_mode=False):
self.history = [] # 原始对话记录
self.summary = "" # 摘要(节省token)
self.max_history = max_history
self.summary_mode = summary_mode
def add(self, user_msg, ai_msg):
self.history.append({
"user": user_msg,
"ai": ai_msg,
"timestamp": datetime.now()
})
# 如果超过上限,进行摘要压缩
if len(self.history) > self.max_history:
self.compress()
def compress(self):
"""压缩历史记录,保留关键信息"""
# 保留最近的几条完整记录
recent = self.history[-5:]
# 对更早的记录生成摘要
old_summary = self.summarize(self.history[:-5])
self.history = recent + [{"summary": old_summary}]
工具组件的扩展
OpenClaw的强大之处在于可以灵活扩展工具。下面演示如何给智能体添加自定义工具:
python
from openclaw_core import tool
# 用装饰器定义一个工具
@tool(name="code_formatter", description="格式化代码,支持多种语言")
def format_code(code: str, language: str = "python") -> str:
"""
格式化代码的函数
参数:
code: 需要格式化的代码字符串
language: 代码语言,默认python
返回:
格式化后的代码字符串
"""
# 这里可以接入Black、Prettier等格式化工具
import autopep8
if language == "python":
return autopep8.fix_code(code)
elif language == "javascript":
return prettier.format(code)
else:
return code
# 注册工具
task_planner.register_tool(format_code)
现在这个工具可以在对话中被调用了。用户说”帮我把这段代码格式化一下”,智能体就会知道该调用format_code工具。
进阶:从单智能体到多智能体协作
单个智能体的能力有限,复杂任务往往需要多个智能体协作。OpenClaw支持多智能体模式。
python
from openclaw_core import MultiAgentSystem, AgentPool
# 创建智能体池
agent_pool = AgentPool()
# 添加不同角色的智能体
researcher = Agent(name="调研员", role="负责信息收集和分析")
writer = Agent(name="内容创作", role="负责文案撰写")
designer = Agent(name="视觉设计", role="负责配图和排版")
reviewer = Agent(name="审核员", role="负责内容质量和合规审核")
# 注册到池中
agent_pool.register("researcher", researcher)
agent_pool.register("writer", writer)
agent_pool.register("designer", designer)
agent_pool.register("reviewer", reviewer)
# 创建多智能体协作系统
content_team = MultiAgentSystem(
name="内容创作团队",
pool=agent_pool,
workflow=[
("researcher", "收集目标读者群体的特征和偏好"),
("writer", "根据调研结果创作初稿"),
("designer", "为内容配上合适的图片"),
("reviewer", "审核内容的准确性和合规性")
],
# 设置如何传递信息
output_schema={
"researcher": "调研报告",
"writer": "文章初稿",
"designer": "配图素材",
"reviewer": "审核意见"
}
)
# 启动协作
result = content_team.run(
goal="创作一篇适合程序员阅读的Rust语言入门文章"
)
这个多智能体系统模拟了一个真实的内容团队工作流程。每个智能体负责自己的环节,然后结果传递给下一个环节。
安全部署:企业级应用必读
AIIA发布的《OpenClaw类智能体部署风险管理指南》特别强调了安全问题。如果你打算在生产环境部署智能体,以下几点必须注意:
权限控制
python
from openclaw_core import Permission, PermissionLevel
# 定义权限级别
permissions = [
Permission(
name="internet_access",
level=PermissionLevel.READ_ONLY,
description="只允许读取互联网信息,禁止发帖或发送消息"
),
Permission(
name="file_system",
level=PermissionLevel.RESTRICTED,
allowed_paths=["/data/project/uploads/"],
description="只能访问指定目录"
),
Permission(
name="code_execution",
level=PermissionLevel.DISABLED,
description="禁止执行任何代码"
)
]
# 应用权限配置
agent.apply_permissions(permissions)
输入验证
用户输入是不可信的,必须进行严格验证:
python
import re
from typing import List
def validate_user_input(text: str) -> tuple[bool, str]:
"""验证用户输入的安全性"""
# 检查长度
if len(text) > 10000:
return False, "输入内容过长,请精简"
# 检查是否包含恶意指令
dangerous_patterns = [
r"ignore\s+previous\s+instructions", # 提示注入
r"system\s*:\s*", # 尝试覆盖系统指令
r"你现在是", # 中文提示注入
r"你现在扮演",
]
for pattern in dangerous_patterns:
if re.search(pattern, text, re.IGNORECASE):
return False, "检测到可疑内容,请重新输入"
return True, "验证通过"
# 在处理用户输入前调用
def handle_message(agent, user_message):
is_valid, msg = validate_user_input(user_message)
if not is_valid:
return {"error": msg}
return agent.process(user_message)
审计日志
生产环境必须开启完整的日志记录:
python
import logging
from datetime import datetime
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
class AuditLogger:
def __init__(self, log_file="audit.log"):
self.logger = logging.getLogger("audit")
handler = logging.FileHandler(log_file)
self.logger.addHandler(handler)
def log_interaction(self, agent_id, user_id, input_text, output_text, metadata=None):
"""记录每次交互"""
self.logger.info({
"timestamp": datetime.now().isoformat(),
"agent_id": agent_id,
"user_id": user_id,
"input_length": len(input_text),
"output_length": len(output_text),
"metadata": metadata or {}
})
# 全局审计日志
audit = AuditLogger()
实战项目:构建一个GitHub热门项目追踪助手
最后给一个完整的实战项目,巩固今天学到的知识。这个项目会综合运用规划、记忆、工具等组件。
python
"""
GitHub热门项目追踪助手
功能:定期追踪特定领域(如AI、Python)的GitHub热门项目,
自动生成中文简报,帮助开发者发现值得关注的开源项目
"""
from openclaw_core import Agent, SystemPrompt
from openclaw_planning import ChainOfThoughtPlanner
from openclaw_memory import VectorMemory
import requests
import json
from datetime import datetime
# 1. 配置GitHub API工具
class GitHubTools:
def __init__(self, token=None):
self.headers = {
"Accept": "application/vnd.github.v3+json"
}
if token:
self.headers["Authorization"] = f"token {token}"
def search_repositories(self, query, sort="stars", per_page=5):
"""搜索GitHub仓库"""
url = "https://api.github.com/search/repositories"
params = {
"q": query,
"sort": sort,
"per_page": per_page
}
response = requests.get(url, headers=self.headers, params=params)
return response.json()
def get_trending(self, language="python", since="daily"):
"""获取热门项目(需要配合第三方API)"""
# 这里简化处理,实际可以用 github-trending-api
return self.search_repositories(
query=f"language:{language} created:>{datetime.now().strftime('%Y-%m-%d')}",
sort="stars"
)
# 2. 定义智能体
github_prompt = SystemPrompt(
role="技术编辑",
description="你是一个资深技术编辑,专门从GitHub项目中筛选有价值的开源项目,用简洁有趣的语言写成简报。",
rules=[
"每期简报包含3-5个推荐项目",
"每个项目说明:项目名、简介、适合谁、为什么值得关注",
"用口语化的方式介绍,避免过于技术化",
"提供项目的直接链接"
]
)
# 3. 创建带工具的智能体
github_helper = GitHubTools() # 可选:传入GitHub Token增加API限制
# 4. 构建追踪助手
trending_agent = Agent(
name="GitHub追踪助手",
system_prompt=github_prompt,
planner=ChainOfThoughtPlanner(model="gpt-4"),
memory=VectorMemory(), # 向量记忆,方便后续检索
tools=[github_helper]
)
# 5. 执行追踪任务
def generate_weekly_report(topic="AI"):
"""
生成周报
参数:
topic: 追踪的主题,如 'AI', 'Python', 'JavaScript'
"""
# 搜索热门项目
repos = github_helper.search_repositories(
query=f"{topic} language:python stars:>100 created:>2025-01-01",
sort="stars",
per_page=10
)
# 构建查询上下文
context = f"请根据以下GitHub项目生成{topic}领域的周报:\n"
for repo in repos.get("items", [])[:5]:
context += f"""
- 项目名:{repo['name']}
- 描述:{repo['description'] or '暂无描述'}
- Stars:{repo['stargazers_count']}
- 主要语言:{repo['language']}
- 链接:{repo['html_url']}
"""
# 让AI生成简报
report = trending_agent.run(context)
return report.content
# 运行示例
if __name__ == "__main__":
# 追踪Python和AI相关项目
report = generate_weekly_report("Python AI")
print("=" * 60)
print(f"GitHub 周报 - {datetime.now().strftime('%Y年%m月%d日')}")
print("=" * 60)
print(report)
# 保存报告
with open(f"github_weekly_{datetime.now().strftime('%Y%m%d')}.md", "w") as f:
f.write(report)
总结
今天这篇文章带你入门了OpenClaw智能体框架,从基本概念到实战项目。回顾一下重点:
- 智能体是什么:能感知环境、自主决策、执行动作的程序
- OpenClaw核心组件:规划组件(大脑)、记忆组件(存储)、工具组件(能力)
- 如何构建智能体:定义角色 → 配置规划器 → 组装 → 测试
- 多智能体协作:多个专业智能体配合完成复杂任务
- 安全部署:权限控制、输入验证、审计日志缺一不可
智能体开发是一个很大的话题,一篇文章肯定讲不完。我的建议是先从这个简单的例子入手,跑通整个流程,然后根据自己的需求逐步扩展。
技术发展很快,但核心逻辑不会变太多。学会和AI协作,学会构建AI工具,应该会成为未来程序员的标配能力。希望这篇文章能帮你迈出第一步。

发表回复