国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

使用 Claude 3.5 和 Python 構建 ReAct AI Agent

發布于 2024-10-12 14:16
瀏覽
0收藏

Reason+Act (ReAct) Agent 能夠通過將思維鏈推理與外部工具訪問和迭代求解能力相結合,來執行復雜的推理任務。

ReAct Agent的工作原理

ReAct Agent的核心組件是系統提示,它定義了Agent的整體行為(我們稍后將看到一個示例)。

處理從用戶提示開始,用戶提示請求解決某個問題。系統提示指示Agent對問題進行推理,并在適當的時候選擇一個外部工具來幫助解決問題。

Agent調用工具,并在收到響應后決定是否需要進一步處理。如果需要,它可以再次請求幫助。Agent會在推理和行動(調用工具)之間迭代,直到它解決了問題,然后將結果返回給用戶。

下圖說明了這個過程。

使用 Claude 3.5 和 Python 構建 ReAct AI Agent-AI.x社區

ReAct Agent過程

案例研究

也許,解釋 ReAct Agent如何工作的最簡單方法是使用一個簡單的案例研究。以下是一個Agent解決簡單算術問題的示例響應。

我們從問題“20 * 15 等于多少”開始,Agent開始“大聲思考”。

20 * 15 等于多少

思考: 這是一個簡單的乘法問題,我可以使用 calculate 操作來解決。

行動: calculate: 20 * 15

觀察: 300

答案: 20 * 15 的結果是 300。

Agent的響應前面帶有 思考 標簽,它在其中推理應該做什么。在本例中,它決定使用 calculate

下一個響應前面帶有 行動 標簽,我們看到Agent使用 calculate 工具來獲取答案。之后,我們看到 觀察,這是來自工具的響應。

最后的 答案 是Agent根據原始問題和 calculate 工具的輸出創建的響應的結果。

從表面上看,這里并沒有什么特別不尋常的地方——除了Agent使用了一個我們提供的工具。

而這正是 ReAct Agent的關鍵:Agent使用外部工具進行推理,然后采取行動。

迭代

當Agent決定它還沒有得出結論,需要經過另一個推理/行動序列時,事情就變得更有趣了。Agent可以迭代推理/行動序列,直到得出有效結論。

上面的例子很簡單,但它向您展示了事件的基本序列。

如果我們嘗試更復雜的查詢,我們可以看到迭代在實踐中的應用。

我問了Agent以下問題:“_籃球隊和曲棍球隊的球員人數相乘的結果是多少?_”。

為了回答這個問題,Agent需要找出每項運動的球員人數,然后將它們相乘。它可以使用 calculate

下面我們看到Agent在得出令人滿意的答案之前,三次經過了思考-行動-觀察序列的方式。

要回答這個問題,我需要找出籃球隊和曲棍球隊的球員人數,然后將這些數字相乘。讓我們從籃球開始。

思考: 我將先查閱籃球隊的球員人數。

行動: wikipedia: 籃球

觀察: 籃球是一項團隊運動。每支球隊在球場上同時有五名球員,盡管球隊可能在替補席上有替補球員。

思考: 現在我知道一支籃球隊在球場上同時有 5 名球員,我需要找出曲棍球隊的球員人數。

行動: wikipedia: 曲棍球

觀察: 曲棍球是一項團隊運動,每支球隊在球場上同時有 10 名球員:3 名進攻球員、3 名中場球員、3 名防守球員和 1 名守門員。但是,在不同版本的比賽中,人數可能會有所不同。例如,室內曲棍球的球員人數較少。

思考: 現在我已經知道兩種運動的球員人數,我可以計算結果了。

行動: calculate: 5 * 10

觀察: 50

答案: 將籃球隊的人數(5)乘以曲棍球隊的人數(10)的結果是 50。

如果您通讀輸出內容,您會看到Agent如何在得出結果之前進行推理并咨詢工具,并且在這樣做的時候,它會隨著時間的推移積累知識。

代碼非常少

實現 ReAct Agent所需的代碼出奇地少,因為大部分工作都在提示中完成。

所以讓我們先看看這個。

prompt = """
您在一個 Thought、Action、Observation、Answer 的循環中運行。
在循環結束時,您輸出一個 Answer
使用 Thought 描述您對所問問題的想法。
使用 Action 運行您可以使用的操作之一。
Observation 將是運行這些操作的結果。
Answer 將是分析 Observation 的結果。

您可以使用的操作是:

calculate:
例如 calculate: 4 * 7 / 3
運行計算并返回數字 - 使用 Python,因此如果需要,請務必使用浮點語法

wikipedia:
例如 wikipedia: Django
從維基百科搜索返回摘要

如果您可以使用維基百科查找內容,請始終使用維基百科進行查找。

示例會話:

問題:法國的首都是什么?

思考:我應該在維基百科上查找有關法國的信息

行動:wikipedia: 法國

然后您應該調用適當的操作并從
結果中確定答案

然后您輸出:

答案:法國的首都為巴黎
"""

提示的第一部分告訴 LLM 如何通過我們之前看到的標記過程部分來解決問題,這些部分在循環中運行。

然后描述了 calculate 和 wikipedia

這個提示是一個簡單的示例,當然僅用于演示目的。很明顯,該提示是為這個特定應用程序設計的:工具的描述是硬編碼的,而在生產系統中,您希望能夠以編程方式擴展它們。(我們很快就會看到 calculate 是使用 Python 函數 eval() 實現的。這是一個相當糟糕的做法,因為它很容易受到代碼注入攻擊。)

代碼和提示的基本結構是 Simon 的,但我對其進行了修改,以便使用 Anthropic 的 Claude 3.5 Sonnet LLM,并簡化了代碼和提示。

Claude 3.5

Claude Sonnet 3.5 是 Anthropic 最近發布的一個版本,在他們的 發布公告 中,他們聲明“Claude 3.5 Sonnet 提高了行業智能標準,在廣泛的評估中優于競爭對手模型和 Claude 3 Opus,具有我們中端模型 Claude 3 Sonnet 的速度和成本”。

為了說明這一點,Anthropic 擁有三個版本的 Claude LLM,從更便宜、更快的 Haiku 模型,到更智能但更昂貴的 Opus 模型。Sonnet 是介于兩者之間的模型,是唯一在撰寫本文時擁有 3.5 版本的模型。

我一直想看看 Claude,這似乎是一個很好的機會。

代碼從必要的導入開始:

import anthropic
import re
import httpx

這里沒有太多東西。Anthropic,當然,用于 LLM,正則表達式和一個 HTTP 庫來訪問維基百科。

要運行代碼,您當然需要一個 Anthropic 帳戶,他們會向您收取使用費。不過,它相當便宜:Claude 3.5 sonnet 比之前的版本更便宜,而且更強大——我已經在這里運行了代碼(以及更多代碼),只收取了幾美分的費用。

代碼首先創建一個客戶端,然后定義一個 Python 類來實現聊天機器人。與 OpenAI 不同,Claude 將系統提示與用戶或助手的提示分開,我們在實例化 ChatBot? 時初始化提示。__call__? 函數負責存儲用戶消息和來自聊天機器人的響應,并調用 execute 來運行Agent。

client = anthropic.Anthropic(api_key="YOUR API KEY HERE")

class ChatBot:
    def __init__(self, system=""):
        self.system = system
        self.messages = []

    def __call__(self, message):
        self.messages.append({"role": "user", "content": message})
        result = self.execute()
        self.messages.append({"role": "assistant", "content": result})
        return message

    def execute(self):
        message = client.messages.create(
            model="claude-3-5-sonnet-20240620",
            max_tokens=1000,
            temperature=0,
            system = self.system,
            messages = self.messages
        )
        return message.content

下一步是定義一個 query() 函數,它使用聊天機器人的實例。query 函數實現了一個循環,該循環會一直持續到沒有更多操作(或者我們已經達到最大迭代次數)為止。該函數檢測操作并使用正則表達式提取操作的名稱。這些操作被調用,當沒有更多操作時,聊天機器人消息將被返回。

action_re = re.compile('^Action: (\w+): (.*)$')

def query(question, max_turns=5):
    i = 0
    bot = ChatBot(prompt)
    next_prompt = question
    while i < max_turns:
        i += 1
        result = bot(next_prompt)
        print(result)
        actions = [action_re.match(a) for a in result.split('\n') if action_re.match(a)]
        if actions:
            # 有一個要運行的操作
            action, action_input = actions[0].groups()
            if action not in known_actions:
                raise Exception("Unknown action: {}: {}".format(action, action_input))
            print(" -- running {} {}".format(action, action_input))
            observation = known_actions[action](action_input)
            print("Observation:", observation)
            next_prompt = "Observation: {}".format(observation)
        else:
            return bot.messages

現在我們需要定義操作函數(工具)wikipedia? 和 eval,并將對它們的引用存儲在一個字典中。

def wikipedia(q):
    return httpx.get("https://en.wikipedia.org/w/api.php", params={
        "action": "query",
        "list": "search",
        "srsearch": q,
        "format": "json"
    }).json()["query"]["search"][0]["snippet"]

def calculate(what):
    return eval(what)

known_actions = {
    "wikipedia": wikipedia,
    "calculate": calculate
}

接下來是一個實用程序函數,它打印出由機器人生成的最后一條消息。

def get_last_message():
    for m in bot.messages[-1]['content'][0].text.split('\n'):
        print(m)

最后,在完成所有這些步驟后,我們可以開始使用Agent。

query("What is 20 * 15")
get_last_message()

上面的代碼產生了我們在文章開頭看到的第一個例子,下面的代碼展示了 ReAct Agent如何迭代地執行各種操作以得出有效結論的另一個例子。

這是一個示例,其中Agent必須迭代調用工具。在本例中,它只使用維基百科,但它必須智能地分析響應才能得出答案。

query("What languages are spoken in Spain that are also spoken in France")
get_last_message()

西班牙和法國都使用哪些語言?

思考: 為了準確地回答這個問題,我應該查找有關西班牙和法國使用的語言的信息。我將首先檢查維基百科以獲取有關西班牙語言的信息。

行動: wikipedia: 西班牙語

觀察: 西班牙在邊境內部使用多種語言和方言。西班牙的官方語言是西班牙語(也稱為卡斯蒂利亞語),大多數西班牙人使用這種語言。然而,在各個自治區,有幾種共同的官方語言:

加泰羅尼亞語:在加泰羅尼亞、巴利阿里群島和瓦倫西亞自治區的部分地區使用(在那里被稱為瓦倫西亞語)。

加利西亞語:在加利西亞使用。

巴斯克語:在巴斯克地區和納瓦拉的部分地區使用。

奧克語(阿蘭語):在加泰羅尼亞的阿蘭谷使用。

其他公認的語言包括阿拉貢語和阿斯圖里亞斯語。在不同的地區,還使用著幾種西班牙語方言。

思考: 現在我已經了解了西班牙的語言,我應該檢查一下法國的語言,看看哪些語言重疊。

行動: wikipedia: 法語

觀察: 法國的官方語言是法語,占人口的 88%。然而,法國使用著幾種地區語言和方言:

奧克語:在法國南部使用。

布列塔尼語:一種凱爾特語言,在布列塔尼使用。

阿爾薩斯語:一種日耳曼語方言,在阿爾薩斯使用。

科西嘉語:在科西嘉島使用。

加泰羅尼亞語:在法國東比利牛斯省使用。

巴斯克語:在法國巴斯克地區使用。

其他地區語言包括法蘭克-普羅旺斯語、洛林弗蘭克語和各種油語。

思考: 通過比較西班牙和法國使用的語言,我可以識別出重疊的語言。

答案: 西班牙和法國都使用的語言是:

加泰羅尼亞語:在西班牙的部分地區(加泰羅尼亞、巴利阿里群島和瓦倫西亞)以及法國的東比利牛斯省使用。

巴斯克語:在西班牙的巴斯克地區和納瓦拉的部分地區使用,以及法國的巴斯克地區。

奧克語:在西班牙加泰羅尼亞的阿蘭谷被稱為阿蘭語,并在法國南部使用。

這三種語言在兩個國家都得到認可和使用,盡管它們在西班牙和法國的官方地位和使用人數可能會有所不同。

上面的響應展示了Agent為了得出合適的答案而經過的合理過程。

我還嘗試了更復雜的問題,Agent似乎也能很好地處理這些問題(您可以在下載的代碼中看到更多示例)。

結論

本文介紹的代碼展示了 ReAct Agent的工作方式。它并不健壯,也不適合生產環境。但我希望您現在對 ReAct Agent的原理以及如何實現它們有了相當好的理解。

請使用更復雜的示例嘗試代碼,并可能添加更多工具。我很樂意聽到您的實驗結果。

當然,使用 Langchain 和 Llamaindex(例如)有更簡單的解決方案,我可能會在以后的文章中介紹它們。

本文轉載自 ??DevOpsAI??,作者:ReAct Agent

收藏
回復
舉報
回復
相關推薦
一区二区三区在线免费看| 激情懂色av一区av二区av| 国产一级做a爰片久久毛片男| 九一久久久久久| 久久99久久久久久| 国产精品毛片高清在线完整版| 久久白虎精品| 日韩女优制服丝袜电影| 久久综合偷偷噜噜噜色| 国产精品视频大全| 免费在线观看一区二区三区| www黄色在线| 日韩欧美999| 91精品论坛| 国产精品久久久久9999| 日韩国产在线一| 天天干在线影院| 免费看a级黄色片| 91精品国产91久久久久久一区二区 | 免费高清在线观看| 高清欧美性猛交xxxx黑人猛交| 亚洲欧美区自拍先锋| 在线高清av| 精品国产乱子伦一区| 91国内精品| 久久精品aaaaaa毛片| 成人在线观看91| 亚洲国产成人精品电影| 97在线影院| 亚洲精品国产福利| 成人短片线上看| 欧美xxxx吸乳| 一本一道综合狠狠老| 成人全视频在线观看在线播放高清 | 欧美在线观看一区| 成人a在线观看高清电影| 色天天综合狠狠色| 夜间精品视频| xxxx一级片| 影音先锋男人资源在线| 国产视频久久久| 欧美+日本+国产+在线a∨观看| cao在线观看| 欧美亚洲愉拍一区二区| 99热这里只有精品首页| 亚洲一区二区在线观| 大伊人狠狠躁夜夜躁av一区| 日韩精品成人在线观看| 一区中文字幕在线观看| 色8久久精品久久久久久蜜| 盗摄牛牛av影视一区二区| 日韩欧美视频一区二区三区四区| 夜夜精品视频一区二区| 精品国产鲁一鲁****| 在线观看福利一区| 精品污污网站免费看| 欧美日韩国产传媒| 亚洲精品一二三四五区| 亚洲成人国产精品| 日韩天天综合| 男女污视频在线观看| 日本sm极度另类视频| 91在线你懂得| 亚洲人成在线网站| 麻豆视频成人| 在线观看视频一区二区欧美日韩| 曰本一区二区三区视频| 韩国日本在线视频| 色悠悠国产精品| 国产一区二区福利| av福利导福航大全在线| 美日韩精品免费| 欧美综合亚洲图片综合区| 狠狠操综合网| 免费成年网站| 欧美一区二区三区图| 国产亚洲精品超碰| 日本精品一区二区三区在线观看视频| 精品免费久久久久久久| 亚洲精品一区中文| 国产一区激情在线| 日韩大尺度黄色| 久久综合亚洲精品| 亚洲男人av电影| 韩国成人在线视频| 丝袜诱惑一区二区| 91嫩草国产丨精品入口麻豆 | 丝袜美腿美女被狂躁在线观看| 成人日韩在线电影| 欧美日韩国产影院| 在线精品视频在线观看高清| 日本五码在线| 成人免费视频观看视频| 欧美制服丝袜第一页| 亚洲精品女人| 成人看av片| 亚洲欧洲三级| 亚洲视频第一页| 国内老司机av在线| 酒色婷婷桃色成人免费av网| 亚洲午夜精品一区二区| 亚州精品天堂中文字幕| 成人三级伦理片| 国产精品久久久久av电视剧| 奇米影视首页 狠狠色丁香婷婷久久综合| 91福利视频网站| 国产精品18久久久久久久久| 精品一区二区免费| 美女在线视频一区| 久久aⅴ国产欧美74aaa| 青青草一区二区三区| 筱崎爱全乳无删减在线观看 | 国产精品久久久久影院日本 | 中国女人久久久| 精品黄色一级片| 老牛国产精品一区的观看方式| 99热精品一区二区| 制服.丝袜.亚洲.另类.中文| 国产suv精品一区二区三区88区| 日本a在线天堂| 最新超碰在线| 国产欧美日韩电影| 欧美一级专区| 激情成人中文字幕| 91精品国产91久久久久久吃药| 日韩精品免费一区| 国产欧美黑人| 色97色成人| 亚洲欧美一区二区三区国产精品 | 99久久精品国产一区二区三区| 日韩精品专区在线影院重磅| 国产成人精品日本亚洲11| 在线看三级网站视频| 国内黄色精品| 一色桃子久久精品亚洲| 欧美激情视频一区二区| 国产女大学生av| 久久人人视频| av电影在线观看完整版一区二区| 亚洲最新av在线网站| 六月婷婷在线视频| 在线高清欧美| 中文字幕成人在线观看| 日韩av手机在线看| 国产网友自拍电影在线| 自拍日韩欧美| 日韩欧美精品三级| 九一免费在线观看| 超碰这里只有精品| 最新亚洲激情| 日韩欧美不卡一区| 福利视频一二区| 久本草在线中文字幕亚洲| 一区二区三区视频在线看| 91在线精品播放| 伊人电影在线观看| 国产乱一区二区| 欧美激情国产精品| 在线播放免费| 激情图片小说一区| 久久久久999| 中文字幕欧美人妻精品一区| 青青草成人影院| 精品视频偷偷看在线观看| 黄色免费看网站| 免费看欧美女人艹b| 欧美成人高清视频| 北岛玲日韩精品一区二区三区| 成人av片在线观看| 精品国产综合久久| 成人在线播放免费观看| 亚洲精品视频免费观看| 2021狠狠干| 亚洲欧美视频一区二区三区| 欧美在线中文字幕| 一区二区三区电影大全| 欧美另类videos死尸| 天天干夜夜干| 一区二区在线看| 538任你躁在线精品免费| 国产麻豆精品一区二区| 动漫美女被爆操久久久| 欧美丝袜丝交足nylons172| 欧美黑人巨大精品一区二区| 日韩国产一二三区| 中文字幕日本精品| 亚洲精品国产嫩草在线观看| 亚洲第一中文字幕| 免费看电影在线| 欧美一区二区三区四区在线观看| 曰本人一级毛片免费完整视频| 国产精品美女视频| 欧美第一页浮力影院| 国产午夜精品久久久久久久| av动漫在线看| 国产剧情一区二区| 国产精品xxx在线观看www| 亚洲精品91| 豆国产97在线| 在线亚洲观看|