10分鐘教你手?jǐn)]一個小龍蝦(OpenClaw)

前言

OpenClaw,江湖人稱“小龍蝦”,想必你早有耳聞。有人把它捧上天,說它無所不能;有人把它踩到底,說它一無是處。有人花 499 請人上門安裝,有人又掏 299 請人卸載。你說它是智商稅?它又像是未來的敲門磚。

但我想告訴你,這些評價都不算數(shù)。想知道它到底能干啥,得先搞明白它怎么干。今天,咱們不吹不黑,親手?jǐn)]一只小龍蝦(OpenClaw),一步步揭開它的神秘面紗。

從最簡單的對話開始

讓我們回到那個最初的起點,大語言模型。沒錯,就是這個只會一問一答的“小玩具”。相信你一定用過網(wǎng)頁版的AI聊天工具,但如果你想在程序里調(diào)用它,就得用另一種方式:API接口。

別怕代碼,大部分時候你只需要把官方給的示例貼進去,就能跑起來。

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),是阿里巴巴集團旗下的通義實驗室自主研發(fā)的超大規(guī)模語言模型。我可以協(xié)助你回答問題、創(chuàng)作內(nèi)容、編寫代碼、分析文檔等。有什么我可以幫你的嗎?

恭喜你,你已經(jīng)成功通過代碼來和大模型對話了。

但是這里是寫死的 你是誰? ,能不能改成由用戶手動輸入呢?

10分鐘教你手?jǐn)]一個小龍蝦(OpenClaw)-1.png

很簡單,增加一行代碼就行。

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)
10分鐘教你手?jǐn)]一個小龍蝦(OpenClaw)-2.png

從終端獲取用戶輸入,存到變量 user_input 中,再傳給大模型。這樣就實現(xiàn)了自定義輸入問題,大模型回答。

10分鐘教你手?jǐn)]一個小龍蝦(OpenClaw)-3.png

當(dāng)然了,這樣還不夠。相信你也看到了,一次對話,程序就終止了。我們需要給程序加一個循環(huán),回答完成后,繼續(xù)等待我們的提問。

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)
10分鐘教你手?jǐn)]一個小龍蝦(OpenClaw)-4.png

這樣我們就能與大模型進行持續(xù)的對話了。

10分鐘教你手?jǐn)]一個小龍蝦(OpenClaw)-5.png

那假如此時我們再來一個追問:再加1等于幾呢?

10分鐘教你手?jǐn)]一個小龍蝦(OpenClaw)-6.png

照理來說,大模型應(yīng)該回答:3。但是呢,它好像并不記得我剛剛問了什么。

那為什么會這樣呢?很簡單,因為大模型是一個無狀態(tài)的模型。每次對話,它都是獨立運行的,不會記住之前的任何信息。

要解決這個問題也很簡單,在每次跟大模型對話的時候把之前的內(nèi)容加上去就好了。

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 = []

# 持續(xù)對話
while True:
    user_input = input("請輸入你的問題:")

    # 添加用戶消息到對話歷史
    messages.append({"role": "user", "content": user_input})

    # 調(diào)用API,傳入對話歷史
    response = client.responses.create(
        model="qwen3.5-plus",
        input=messages,
    )

    # 提取助手回復(fù)
    assistant_response = response.output_text

    # 添加助手回復(fù)到對話歷史
    messages.append({"role": "assistant", "content": assistant_response})

    print(assistant_response)
10分鐘教你手?jǐn)]一個小龍蝦(OpenClaw)-7.png

那運行一下試試看。

10分鐘教你手?jǐn)]一個小龍蝦(OpenClaw)-8.png

沒問題,大模型現(xiàn)在會記住之前的對話了。現(xiàn)在我們寫的AI程序已經(jīng)跟剛發(fā)布的ChatGPT沒啥區(qū)別了。

從對話到行動:讓AI幫你干活

接下來,我們更進一步,實現(xiàn)一個能操作本地文件的Agent。

哎呀呀,一提到Agent,是不是覺得難度一下就上去了。別擔(dān)心,我會用最基本的代碼實現(xiàn)一個Agent,教你看透本質(zhì)。

Agent的本質(zhì)就是大模型+工具。所謂工具就是能幫我們干事。

那好,我現(xiàn)在就有一個需求,讓Agent幫我在本地電腦創(chuàng)建一個hello.txt的文件,內(nèi)容是:潘高陪你學(xué)編程。

10分鐘教你手?jǐn)]一個小龍蝦(OpenClaw)-9.png

我們能看到大模型回復(fù)的是教我們創(chuàng)建文件的命令 echo "潘高陪你學(xué)編程" > hello.txt 。雖然照大模型說的執(zhí)行這個命令就可以完成任務(wù),但是還需要我們粘貼復(fù)制,沒有辦法自動化實現(xiàn)。那這該怎么辦呢?

很簡單,我們只需要提前告訴大模型,如果需要用到命令,就回復(fù) 命令:... 。然后再用程序執(zhí)行命令,最后把執(zhí)行命令的返回信息給大模型,讓大模型判斷是否結(jié)束任務(wù)。

import os
import subprocess

from openai import OpenAI

SYSTEM_PROMPT = """你是一個可以驅(qū)動本機命令行的助手。

規(guī)則:
1) 當(dāng)你需要程序執(zhí)行命令時,你必須且只能回復(fù)一行:命令:<要執(zhí)行的命令>
   - “命令:”后面的內(nèi)容就是命令本體,不要輸出任何額外解釋、前后綴、Markdown、代碼塊或多行文本。
2) 當(dāng)你不需要再執(zhí)行命令時,請用自然語言給出最終結(jié)論/答復(fù)(這時不要以“命令:”開頭)。
3) 程序會把命令的執(zhí)行結(jié)果(stdout/stderr/退出碼/當(dāng)前目錄)回傳給你;你據(jù)此決定繼續(xù)發(fā)命令還是結(jié)束。
"""


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}]

# 持續(xù)對話
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"命令執(zhí)行結(jié)果:\n命令:{cmd}\n{result}",
            }
        )
10分鐘教你手?jǐn)]一個小龍蝦(OpenClaw)-10.png

運行程序,輸入需求??梢钥吹奖镜鼐蛣?chuàng)建了一個文件hello.txt,內(nèi)容是:潘高陪你學(xué)編程。

10分鐘教你手?jǐn)]一個小龍蝦(OpenClaw)-11.png

恭喜你,才加了這么幾行代碼就進化成了一個Agent。

不要小看咱們這個例子中只是一個簡單的創(chuàng)建文件的規(guī)則,后續(xù)你可以寫任意復(fù)雜的規(guī)則,包括:調(diào)用API,讀寫文件,發(fā)送郵件,訪問網(wǎng)頁等等。

當(dāng)然了,我們可以把這些復(fù)雜的規(guī)則單獨在寫一個文件里面,然后在程序中讀取這個文件告訴大模型,這個文件就是SKILL.md。比如是以下這個天氣SKILL.md:

如果需要獲取天氣,就用如下命令,XXX為地區(qū)
curl http://shanhe.kim/api/za/tianqi.php\?city\=XXX

同樣的提問,有了這個天氣SKILL.md,大模型的回復(fù)就會精準(zhǔn)得多。這下你知道為啥有的人的龍蝦什么都不會,而有的人給龍蝦裝了一堆SKILL之后,就變得厲害了。就和我們上面說的一樣,你只是提前把操作說明告訴它而已。不是它厲害,而是你厲害。哈哈哈~

這時候,咱們按這個邏輯寫的程序,已經(jīng)是現(xiàn)今最智能的Agent了。

從本地到遠(yuǎn)程,手機也能控制電腦

那聰明的朋友要說了,人家龍蝦可是能通過手機遠(yuǎn)程控制電腦的,比你這黑框要高級多了。好吧,這的確是龍蝦成功的地方。之前智能體基本上只有專業(yè)的人才會用。龍蝦是第一次通過手機聊天的形式,讓普通的人也能用上智能體。

手機對話,這同樣很簡單。我讓AI幫我補充一下代碼。在本地啟用一個HTTP服務(wù)器,然后在手機上訪問這個服務(wù)器,就可以和AI進行對話了。

(代碼我就不貼出來了,讓AI寫的。給大家看看效果)

10分鐘教你手?jǐn)]一個小龍蝦(OpenClaw)-12.png
10分鐘教你手?jǐn)]一個小龍蝦(OpenClaw)-13.png

見證奇跡的時刻,我們成功地用手機遠(yuǎn)程控制了電腦。咋樣,10分鐘手?jǐn)]一個小龍蝦(OpenClaw),你也嘗試一下唄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容