首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >OpenClaw Agent 从0到1打造你的数字AI员工

OpenClaw Agent 从0到1打造你的数字AI员工

原创
作者头像
用户12658083
发布2026-08-01 11:19:09
发布2026-08-01 11:19:09
1300
举报

OpenClaw Agent 从0到1打造你的数字AI员工

手把手教你构建一个能自主思考、调用工具、执行任务的智能代理,让你的工作效率提升10倍

1. 为什么你需要一个数字AI员工?

在信息爆炸的时代,重复性工作占据了我们大量时间——邮件分类、数据整理、信息检索、报表生成……这些任务虽然重要,却耗费创意精力。OpenClaw Agent 是一个基于大语言模型(LLM)的智能代理框架,它能够理解自然语言指令,自主规划任务步骤,并调用外部工具(如搜索引擎、计算器、数据库、API等)完成复杂操作,就像一个24小时在线的数字员工。

本文将带你从零开始,构建一个完整的OpenClaw Agent,并最终部署到腾讯云上,实现云端自动化服务。

你将学到

  • 智能代理的核心架构与运行原理
  • 如何用Python + LangChain构建工具型代理
  • 如何定义自定义工具(搜索、文件、API调用)
  • 如何实现多步推理与错误重试
  • 如何将代理封装为Web服务,部署到腾讯云轻量应用服务器

2. 技术栈概览

组件

选型

说明

语言

Python 3.10+

生态丰富,AI支持好

LLM

OpenAI GPT-4 / 腾讯混元

推荐使用腾讯混元大模型(国内合规)

框架

LangChain

提供Agent、Tool、Memory等抽象

工具库

Requests, BeautifulSoup, PyPDF2, etc.

具体工具依赖

Web框架

FastAPI

高性能,自动生成API文档

部署

腾讯云轻量应用服务器

简单易用,成本低

注意:若使用OpenAI API需外网访问,建议优先使用腾讯混元大模型(通过腾讯云API),本文示例将兼容OpenAI格式,你可自由切换。


3. 环境搭建与项目初始化

3.1 创建项目目录

代码语言:javascript
复制
mkdir openclaw-agent
cd openclaw-agent
python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

3.2 安装依赖包

创建 requirements.txt

代码语言:javascript
复制
langchain>=0.1.0
langchain-openai>=0.0.5
openai>=1.0.0
requests>=2.31.0
beautifulsoup4>=4.12.0
lxml>=4.9.0
fastapi>=0.104.0
uvicorn>=0.24.0
python-dotenv>=1.0.0
pypdf2>=3.0.0

安装:

代码语言:javascript
复制
pip install -r requirements.txt

3.3 配置环境变量

创建 .env 文件:

代码语言:javascript
复制
# 使用腾讯混元(推荐)
OPENAI_API_BASE=https://api.hunyuan.cloud.tencent.com/v1
OPENAI_API_KEY=your-hunyuan-api-key
OPENAI_API_MODEL=hunyuan-lite

# 或使用 OpenAI
# OPENAI_API_KEY=sk-xxx
# OPENAI_API_MODEL=gpt-4o-mini

4. OpenClaw Agent 核心设计

4.1 架构图

代码语言:javascript
复制
用户指令 → Agent(规划器) → 思考(ReAct) → 调用工具 → 观察结果 → 最终答案
                ↑                                        │
                └──────── 记忆(Memory) ←───────────────┘
  • 规划器:基于LLM,将复杂任务分解为子任务。
  • 工具集:一系列可调用的函数,如网络搜索、文件读写、计算等。
  • 执行器:实际运行工具,并处理异常。
  • 记忆:存储历史对话和中间结果,支持上下文理解。

4.2 定义工具(Tool)

我们将实现以下内置工具:

  • search_web:使用DuckDuckGo或自定义搜索API
  • calculator:执行数学表达式
  • read_file / write_file:本地文件操作
  • get_current_time:获取时间
  • call_rest_api:调用任意HTTP接口

5. 代码实现

5.1 工具函数定义 (tools.py)

代码语言:javascript
复制
import requests
import json
import datetime
from bs4 import BeautifulSoup
from typing import Optional

def get_current_time() -> str:
    """返回当前日期和时间"""
    return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

def calculator(expression: str) -> str:
    """安全计算数学表达式"""
    try:
        # 只允许数字和运算符
        allowed = set("0123456789+-*/().% ")
        if not all(c in allowed for c in expression):
            return "错误:表达式包含非法字符"
        result = eval(expression)
        return f"计算结果:{result}"
    except Exception as e:
        return f"计算错误:{str(e)}"

def search_web(query: str, max_results: int = 3) -> str:
    """
    使用DuckDuckGo Lite进行简单搜索(无需API密钥)
    实际生产建议使用SerpAPI或腾讯云搜索
    """
    try:
        url = f"https://lite.duckduckgo.com/lite/?q={query}"
        headers = {"User-Agent": "Mozilla/5.0"}
        resp = requests.get(url, headers=headers, timeout=10)
        soup = BeautifulSoup(resp.text, "html.parser")
        results = []
        for item in soup.select(".result")[:max_results]:
            title = item.select_one(".result__title")
            link = item.select_one(".result__url")
            snippet = item.select_one(".result__snippet")
            if title and link:
                results.append({
                    "title": title.get_text(strip=True),
                    "link": link.get_text(strip=True),
                    "snippet": snippet.get_text(strip=True) if snippet else ""
                })
        if not results:
            return "未找到相关结果"
        return json.dumps(results, ensure_ascii=False, indent=2)
    except Exception as e:
        return f"搜索失败:{str(e)}"

def read_file(filepath: str) -> str:
    """读取文本文件内容"""
    try:
        with open(filepath, "r", encoding="utf-8") as f:
            return f.read()[:2000]  # 限制长度
    except FileNotFoundError:
        return f"文件 {filepath} 不存在"
    except Exception as e:
        return f"读取错误:{str(e)}"

def write_file(filepath: str, content: str) -> str:
    """将内容写入文件"""
    try:
        with open(filepath, "w", encoding="utf-8") as f:
            f.write(content)
        return f"成功写入 {filepath}"
    except Exception as e:
        return f"写入错误:{str(e)}"

def call_rest_api(url: str, method: str = "GET", payload: Optional[dict] = None) -> str:
    """调用任意REST API"""
    try:
        method = method.upper()
        if method == "GET":
            resp = requests.get(url, timeout=10)
        elif method == "POST":
            resp = requests.post(url, json=payload, timeout=10)
        else:
            return "不支持的HTTP方法"
        resp.raise_for_status()
        return resp.text[:1000]  # 截断
    except Exception as e:
        return f"API调用失败:{str(e)}"

5.2 LangChain 代理封装 (agent.py)

我们将使用LangChain的 create_react_agentAgentExecutor,结合上述工具。

代码语言:javascript
复制
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import Tool
from langchain.prompts import PromptTemplate
from langchain.memory import ConversationBufferMemory
from tools import (
    get_current_time, calculator, search_web,
    read_file, write_file, call_rest_api
)

load_dotenv()

# 初始化LLM(支持腾讯混元/OpenAI)
llm = ChatOpenAI(
    base_url=os.getenv("OPENAI_API_BASE"),
    api_key=os.getenv("OPENAI_API_KEY"),
    model=os.getenv("OPENAI_API_MODEL", "gpt-4o-mini"),
    temperature=0.2,
)

# 定义工具列表
tools = [
    Tool(name="当前时间", func=get_current_time, description="获取当前日期时间,无需参数"),
    Tool(name="计算器", func=calculator, description="计算数学表达式,如 '2+3*4'"),
    Tool(name="网络搜索", func=search_web, description="搜索互联网信息,输入关键词"),
    Tool(name="读取文件", func=read_file, description="读取本地文件内容,输入文件路径"),
    Tool(name="写入文件", func=write_file, description="写入内容到本地文件,输入格式 '文件路径|内容'"),
    Tool(name="调用API", func=call_rest_api, description="调用HTTP API,输入格式 'URL|方法|JSON参数(可选)'"),
]

# 自定义提示模板(中文,让代理更符合使用习惯)
template = """你是一个名为OpenClaw的智能助理,能够使用工具完成用户任务。
你有以下工具可用:

{tools}

工具名称: {tool_names}

请使用以下格式回答:

Question: 用户的问题
Thought: 思考下一步该做什么
Action: 要使用的工具名称,必须为 {tool_names} 之一
Action Input: 工具的输入参数
Observation: 工具返回的结果
... (这个 Thought/Action/Action Input/Observation 可以重复多次)
Thought: 我现在知道最终答案了
Final Answer: 对用户问题的最终回答

开始!

Question: {input}
Thought: {agent_scratchpad}
"""

prompt = PromptTemplate.from_template(template)

# 构建代理
agent = create_react_agent(llm, tools, prompt)

# 添加记忆(对话缓存)
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)

# 代理执行器
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    memory=memory,
    verbose=True,          # 打印思考过程
    max_iterations=10,     # 防止死循环
    handle_parsing_errors=True,
)

def run_agent(query: str) -> str:
    """同步运行代理"""
    result = agent_executor.invoke({"input": query})
    return result["output"]

5.3 测试代理

创建 test.py

代码语言:javascript
复制
from agent import run_agent

if __name__ == "__main__":
    questions = [
        "现在几点了?",
        "计算 1234 * 5678",
        "搜索一下腾讯云的最新动态",
        "把'Hello OpenClaw'写入到 test.txt 文件",
        "读取 test.txt 文件内容"
    ]
    for q in questions:
        print(f"\n>>> 用户: {q}")
        answer = run_agent(q)
        print(f"<<< OpenClaw: {answer}")

运行测试:python test.py,观察代理的思考链和工具调用。


6. 封装为 Web API(FastAPI)

为了方便远程调用,我们构建一个HTTP服务。

创建 main.py

代码语言:javascript
复制
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from agent import run_agent
import uvicorn

app = FastAPI(title="OpenClaw Agent API", version="1.0")

class QueryRequest(BaseModel):
    query: str

class QueryResponse(BaseModel):
    answer: str
    status: str = "success"

@app.post("/ask", response_model=QueryResponse)
async def ask(request: QueryRequest):
    try:
        result = run_agent(request.query)
        return QueryResponse(answer=result)
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@app.get("/health")
async def health():
    return {"status": "ok"}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

启动服务:python main.py

测试API:

代码语言:javascript
复制
curl -X POST "http://localhost:8000/ask" \
  -H "Content-Type: application/json" \
  -d '{"query": "搜索腾讯云AI产品"}'

7. 部署到腾讯云

7.1 选择部署方案

  • 轻量应用服务器:适合中小型项目,配置简单,有固定公网IP。
  • 云函数(SCF):无服务器,按调用计费,但冷启动可能影响体验。
  • 容器服务(TKE):适合大规模生产。

本文以轻量应用服务器(Ubuntu 20.04)为例。

7.2 部署步骤

  1. 购买轻量服务器(最低2核2GB即可),绑定公网IP,开放8000端口安全组。
  2. SSH登录服务器,安装Python 3.10及pip:

代码语言:javascript
复制
sudo apt update
sudo apt install python3-pip python3-venv -y
  1. 上传代码(可通过git或scp):
代码语言:javascript
复制
scp -r ./openclaw-agent root@你的IP:/opt/
  1. 安装依赖

代码语言:javascript
复制
cd /opt/openclaw-agent
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
  1. 配置环境变量:将 .env 文件放入目录。
  2. 使用systemd管理服务,创建 /etc/systemd/system/openclaw.service

代码语言:javascript
复制
[Unit]
Description=OpenClaw Agent Service
After=network.target

[Service]
User=root
WorkingDirectory=/opt/openclaw-agent
ExecStart=/opt/openclaw-agent/venv/bin/python main.py
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
  1. 启动服务

代码语言:javascript
复制
systemctl daemon-reload
systemctl enable openclaw
systemctl start openclaw
systemctl status openclaw
  1. 测试公网访问

代码语言:javascript
复制
curl http://你的IP:8000/health

现在你就拥有了一个云端AI员工API,可集成到任何业务系统。


8. 进阶优化

8.1 增加更多工具

  • 数据库查询(MySQL/PostgreSQL)
  • 发送邮件/短信
  • 生成图表(matplotlib)
  • 调用腾讯云API(如OCR、翻译)

8.2 提升鲁棒性

  • 使用 retry 装饰器处理工具调用失败
  • 增加工具调用超时控制
  • 添加用户身份验证(API Key)

8.3 切换为国产大模型

腾讯混元大模型支持OpenAI兼容接口,只需修改 OPENAI_API_BASEAPI_KEY。也可使用 langchain_community.llms.Hunyuan 原生集成。

8.4 流式响应

FastAPI支持 StreamingResponse,可让代理边思考边输出,提升用户体验。


9. 结语

通过本文,你从零构建了一个功能完整的数字AI员工——OpenClaw Agent。它能够理解自然语言,自主调用多种工具完成实际任务,并且通过API对外开放。只需短短几百行代码,你就拥有了一位不知疲倦的智能助手。

未来,你可以为它添加更多行业专属工具(如财务分析、代码生成、客户服务),让它真正成为你团队中的得力干员。腾讯云提供了稳定、安全的基础设施,是托管此类AI服务的理想选择。

立即行动:将你的OpenClaw Agent部署到腾讯云,让AI为你工作吧!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • OpenClaw Agent 从0到1打造你的数字AI员工
    • 1. 为什么你需要一个数字AI员工?
      • 你将学到
    • 2. 技术栈概览
    • 3. 环境搭建与项目初始化
      • 3.1 创建项目目录
      • 3.2 安装依赖包
      • 3.3 配置环境变量
    • 4. OpenClaw Agent 核心设计
      • 4.1 架构图
      • 4.2 定义工具(Tool)
    • 5. 代码实现
      • 5.1 工具函数定义 (tools.py)
      • 5.2 LangChain 代理封装 (agent.py)
      • 5.3 测试代理
    • 6. 封装为 Web API(FastAPI)
    • 7. 部署到腾讯云
      • 7.1 选择部署方案
      • 7.2 部署步骤
    • 8. 进阶优化
      • 8.1 增加更多工具
      • 8.2 提升鲁棒性
      • 8.3 切换为国产大模型
      • 8.4 流式响应
    • 9. 结语
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档