10分钟教你手撸一个小龙虾(OpenClaw)

本文最后更新于:2026年3月18日 晚上

前言

OpenClaw,江湖人称“小龙虾”,想必你早有耳闻。有人把它捧上天,说它无所不能;有人把它踩到底,说它一无是处。有人花 499 请人上门安装,有人又掏 299 请人卸载。你说它是智商税?它又像是未来的敲门砖。

但我想告诉你,这些评价都不算数。想知道它到底能干啥,得先搞明白它怎么干。今天,咱们不吹不黑,亲手撸一只小龙虾(OpenClaw),一步步揭开它的神秘面纱。

从最简单的对话开始

让我们回到那个最初的起点,大语言模型。没错,就是这个只会一问一答的“小玩具”。相信你一定用过网页版的AI聊天工具,但如果你想在程序里调用它,就得用另一种方式:API接口。

别怕代码,大部分时候你只需要把官方给的示例贴进去,就能跑起来。

1
2
3
4
5
6
7
8
9
10
11
12
13
import os

from openai import OpenAI

client = OpenAI(
api_key=os.getenv("BAILIAN_API_KEY"),
base_url="https://dashscope.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1",
)

response = client.responses.create(model="qwen3.5-plus", input="你是谁?")

print(response.output_text)
# 你好!我是通义千问(Qwen),是阿里巴巴集团旗下的通义实验室自主研发的超大规模语言模型。我可以协助你回答问题、创作内容、编写代码、分析文档等。有什么我可以帮你的吗?

恭喜你,你已经成功通过代码来和大模型对话了。

但是这里是写死的 你是谁? ,能不能改成由用户手动输入呢?

image

很简单,增加一行代码就行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import os

from openai import OpenAI

client = OpenAI(
api_key=os.getenv("BAILIAN_API_KEY"),
base_url="https://dashscope.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1",
)

# 从用户输入获取问题
user_input = input("请输入你的问题:")

response = client.responses.create(model="qwen3.5-plus", input=user_input)

print(response.output_text)

image

从终端获取用户输入,存到变量 user_input 中,再传给大模型。这样就实现了自定义输入问题,大模型回答。

image

当然了,这样还不够。相信你也看到了,一次对话,程序就终止了。我们需要给程序加一个循环,回答完成后,继续等待我们的提问。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import os

from openai import OpenAI

client = OpenAI(
api_key=os.getenv("BAILIAN_API_KEY"),
base_url="https://dashscope.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1",
)

while True:
# 从用户输入获取问题
user_input = input("请输入你的问题:")

response = client.responses.create(model="qwen3.5-plus", input=user_input)

print(response.output_text)

image

这样我们就能与大模型进行持续的对话了。

image

那假如此时我们再来一个追问:再加1等于几呢?

image

照理来说,大模型应该回答:3。但是呢,它好像并不记得我刚刚问了什么。

那为什么会这样呢?很简单,因为大模型是一个无状态的模型。每次对话,它都是独立运行的,不会记住之前的任何信息。

要解决这个问题也很简单,在每次跟大模型对话的时候把之前的内容加上去就好了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import os

from openai import OpenAI

client = OpenAI(
api_key=os.getenv("BAILIAN_API_KEY"),
base_url="https://dashscope.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1",
)

messages = []

# 持续对话
while True:
user_input = input("请输入你的问题:")

# 添加用户消息到对话历史
messages.append({"role": "user", "content": user_input})

# 调用API,传入对话历史
response = client.responses.create(
model="qwen3.5-plus",
input=messages,
)

# 提取助手回复
assistant_response = response.output_text

# 添加助手回复到对话历史
messages.append({"role": "assistant", "content": assistant_response})

print(assistant_response)

image

那运行一下试试看。

image

没问题,大模型现在会记住之前的对话了。现在我们写的AI程序已经跟刚发布的ChatGPT没啥区别了。

从对话到行动:让AI帮你干活

接下来,我们更进一步,实现一个能操作本地文件的Agent。

哎呀呀,一提到Agent,是不是觉得难度一下就上去了。别担心,我会用最基本的代码实现一个Agent,教你看透本质。

Agent的本质就是大模型+工具。所谓工具就是能帮我们干事。

那好,我现在就有一个需求,让Agent帮我在本地电脑创建一个hello.txt的文件,内容是:潘高陪你学编程。

image

我们能看到大模型回复的是教我们创建文件的命令 echo "潘高陪你学编程" > hello.txt 。虽然照大模型说的执行这个命令就可以完成任务,但是还需要我们粘贴复制,没有办法自动化实现。那这该怎么办呢?

很简单,我们只需要提前告诉大模型,如果需要用到命令,就回复 命令:… 。然后再用程序执行命令,最后把执行命令的返回信息给大模型,让大模型判断是否结束任务。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import os
import subprocess

from openai import OpenAI

SYSTEM_PROMPT = """你是一个可以驱动本机命令行的助手。

规则:
1) 当你需要程序执行命令时,你必须且只能回复一行:命令:<要执行的命令>
- “命令:”后面的内容就是命令本体,不要输出任何额外解释、前后缀、Markdown、代码块或多行文本。
2) 当你不需要再执行命令时,请用自然语言给出最终结论/答复(这时不要以“命令:”开头)。
3) 程序会把命令的执行结果(stdout/stderr/退出码/当前目录)回传给你;你据此决定继续发命令还是结束。
"""


def _extract_command(text):
if not text:
return None
for line in text.splitlines():
s = line.strip()
if s.startswith("命令:"):
cmd = s[len("命令:") :].strip()
return cmd or None
return None


client = OpenAI(api_key=os.getenv("BAILIAN_API_KEY"), base_url="https://dashscope.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1")

messages = [{"role": "system", "content": SYSTEM_PROMPT}]

# 持续对话
while True:
user_input = input("请输入你的问题:")

# 添加用户消息到对话历史
messages.append({"role": "user", "content": user_input})

while True:
response = client.responses.create(
model="qwen3.5-plus",
input=messages,
)
assistant_response = response.output_text or ""
messages.append({"role": "assistant", "content": assistant_response})

cmd = _extract_command(assistant_response)
if not cmd:
print(assistant_response)
break

p = subprocess.run(
cmd,
shell=True,
text=True,
capture_output=True,
)
out = ((p.stdout or "") + (p.stderr or "")).strip() or "(无输出)"
result = f"exit_code={p.returncode}\n{out}"
messages.append(
{
"role": "user",
"content": f"命令执行结果:\n命令:{cmd}\n{result}",
}
)

image

运行程序,输入需求。可以看到本地就创建了一个文件hello.txt,内容是:潘高陪你学编程。

image

恭喜你,才加了这么几行代码就进化成了一个Agent。

不要小看咱们这个例子中只是一个简单的创建文件的规则,后续你可以写任意复杂的规则,包括:调用API,读写文件,发送邮件,访问网页等等。

当然了,我们可以把这些复杂的规则单独在写一个文件里面,然后在程序中读取这个文件告诉大模型,这个文件就是SKILL.md。比如是以下这个天气SKILL.md:

1
2
如果需要获取天气,就用如下命令,XXX为地区
curl http://shanhe.kim/api/za/tianqi.php\?city\=XXX

同样的提问,有了这个天气SKILL.md,大模型的回复就会精准得多。这下你知道为啥有的人的龙虾什么都不会,而有的人给龙虾装了一堆SKILL之后,就变得厉害了。就和我们上面说的一样,你只是提前把操作说明告诉它而已。不是它厉害,而是你厉害。哈哈哈~

这时候,咱们按这个逻辑写的程序,已经是现今最智能的Agent了。

从本地到远程,手机也能控制电脑

那聪明的朋友要说了,人家龙虾可是能通过手机远程控制电脑的,比你这黑框要高级多了。好吧,这的确是龙虾成功的地方。之前智能体基本上只有专业的人才会用。龙虾是第一次通过手机聊天的形式,让普通的人也能用上智能体。

手机对话,这同样很简单。我让AI帮我补充一下代码。在本地启用一个HTTP服务器,然后在手机上访问这个服务器,就可以和AI进行对话了。

(代码我就不贴出来了,让AI写的。给大家看看效果)

image

image

见证奇迹的时刻,我们成功地用手机远程控制了电脑。咋样,10分钟手撸一个小龙虾(OpenClaw),你也尝试一下呗。


更多编程教学请关注公众号:潘高陪你学编程

image



如果这篇文章对你有帮助,或者想给我微小的工作一点点资瓷,请随意打赏。
潘高 微信支付

微信支付

潘高 支付宝

支付宝


10分钟教你手撸一个小龙虾(OpenClaw)
https://blog.pangao.vip/10分钟教你手撸一个小龙虾(OpenClaw)/
作者
潘高
发布于
2026年3月18日 晚上
更新于
2026年3月18日 晚上
许可协议