国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
方法一:讓AI全權(quán)處理并達(dá)到max_tokens限制
方法二:Python代碼生成作為解決方法
結(jié)論
參考文獻(xiàn)
首頁 后端開發(fā) Python教程 使用 Anthropic 的 Claude Sonnet 生成報(bào)告

使用 Anthropic 的 Claude Sonnet 生成報(bào)告

Jan 18, 2025 am 06:15 AM

利用Anthropic的Claude 3.5 Sonnet生成報(bào)告:兩種方法的比較

Using Anthropic

大家好!我是Raphael,巴西房地產(chǎn)公司Pilar的聯(lián)合創(chuàng)始人兼CTO。Pilar為房地產(chǎn)經(jīng)紀(jì)人和經(jīng)紀(jì)公司提供軟件和服務(wù),采用低成功費(fèi)模式。我們不收取高昂的前期費(fèi)用,而是從每次成功的交易中收取少量傭金,使我們的成功直接與客戶的成功掛鉤。我們由20名技術(shù)人員組成的團(tuán)隊(duì)不斷創(chuàng)新,最新產(chǎn)品是Pilar Homes,一個(gè)全新的房地產(chǎn)門戶網(wǎng)站,旨在為購房者和房產(chǎn)經(jīng)紀(jì)人提供最佳體驗(yàn)。

在這篇文章中,我將分享我們使用人工智能生成報(bào)告的經(jīng)驗(yàn),特別是Anthropic的Claude 3.5 Sonnet,并比較兩種不同的方法。

我們處理任務(wù)的理念將在未來的文章中詳細(xì)介紹(敬請(qǐng)關(guān)注?。?,但簡而言之,這些任務(wù)最終以Jira工單的形式出現(xiàn)在“技術(shù)服務(wù)臺(tái)”看板上。生成報(bào)告就是這樣一項(xiàng)任務(wù),大多數(shù)任務(wù)需要工程師花費(fèi)大約30分鐘來解決,復(fù)雜報(bào)告很少超過幾個(gè)小時(shí)。但情況正在發(fā)生變化。我們最初只與一兩個(gè)合作伙伴合作的精品品牌正在擴(kuò)張,成為更大的經(jīng)紀(jì)公司,我們也與業(yè)內(nèi)老牌公司簽訂了更多合同。雖然增加工程師的工作時(shí)間可以解決日益增長的報(bào)告需求,但我看到了探索人工智能代理并在現(xiàn)實(shí)環(huán)境中學(xué)習(xí)架構(gòu)模式的機(jī)會(huì)。

方法一:讓AI全權(quán)處理并達(dá)到max_tokens限制

在我們的初始方法中,我們將工具暴露給Claude的3.5 Sonnet模型,使其能夠執(zhí)行數(shù)據(jù)庫查詢、將檢索到的文檔轉(zhuǎn)換為CSV并將其結(jié)果寫入.csv文件。

以下是我們的結(jié)構(gòu),很大程度上受到了上面博客文章的啟發(fā):

<code># 每個(gè)collection對(duì)象描述一個(gè)MongoDB集合及其字段
# 這有助于Claude理解我們的數(shù)據(jù)模式
COLLECTIONS = [
    {
        'name': 'companies',
        'description': 'Companies are the real estate brokerages. If the user provides a code to filter the data, it will be a company code. The _id may be retrieved by querying the company with the given code. Company codes are not used to join data.',
        'fields': {
            '_id': 'The ObjectId is the MongoDB id that uniquely identifies a company document. Its JSON representation is \"{"$oid": "the id"}\"',
            'code': 'The company code is a short and human friendly string that uniquely identifies the company. Never use it for joining data.',
            'name': 'A string representing the company name',
        }
    },
    # 此處之后描述了更多集合,但思路相同...
]

# 這是client.messages.create的“system”參數(shù)
ROLE_PROMPT = "You are an engineer responsible for generating reports in CSV based on a user's description of the report content"

# 這是“user”消息
task_prompt = f"{report_description}.\nAvailable collections: {COLLECTIONS}\nCompany codes: {company_codes}\n.Always demand a company code from the user to filter the data -- the user may use the terms imobiliária, marca, brand or company to reference a company. If the user wants a field that does not exist in a collection, don't add it to the report and don't ask the user for the field."
</code>

report_description只是一個(gè)通過argparse讀取的命令行參數(shù),company_codes是從數(shù)據(jù)庫中檢索到的,并將其暴露給模型,以便它知道哪些公司存在以及用戶輸入中什么是公司代碼。示例:(MO - Mosaic Homes,NV - Nova Real Estate,等等)。

模型可用的工具包括:find和docs2csv。

<code>def find(collection: str, query: str, fields: list[str]) -> Cursor:
    """Find documents in a collection filtering by "query" and retrieving fields via projection"""
    return db.get_collection(collection).find(query, projection={field: 1 for field in fields})

def docs2csv(documents: list[dict]) -> list[str]:
    """
    Convert a dictionary to a CSV string.
    """
    print(f"Converting {len(documents)} documents to CSV")
    with open('report.csv', mode='w', encoding='utf-8') as file:
        writer = csv.DictWriter(file, fieldnames=documents[0].keys())
        writer.writeheader()
        writer.writerows(documents)
    return "report.csv"</code>

Claude能夠調(diào)用find函數(shù)對(duì)我們的數(shù)據(jù)庫執(zhí)行結(jié)構(gòu)良好的查詢和投影,并使用docs2csv工具生成小型CSV報(bào)告(少于500行)。但是,較大的報(bào)告會(huì)觸發(fā)max_tokens錯(cuò)誤。

在分析了我們的令牌使用模式后,我們意識(shí)到大部分令牌消耗都來自通過模型處理單個(gè)記錄。這促使我們探索另一種方法:讓Claude生成處理代碼,而不是直接處理數(shù)據(jù)。

方法二:Python代碼生成作為解決方法

雖然解決max_tokens限制在技術(shù)上并不困難,但它需要我們重新思考解決問題的方法。

解決方案?讓Claude生成將在我們的CPU上運(yùn)行的Python代碼,而不是通過AI處理每個(gè)文檔。

我必須修改角色和任務(wù)提示并刪除工具。

以下是報(bào)告生成代碼的要點(diǎn)。

生成報(bào)告的命令是:

<code># 每個(gè)collection對(duì)象描述一個(gè)MongoDB集合及其字段
# 這有助于Claude理解我們的數(shù)據(jù)模式
COLLECTIONS = [
    {
        'name': 'companies',
        'description': 'Companies are the real estate brokerages. If the user provides a code to filter the data, it will be a company code. The _id may be retrieved by querying the company with the given code. Company codes are not used to join data.',
        'fields': {
            '_id': 'The ObjectId is the MongoDB id that uniquely identifies a company document. Its JSON representation is \"{"$oid": "the id"}\"',
            'code': 'The company code is a short and human friendly string that uniquely identifies the company. Never use it for joining data.',
            'name': 'A string representing the company name',
        }
    },
    # 此處之后描述了更多集合,但思路相同...
]

# 這是client.messages.create的“system”參數(shù)
ROLE_PROMPT = "You are an engineer responsible for generating reports in CSV based on a user's description of the report content"

# 這是“user”消息
task_prompt = f"{report_description}.\nAvailable collections: {COLLECTIONS}\nCompany codes: {company_codes}\n.Always demand a company code from the user to filter the data -- the user may use the terms imobiliária, marca, brand or company to reference a company. If the user wants a field that does not exist in a collection, don't add it to the report and don't ask the user for the field."
</code>

Claude生成的Python內(nèi)容(運(yùn)行良好):

<code>def find(collection: str, query: str, fields: list[str]) -> Cursor:
    """Find documents in a collection filtering by "query" and retrieving fields via projection"""
    return db.get_collection(collection).find(query, projection={field: 1 for field in fields})

def docs2csv(documents: list[dict]) -> list[str]:
    """
    Convert a dictionary to a CSV string.
    """
    print(f"Converting {len(documents)} documents to CSV")
    with open('report.csv', mode='w', encoding='utf-8') as file:
        writer = csv.DictWriter(file, fieldnames=documents[0].keys())
        writer.writeheader()
        writer.writerows(documents)
    return "report.csv"</code>

結(jié)論

我們與Claude 3.5 Sonnet的歷程表明,人工智能可以顯著提高運(yùn)營效率,但成功的關(guān)鍵在于選擇正確的架構(gòu)。代碼生成方法被證明比直接的AI處理更強(qiáng)大,同時(shí)保持了自動(dòng)化的優(yōu)勢。

除了正確構(gòu)建報(bào)告外,代碼生成方法還允許工程師審查AI的工作,這是一件非常好的事情。

為了完全自動(dòng)化流程,消除人工參與并處理更大數(shù)量的報(bào)告,跨多個(gè)代理實(shí)例分配工作——每個(gè)實(shí)例處理更少的令牌——將是該系統(tǒng)的自然演變。對(duì)于此類分布式AI系統(tǒng)中的架構(gòu)挑戰(zhàn),我強(qiáng)烈推薦Phil Cal?ado關(guān)于構(gòu)建AI產(chǎn)品的最新文章。

此實(shí)現(xiàn)的主要經(jīng)驗(yàn)教訓(xùn):

  • 直接AI處理適用于較小的數(shù)據(jù)集
  • 代碼生成提供更好的可擴(kuò)展性和可維護(hù)性
  • 人工審查增加了可靠性

參考文獻(xiàn)

  • Anthropic 文檔
  • Thomas Taylor 使用 Python SDK 的帶工具的 Anthropic Claude
  • Phil Cal?ado 編寫的構(gòu)建 AI 產(chǎn)品——第一部分:后端架構(gòu)

以上是使用 Anthropic 的 Claude Sonnet 生成報(bào)告的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

Python類中的多態(tài)性 Python類中的多態(tài)性 Jul 05, 2025 am 02:58 AM

多態(tài)是Python面向?qū)ο缶幊讨械暮诵母拍?,指“一種接口,多種實(shí)現(xiàn)”,允許統(tǒng)一處理不同類型的對(duì)象。1.多態(tài)通過方法重寫實(shí)現(xiàn),子類可重新定義父類方法,如Animal類的speak()方法在Dog和Cat子類中有不同實(shí)現(xiàn)。2.多態(tài)的實(shí)際用途包括簡化代碼結(jié)構(gòu)、增強(qiáng)可擴(kuò)展性,例如圖形繪制程序中統(tǒng)一調(diào)用draw()方法,或游戲開發(fā)中處理不同角色的共同行為。3.Python實(shí)現(xiàn)多態(tài)需滿足:父類定義方法,子類重寫該方法,但不要求繼承同一父類,只要對(duì)象實(shí)現(xiàn)相同方法即可,這稱為“鴨子類型”。4.注意事項(xiàng)包括保持方

什么是python的列表切片? 什么是python的列表切片? Jun 29, 2025 am 02:15 AM

ListslicinginPythonextractsaportionofalistusingindices.1.Itusesthesyntaxlist[start:end:step],wherestartisinclusive,endisexclusive,andstepdefinestheinterval.2.Ifstartorendareomitted,Pythondefaultstothebeginningorendofthelist.3.Commonusesincludegetting

python`@classmethod'裝飾師解釋了 python`@classmethod'裝飾師解釋了 Jul 04, 2025 am 03:26 AM

類方法是Python中通過@classmethod裝飾器定義的方法,其第一個(gè)參數(shù)為類本身(cls),用于訪問或修改類狀態(tài)。它可通過類或?qū)嵗{(diào)用,影響的是整個(gè)類而非特定實(shí)例;例如在Person類中,show_count()方法統(tǒng)計(jì)創(chuàng)建的對(duì)象數(shù)量;定義類方法時(shí)需使用@classmethod裝飾器并將首參命名為cls,如change_var(new_value)方法可修改類變量;類方法與實(shí)例方法(self參數(shù))、靜態(tài)方法(無自動(dòng)參數(shù))不同,適用于工廠方法、替代構(gòu)造函數(shù)及管理類變量等場景;常見用途包括從

Python函數(shù)參數(shù)和參數(shù) Python函數(shù)參數(shù)和參數(shù) Jul 04, 2025 am 03:26 AM

參數(shù)(parameters)是定義函數(shù)時(shí)的占位符,而傳參(arguments)是調(diào)用時(shí)傳入的具體值。1.位置參數(shù)需按順序傳遞,順序錯(cuò)誤會(huì)導(dǎo)致結(jié)果錯(cuò)誤;2.關(guān)鍵字參數(shù)通過參數(shù)名指定,可改變順序且提高可讀性;3.默認(rèn)參數(shù)值在定義時(shí)賦值,避免重復(fù)代碼,但應(yīng)避免使用可變對(duì)象作為默認(rèn)值;4.args和*kwargs可處理不定數(shù)量的參數(shù),適用于通用接口或裝飾器,但應(yīng)謹(jǐn)慎使用以保持可讀性。

如何使用CSV模塊在Python中使用CSV文件? 如何使用CSV模塊在Python中使用CSV文件? Jun 25, 2025 am 01:03 AM

Python的csv模塊提供了讀寫CSV文件的簡單方法。1.讀取CSV文件時(shí),可使用csv.reader()逐行讀取,并將每行數(shù)據(jù)作為字符串列表返回;若需通過列名訪問數(shù)據(jù),則可用csv.DictReader(),它將每行映射為字典。2.寫入CSV文件時(shí),使用csv.writer()并調(diào)用writerow()或writerows()方法寫入單行或多行數(shù)據(jù);若要寫入字典數(shù)據(jù),則使用csv.DictWriter(),需先定義列名并通過writeheader()寫入表頭。3.處理邊緣情況時(shí),模塊自動(dòng)處理

解釋Python發(fā)電機(jī)和迭代器。 解釋Python發(fā)電機(jī)和迭代器。 Jul 05, 2025 am 02:55 AM

迭代器是實(shí)現(xiàn)__iter__()和__next__()方法的對(duì)象,生成器是簡化版的迭代器,通過yield關(guān)鍵字自動(dòng)實(shí)現(xiàn)這些方法。1.迭代器每次調(diào)用next()返回一個(gè)元素,無更多元素時(shí)拋出StopIteration異常。2.生成器通過函數(shù)定義,使用yield按需生成數(shù)據(jù),節(jié)省內(nèi)存且支持無限序列。3.處理已有集合時(shí)用迭代器,動(dòng)態(tài)生成大數(shù)據(jù)或需惰性求值時(shí)用生成器,如讀取大文件時(shí)逐行加載。注意:列表等可迭代對(duì)象不是迭代器,迭代器到盡頭后需重新創(chuàng)建,生成器只能遍歷一次。

如何在Python中結(jié)合兩個(gè)列表? 如何在Python中結(jié)合兩個(gè)列表? Jun 30, 2025 am 02:04 AM

合并兩個(gè)列表有多種方法,選擇合適方式可提升效率。1.使用 號(hào)拼接生成新列表,如list1 list2;2.使用 =修改原列表,如list1 =list2;3.使用extend()方法在原列表上操作,如list1.extend(list2);4.使用號(hào)解包合并(Python3.5 ),如[list1,*list2],支持靈活組合多個(gè)列表或添加元素。不同方法適用于不同場景,需根據(jù)是否修改原列表及Python版本進(jìn)行選擇。

如何在Python中調(diào)用功能? 如何在Python中調(diào)用功能? Jun 25, 2025 am 12:59 AM

要調(diào)用Python中的函數(shù),需先定義函數(shù)再使用函數(shù)名加括號(hào)的形式進(jìn)行調(diào)用。1.使用def關(guān)鍵字定義函數(shù),如defgreet():print("Hello,world!");2.通過函數(shù)名后加括號(hào)調(diào)用函數(shù),如greet();3.若函數(shù)需要參數(shù),調(diào)用時(shí)在括號(hào)內(nèi)傳入對(duì)應(yīng)值,如defgreet(name):print(f"Hello,{name}!")和greet("Alice");4.可傳遞多個(gè)參數(shù),如defadd(a,b):result=a

See all articles