前言 OpenClaw,江湖人称“小龙虾”,想必你早有耳闻。有人把它捧上天,说它无所不能;有人把它踩到底,说它一无是处。有人花 499 请人上门安装,有人又掏 299 请人卸载。你说它是智商税?它又像是未来的敲门砖。
但我想告诉你,这些评价都不算数。想知道它到底能干啥,得先搞明白它怎么干。今天,咱们不吹不黑,亲手撸一只小龙虾(OpenClaw),一步步揭开它的神秘面纱。
从最简单的对话开始 让我们回到那个最初的起点,大语言模型。没错,就是这个只会一问一答的“小玩具”。相信你一定用过网页版的AI聊天工具,但如果你想在程序里调用它,就得用另一种方式:API接口。
别怕代码,大部分时候你只需要把官方给的示例贴进去,就能跑起来。
1 2 3 4 5 6 7 8 9 10 11 12 13 import osfrom openai import OpenAIclient = 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)
恭喜你,你已经成功通过代码来和大模型对话了。
但是这里是写死的 你是谁? ,能不能改成由用户手动输入呢?
很简单,增加一行代码就行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import osfrom openai import OpenAIclient = 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)
从终端获取用户输入,存到变量 user_input 中,再传给大模型。这样就实现了自定义输入问题,大模型回答。
当然了,这样还不够。相信你也看到了,一次对话,程序就终止了。我们需要给程序加一个循环,回答完成后,继续等待我们的提问。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import osfrom openai import OpenAIclient = 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)
这样我们就能与大模型进行持续的对话了。
那假如此时我们再来一个追问:再加1等于几呢?
照理来说,大模型应该回答: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 osfrom openai import OpenAIclient = 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)
那运行一下试试看。
没问题,大模型现在会记住之前的对话了。现在我们写的AI程序已经跟刚发布的ChatGPT没啥区别了。
从对话到行动:让AI帮你干活 接下来,我们更进一步,实现一个能操作本地文件的Agent。
哎呀呀,一提到Agent,是不是觉得难度一下就上去了。别担心,我会用最基本的代码实现一个Agent,教你看透本质。
Agent的本质就是大模型+工具。所谓工具就是能帮我们干事。
那好,我现在就有一个需求,让Agent帮我在本地电脑创建一个hello.txt的文件,内容是:潘高陪你学编程。
我们能看到大模型回复的是教我们创建文件的命令 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 osimport subprocessfrom 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} " , } )
运行程序,输入需求。可以看到本地就创建了一个文件hello.txt,内容是:潘高陪你学编程。
恭喜你,才加了这么几行代码就进化成了一个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写的。给大家看看效果)
见证奇迹的时刻,我们成功地用手机远程控制了电脑。咋样,10分钟手撸一个小龙虾(OpenClaw),你也尝试一下呗。
更多编程教学请关注公众号:潘高陪你学编程