構(gòu)建您的第一個(gè) AI 智能體的完整指南(比您想象的要容易)
AI智能體的應(yīng)用場(chǎng)景日益廣泛。然而,對(duì)于許多初學(xué)者來(lái)說(shuō),構(gòu)建一個(gè)有效的AI智能體似乎是一項(xiàng)艱巨的任務(wù)。本文將為你提供一份詳細(xì)的指南,幫助你輕松邁出構(gòu)建第一個(gè)AI智能體的第一步,并揭示其背后的原理和技巧。
在構(gòu)建我的第一個(gè)商業(yè) AI 智能體三個(gè)月后,在客戶端演示期間,一切都崩潰了。
本應(yīng)是無(wú)縫的自主工作流程變成了一個(gè)反復(fù)的澄清請(qǐng)求和不一致的決定的尷尬循環(huán)。客戶仍然保持禮貌,但顯然很失望。
他們離開(kāi)后,我花了幾個(gè)小時(shí)分析失敗,發(fā)現(xiàn)我從根本上誤解了智能體架構(gòu)——我構(gòu)建了一個(gè)過(guò)于復(fù)雜的系統(tǒng),決策邊界很差,沒(méi)有明確的推理路徑。
那次失敗改變了我的方法,并成為我解釋這些系統(tǒng)的基礎(chǔ)。一旦你理解了核心原則,構(gòu)建有效的智能體就會(huì)變得異常簡(jiǎn)單。
AI 智能體簡(jiǎn)介
與僅響應(yīng)提示的聊天機(jī)器人不同,智能體會(huì)主動(dòng)并自行完成任務(wù)。它們是讓某人回答您有關(guān)數(shù)據(jù)的問(wèn)題與讓某人實(shí)際為您分析數(shù)據(jù)之間的區(qū)別。
從模型到智能體
在智能體之前,我們將 AI 解決方案構(gòu)建為獨(dú)立的、互不關(guān)聯(lián)的組件 — 一個(gè)模型用于理解文本,另一個(gè)模型用于生成代碼,另一個(gè)模型用于處理圖像。
這種碎片化的方法
- 迫使用戶手動(dòng)管理工作流程;
- 導(dǎo)致在不同系統(tǒng)之間移動(dòng)時(shí)上下文消失;
- 需要為每個(gè)流程步驟構(gòu)建自定義集成;
智能體改變了這種范式。
與處理孤立任務(wù)的傳統(tǒng)模型不同,智能體管理各種功能,同時(shí)保持對(duì)整個(gè)任務(wù)的整體理解。
智能體不僅遵循指示,還會(huì)根據(jù)在此過(guò)程中學(xué)到的信息進(jìn)行調(diào)整并做出有關(guān)后續(xù)步驟的明智決策,類似于我們?nèi)祟惖淖鞣绞健?/p>
智能體的核心優(yōu)勢(shì)
讓我們通過(guò)查看特定任務(wù)來(lái)了解智能體的能力。
傳統(tǒng) AI 將其分為幾個(gè)孤立的步驟 — 總結(jié)、提取關(guān)鍵術(shù)語(yǔ)、對(duì)內(nèi)容進(jìn)行分類和生成見(jiàn)解 — 每個(gè)步驟都需要明確的人工協(xié)調(diào)。
限制不僅在于模型孤立工作,還在于您必須手動(dòng)對(duì)整個(gè)過(guò)程進(jìn)行排序,顯式管理步驟之間的知識(shí)傳遞,并根據(jù)中間結(jié)果獨(dú)立確定需要哪些其他作。
相比之下**,基于智能體的方法可以自主執(zhí)行每個(gè)步驟,而不會(huì)失去更廣泛目標(biāo)的一面**。
智能體智能的構(gòu)建塊
AI 智能體基于三個(gè)基本原則:
- 狀態(tài)管理:智能體的工作記憶跟蹤上下文,了解它所學(xué)到的內(nèi)容和旨在完成的任務(wù);
- 決策:智能體根據(jù)當(dāng)前知識(shí)確定哪種方法有意義;
- 工具使用:智能體知道哪個(gè)工具解決了每個(gè)特定問(wèn)題;
使用 LangGraph 構(gòu)建 AI 智能體
現(xiàn)在您已經(jīng)了解了什么是 AI 智能體以及它們?yōu)槭裁粗匾?,讓我們使?LangGraph(LangChain 用于構(gòu)建強(qiáng)大的 AI 智能體的框架)構(gòu)建一個(gè)智能體。
我真正喜歡 LangGraph 的地方在于,它可以讓您將智能體的思維和行動(dòng)映射為圖表。每個(gè)節(jié)點(diǎn)代表一種能力(如搜索 Web 或編寫代碼),節(jié)點(diǎn)(邊緣)之間的連接控制信息流。
當(dāng)我開(kāi)始構(gòu)建智能體時(shí),這種方法對(duì)我來(lái)說(shuō)很有意義,因?yàn)槲覍?shí)際上可以可視化我的智能體思維過(guò)程。
您的第一個(gè)智能體:Medium Articles Analyzer
讓我們看看如何使用 LangGraph 創(chuàng)建文本分析智能體。
該智能體將閱讀文章,弄清楚它們的內(nèi)容,提取重要元素,并提供干凈的摘要——本質(zhì)上是您的私人研究助理。
設(shè)置環(huán)境
首先,您需要設(shè)置您的開(kāi)發(fā)環(huán)境。
第 1 步 — 創(chuàng)建項(xiàng)目目錄:
mkdir ai_agent_project cd ai_agent_project
第 2 步 — 創(chuàng)建并激活虛擬環(huán)境:
On Windows
python -m venv agent_env agent_env\\Scripts\\activate
On macOS/Linux
python3 -m venv agent_env source agent_env/bin/activate
第 3 步 — 安裝必要的軟件包:
pip install langgraph langchain langchain-openai python-dotenv
第 4 步 — 設(shè)置您的 OpenAI API:
我使用 GPT-4o mini 作為我們智能體的大腦,但您可以將其交換為您喜歡的任何LLM。如果您沒(méi)有 API 密鑰:
- 使用 OpenAI 創(chuàng)建帳戶
- 導(dǎo)航到 API 密鑰部分
- 點(diǎn)擊 “Create new secret key”
- 復(fù)制您的 API 密鑰
第 5 步 — 創(chuàng)建一個(gè) .env 文件
On Windows
echo OPENAI_API_KEY=your-api-key-here > .env
On macOS/Linux
echo “OPENAI_API_KEY=your-api-key-here” > .env
將 ‘your-api-key-here’ 替換為您的 OpenAI API 密鑰。
第 6 步 – 創(chuàng)建名為test_setup.py的測(cè)試文件
python
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
Load environment variables
load_dotenv()
Initialize the ChatOpenAI instance
llm = ChatOpenAI(model=”gpt-4o-mini”)
Test the setup
response = llm.invoke(“Hello! Are you working?”) print(response.content)
第 7 步 — 運(yùn)行測(cè)試:
python test_setup.py
如果您收到回復(fù),恭喜,您的環(huán)境已準(zhǔn)備好構(gòu)建智能體!
創(chuàng)建我們的第一個(gè)智能體
我們的智能體需要內(nèi)存來(lái)跟蹤它的進(jìn)度,我們可以使用 TypedDict 創(chuàng)建它:
The original question or task
class State(TypedDict): text:
Tracks the agent’s thinking and decisions
str classification:
Stores intermediate results from tools
str entities: List[str] summary: str
這種結(jié)構(gòu)讓我們的智能體記住您的請(qǐng)求、跟蹤其推理、存儲(chǔ)工具數(shù)據(jù)并準(zhǔn)備最終答案。使用TypeDict提供類型安全,如果我們存儲(chǔ)的數(shù)據(jù)類型不正確,它會(huì)發(fā)出警告,從而簡(jiǎn)化調(diào)試。
現(xiàn)在我們的智能體有了內(nèi)存,讓我們給它一些思考能力吧!
llm = ChatOpenAI(model=”gpt-4o-mini”, temperature=0)
設(shè)置 Temperature=0 可確保我們的智能體始終選擇最可能的響應(yīng) — 這對(duì)于遵循特定推理模式的智能體至關(guān)重要。作為復(fù)習(xí),溫度充當(dāng) “創(chuàng)造力旋鈕” LLMs:
溫度 = 0:聚焦的確定性響應(yīng)
溫度=1:更多種類、更有創(chuàng)意的輸出
溫度=2:狂野的、有時(shí)不連貫的想法
如果您的智能體做出奇怪的決定,請(qǐng)先檢查您的溫度設(shè)置!
添加智能體的功能
現(xiàn)在,我們將為智能體構(gòu)建專門的工具,每個(gè)工具處理特定的任務(wù)類型。
一、我們的分類能力:
def
summarize_node
(state):
Create a template for the summarization prompt
This tells the model to summarize the input text in one sentence
summarization_prompt = PromptTemplate.from_template(
“””Summarize the following text in one short sentence.
Text: {input}
Summary:”””
)
Create a chain by connecting the prompt template to the language model
The “|” operator pipes the output of the prompt into the model
chain = summarization_prompt | llm
Execute the chain with the input text from the state dictionary
This passes the text to be summarized to the model
response = chain.invoke({“input”: state[“input”]})
Return a dictionary with the summary extracted from the model’s response
This will be merged into the agent’s state
return {“summary”: response.content}
此功能將文檔提煉為其要點(diǎn)的簡(jiǎn)明摘要。
這些技能結(jié)合起來(lái),使我們的智能體能夠理解內(nèi)容類型、識(shí)別關(guān)鍵信息并創(chuàng)建易于理解的摘要 — 每個(gè)函數(shù)都遵循相同的模式,即獲取當(dāng)前狀態(tài)、處理當(dāng)前狀態(tài)并將有用信息返回給下一個(gè)函數(shù)。
完成智能體結(jié)構(gòu)
現(xiàn)在,我們將這些功能連接到一個(gè)協(xié)調(diào)的工作流中:
workflow = StateGraph(State)
Add nodes to the graph
workflow.add_node(“classification_node”, classification_node)
workflow.add_node(“entity_extraction”, entity_extraction_node)
workflow.add_node(“summarization”, summarization_node)
Add edges to the graph
workflow.set_entry_point(“classification_node”) # Set the entry point of the graph
workflow.add_edge(“classification_node”, “entity_extraction”)
workflow.add_edge(“entity_extraction”, “summarization”)
workflow.add_edge(“summarization”, END)
Compile the graph
app = workflow.compile()
您已經(jīng)構(gòu)建了一個(gè)智能體,該智能體按協(xié)調(diào)的順序從分類到實(shí)體提取再到摘要,使其能夠理解文本類型、識(shí)別重要實(shí)體、創(chuàng)建摘要,然后完成該過(guò)程。
智能體在行動(dòng)
現(xiàn)在,讓我們使用示例文本測(cè)試我們的智能體:
Define a sample text about Anthropic’s MCP to test our agent
sample_text = “””
Anthropic’s MCP (Model Context Protocol) is an open-source powerhouse that lets your applications interact effortlessly with APIs across various systems.
“””
Create the initial state with our sample text
state_input = {“text”: sample_text}
Run the agent’s full workflow on our sample text
result = app.invoke(state_input)
Print each component of the result:
– The classification category (News, Blog, Research, or Other)
print(“Classification:”, result[“classification”])
– The extracted entities (People, Organizations, Locations)
print(“\nEntities:”, result[“entities”])
– The generated summary of the text
print(“\nSummary:”, result[“summary”])
運(yùn)行此代碼會(huì)通過(guò)每個(gè)功能處理文本:
分類: 技術(shù)
實(shí)體:[‘Anthropic’, ‘MCP’, ‘Model Context Protocol’]
簡(jiǎn)介: Anthropic 的 MCP 是一種開(kāi)源協(xié)議,支持與各種 API 系統(tǒng)進(jìn)行無(wú)縫應(yīng)用程序交互。
令人印象深刻的不僅僅是最終結(jié)果,還有每個(gè)階段如何建立在前一個(gè)階段之上。這反映了我們自己的閱讀過(guò)程:我們首先確定內(nèi)容類型,然后確定重要的名稱和概念,最后創(chuàng)建連接所有內(nèi)容的心理總結(jié)。
這種智能體構(gòu)建方法遠(yuǎn)遠(yuǎn)超出了我們的技術(shù)示例。您可以將類似的設(shè)置用于:
- 個(gè)人發(fā)展文章 — 對(duì)增長(zhǎng)領(lǐng)域進(jìn)行分類,提取可作的建議,并總結(jié)關(guān)鍵見(jiàn)解;
- 初創(chuàng)公司創(chuàng)始人的故事 — 了解商業(yè)模式、融資模式和增長(zhǎng)戰(zhàn)略;
- 產(chǎn)品評(píng)論 — 識(shí)別功能、品牌和建議;
AI 智能體的局限性
我們的智能體在我們?cè)O(shè)計(jì)的節(jié)點(diǎn)和連接的剛性框架內(nèi)工作。
這種可預(yù)測(cè)的限制了它的適應(yīng)性。與人類不同,智能體遵循固定的路徑,在面對(duì)意外情況時(shí)無(wú)法調(diào)整。
上下文理解是另一個(gè)限制。這個(gè)智能體可以處理文本,但缺乏人類自然掌握的更廣泛的知識(shí)和文化細(xì)微差別。智能體在提供的文本范圍內(nèi)運(yùn)作,盡管添加互聯(lián)網(wǎng)搜索可以幫助補(bǔ)充其知識(shí)。
黑匣子問(wèn)題也存在于智能體系統(tǒng)中。我們看到輸入和輸出,但看不到內(nèi)部決策。像 GPT-o1 或 DeepSeek R1 這樣的推理模型通過(guò)展示它們的思維過(guò)程來(lái)提供更高的透明度,盡管我們?nèi)匀粺o(wú)法完全控制內(nèi)部發(fā)生的事情。
最后,這些系統(tǒng)并非完全自主,需要人工監(jiān)督,尤其是在驗(yàn)證輸出和確保準(zhǔn)確性方面。與任何其他 AI 系統(tǒng)一樣,將 AI 功能與人工監(jiān)督相結(jié)合,可以獲得最佳結(jié)果。
了解這些限制有助于我們構(gòu)建更好的系統(tǒng),并確切地知道何時(shí)需要人類介入。將 AI 功能與人類專業(yè)知識(shí)相結(jié)合,可以獲得最佳結(jié)果。
本文由 @來(lái)學(xué)習(xí)一下 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載
題圖來(lái)自Unsplash,基于CC0協(xié)議
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)
- 目前還沒(méi)評(píng)論,等你發(fā)揮!