自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用LangGraph構(gòu)建你的第一個(gè)AI Agent-附完整代碼

人工智能
隨著大模型能力的不斷突破,未來 AI Agent 將深度融入社會生產(chǎn)與生活,成為數(shù)字化轉(zhuǎn)型的核心驅(qū)動力。開發(fā)者與企業(yè)需關(guān)注場景適配性、數(shù)據(jù)安全和人機(jī)協(xié)作,以最大化其價(jià)值。

AI Agent 指的是有能力主動思考和行動的智能體,能夠以類似人類的方式工作,通過大模型來“理解”用戶需求,主動“規(guī)劃”以達(dá)成目標(biāo),使用各種“工具”來完成任務(wù),并最終“行動”執(zhí)行這些任務(wù)。

從模型到 Agent

在 Agent 出現(xiàn)之前,我們將 AI 模型建為獨(dú)立且互不關(guān)聯(lián)的組件——一個(gè)模型用于理解文本,一個(gè)模型用于生成代碼,還有一個(gè)模型用于處理圖像。

這種碎片化的方法

  1. 迫使用戶手動管理工作流程
  2. 導(dǎo)致在不同系統(tǒng)之間切換時(shí)上下文信息消失
  3. 需要為每個(gè)流程步驟集成 ai 模型

Agent 的出現(xiàn)就是為了解決這一碎片問題。

與處理孤立任務(wù)的傳統(tǒng)模型不同,Agent 能夠管理各種功能,同時(shí)保持對整個(gè)任務(wù)的全面理解,它通過賦予大型語言模型 (LLMs) 訪問工具和知識來擴(kuò)展其能力,使模型能夠連貫執(zhí)行一系列操作。

使用 LangGraph 構(gòu)建 AI 代理

現(xiàn)在讓我們使用 LangGraph來構(gòu)建一個(gè)文本分析 agent。

LangGraph 是 LangChain 生態(tài)系統(tǒng)中的一個(gè)開源框架,專門用于構(gòu)建基于大型語言模型(LLM)的復(fù)雜應(yīng)用程序。它通過 圖結(jié)構(gòu)(Graph) 將應(yīng)用邏輯組織為有向圖,提供靈活的流程控制和狀態(tài)管理能力,適用于開發(fā)多智能體(Multi-Agent)、多步驟、動態(tài)交互的智能系統(tǒng)。

該 Agent 將根據(jù)文章內(nèi)容,進(jìn)行歸納分類,提取重要元素并給出摘要信息。

開發(fā)環(huán)境準(zhǔn)備

Python:3.11+

1. 導(dǎo)入必要的庫

pip install langgraph langchain langchain-openai python-dotenv

2. import 準(zhǔn)備

import os
from typing import TypedDict, List
from langgraph.graph import StateGraph, END
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage
  • StateGraph 管理代理組件之間的信息流
  • PromptTemplate 創(chuàng)建一致的指令
  • ChatOpenAI 連接到 OpenAI 的字符模型,為 agent 提供思維支持

3. 定義 State 類,記錄 Agent 數(shù)據(jù)

定義一個(gè)名為 'State' 的 TypedDict,用于結(jié)構(gòu)化個(gè)工具方法的狀態(tài)數(shù)據(jù)

from typing import TypedDict, List

# 定義一個(gè)名為 'State' 的TypedDict,用于結(jié)構(gòu)化表示狀態(tài)數(shù)據(jù)
class State(TypedDict):
    text: str  # 存儲原始輸入文本
    classification: str  # 分類結(jié)果(例如類別標(biāo)簽)
    entities: List[str]  # 存儲提取的實(shí)體列表(如命名實(shí)體)
    summary: str  # 存儲文本的摘要版本

4. 創(chuàng)建 llm 對象

llm = ChatOpenAI(model="qwen-plus", temperature=0, api_key="",
                 base_url="")

temperature 參數(shù)很重要

  • temperature=0:專注、確定性的響應(yīng)
  • temperature=1:更加多樣化、更具創(chuàng)造力的輸出
  • temperature=2:天馬行空、有時(shí)語無倫次的想法

api_key 是訪問 AI 服務(wù)(如 OpenAI、DeepSeek 等)的身份憑證,用于:

  • 身份驗(yàn)證:確保請求來自授權(quán)用戶。
  • 權(quán)限控制:限制調(diào)用接口的范圍(如僅允許特定模型或功能)。
  • 計(jì)費(fèi)與監(jiān)控:跟蹤 API 調(diào)用次數(shù)、費(fèi)用和使用模式。

base_url 是訪問 AI 服務(wù)的連接,不同 AI 服務(wù)商的 base_url 不一樣。

5. 添加 agent 功能

現(xiàn)在,我們將為 Agent 構(gòu)建專用工具方法,每個(gè)工具分別處理特定的任務(wù)類型。

分類功能

首先,是我們的分類功能:

def classification_node(state: State):
    """
    將文本分類到預(yù)定義的類別中。

    參數(shù):
        state (State): 包含待分類文本的當(dāng)前狀態(tài)字典

    返回:
        dict: 包含"分類"鍵的字典,值為分類結(jié)果

    分類類別:
        - 新聞: 事實(shí)性報(bào)道當(dāng)前事件
        - 博客: 個(gè)人或非正式的網(wǎng)絡(luò)寫作
        - 研究: 學(xué)術(shù)或科學(xué)內(nèi)容
        - 其他: 不符合上述類別的內(nèi)容
    """

    # 創(chuàng)建提示模板,要求模型將文本分類到指定類別
    prompt = PromptTemplate(
        input_variables=["text"],
        template="將以下文本分類到以下類別之一:新聞、博客、研究、其他。\n\n文本:{text}\n\n類別:"
    )

    # 使用狀態(tài)中的文本格式化提示并包裝為HumanMessage
    message = HumanMessage(content=prompt.format(text=state["text"]))

    # 調(diào)用語言模型進(jìn)行分類
    classification = llm.invoke([message]).content.strip()

    # 返回分類結(jié)果字典
    return {"classification": classification}

此函數(shù)使用提示模板向我們的 AI 模型發(fā)出清晰的指令。該函數(shù)獲取當(dāng)前狀態(tài)(包含我們正在分析的文本)并返回其分類。

實(shí)體提取功能

接下來是我們的實(shí)體提取功能:

def entity_extraction_node(state: State):
    # 從文本中識別并提取命名實(shí)體(按人物、組織、地點(diǎn)分類)

    # 創(chuàng)建實(shí)體提取提示模板,要求返回逗號分隔的實(shí)體列表
    prompt = PromptTemplate(
        input_variables=["text"],
        template="從以下文本中提取所有實(shí)體(人物、組織、地點(diǎn))。以逗號分隔列表形式返回結(jié)果。\n\n文本:{text}\n\n實(shí)體:"
    )

    # 使用文本格式化提示并包裝為HumanMessage
    message = HumanMessage(content=prompt.format(text=state["text"]))

    # 調(diào)用模型獲取響應(yīng),清理空白并拆分為列表
    entities = llm.invoke([message]).content.strip().split(", ")

    # 返回包含實(shí)體列表的字典
    return {"entities": entities}

此函數(shù)處理文檔并返回關(guān)鍵實(shí)體列表,例如重要名稱、組織和地點(diǎn)。

摘要功能

最后,我們的摘要功能

def summarize_node(state: State):
    # 創(chuàng)建摘要提示模板,要求用一句話總結(jié)輸入文本

    # 使用模板創(chuàng)建鏈?zhǔn)教幚砹鞒蹋ㄌ崾灸0?→ 語言模型)
    summarization_prompt = PromptTemplate.from_template(
        """用一句話總結(jié)以下文本。\n\n文本:{text}\n\n摘要:"""
    )

    # 構(gòu)建處理鏈:提示模板 → 語言模型
    chain = summarization_prompt | llm

    # 執(zhí)行處理流程,傳入文本進(jìn)行摘要生成
    response = chain.invoke({"text": state["text"]})

    # 返回包含摘要結(jié)果的字典
    return {"summary": response.content}

此功能將文檔提煉為要點(diǎn)的簡明摘要。

這些技能相結(jié)合,使我們的代理能夠理解內(nèi)容類型、識別關(guān)鍵信息并創(chuàng)建易于理解的摘要——每個(gè)功能都遵循相同的模式:獲取當(dāng)前狀態(tài)、進(jìn)行處理,并將有用信息返回給下一個(gè)功能

7. 創(chuàng)建狀態(tài)圖對象

# 創(chuàng)建狀態(tài)圖對象
workflow = StateGraph(State)

# 添加處理節(jié)點(diǎn)到流程圖
workflow.add_node("classification_node", classification_node)  # 分類節(jié)點(diǎn)
workflow.add_node("entity_extraction", entity_extraction_node)  # 實(shí)體提取節(jié)點(diǎn)
workflow.add_node("summarization", summarize_node)  # 摘要生成節(jié)點(diǎn)

# 設(shè)置流程入口點(diǎn)并定義執(zhí)行路徑
workflow.set_entry_point("classification_node")  # 設(shè)置初始執(zhí)行節(jié)點(diǎn)
workflow.add_edge("classification_node", "entity_extraction")  # 分類 → 實(shí)體提取
workflow.add_edge("entity_extraction", "summarization")  # 實(shí)體提取 → 摘要生成
workflow.add_edge("summarization", END)  # 摘要生成 → 流程結(jié)束

# 編譯工作流為可執(zhí)行應(yīng)用
app = workflow.compile()

OK,到之類我們就已經(jīng)構(gòu)建了一個(gè)完整的用于文章歸納總結(jié)摘要的 Agent,它能夠按照協(xié)調(diào)的順序完成從分類到實(shí)體提取再到摘要的整個(gè)過程,使其能夠理解文本類型、識別重要實(shí)體、創(chuàng)建摘要,然后完成整個(gè)流程。

8. 實(shí)戰(zhàn)一下

現(xiàn)在讓我們用示例文本測試我們的代理:

# 測試用例:關(guān)于Anthropic的MCP技術(shù)說明文本
sample_text = """
Anthropic的MCP(Model Context Protocol)是一個(gè)開源的強(qiáng)大工具,允許應(yīng)用程序與各種系統(tǒng)的API進(jìn)行無縫交互。
"""

# 創(chuàng)建初始狀態(tài)對象
state_input = {"text": sample_text}

# 執(zhí)行完整工作流處理
result = app.invoke(state_input)

# 輸出處理結(jié)果
print("分類結(jié)果:", result["classification"])
print("\n實(shí)體列表:", result["entities"])
print("\n摘要內(nèi)容:", result["summary"])

運(yùn)行結(jié)果

分類結(jié)果: 研究

理由:該文本提到了Anthropic的MCP(Model Context Protocol),并描述了其功能和特性。這種內(nèi)容通常與技術(shù)研究、創(chuàng)新工具或方法相關(guān),因此分類為“研究”較為合適。如果該文本出現(xiàn)在具體的產(chǎn)品新聞或個(gè)人觀點(diǎn)分享的語境下,也可能屬于其他類別,但從當(dāng)前表述來看,“研究”是最貼切的分類。

實(shí)體列表: ['Anthropic', 'MCP', 'Model Context Protocol']

摘要內(nèi)容: Anthropic的MCP是一個(gè)開源工具,可實(shí)現(xiàn)應(yīng)用程序與系統(tǒng)API的無縫交互。

最后

隨著大模型能力的不斷突破,未來 AI Agent 將深度融入社會生產(chǎn)與生活,成為數(shù)字化轉(zhuǎn)型的核心驅(qū)動力。開發(fā)者與企業(yè)需關(guān)注場景適配性、數(shù)據(jù)安全和人機(jī)協(xié)作,以最大化其價(jià)值。

責(zé)任編輯:武曉燕 來源: 程序員wayn
相關(guān)推薦

2013-01-14 09:44:58

JavaScriptJSJS框架

2018-01-31 15:45:07

前端Vue.js組件

2017-11-21 09:20:06

深度學(xué)習(xí)TensorFlow游戲AI

2022-10-17 10:28:05

Web 組件代碼

2014-12-24 11:34:23

CoreOSWordPress集群部署

2018-08-22 17:32:45

2020-07-07 07:55:53

web app數(shù)據(jù)科學(xué)機(jī)器學(xué)習(xí)

2023-06-01 08:24:08

OpenAIChatGPTPython

2013-12-19 09:46:04

垃圾收集器

2018-10-15 10:10:41

Linux內(nèi)核補(bǔ)丁

2010-12-07 16:53:43

商業(yè)智能

2025-01-13 00:00:10

SwaggerAI項(xiàng)目

2009-06-26 16:07:43

MyEclipse開發(fā)Hibernate程序

2011-08-03 13:15:50

Ruby

2016-08-24 15:12:41

LXDLinux容器

2019-12-31 08:00:00

DebianLinuxApple Swift

2016-08-05 12:58:44

GitLinux開源

2014-07-24 14:35:26

Linux內(nèi)核模塊

2021-03-24 08:00:44

項(xiàng)目Vue 3Typescript

2022-11-15 08:49:15

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號