星期日, 20 7 月, 2025
No Result
View All Result
AI TAIWAN 台灣人工智慧中心
  • Home
  • AI 綜合新聞
  • AI 自動化與 AI Agents
  • AI 智慧產業
  • 機器學習與應用
  • 自然語言處理
  • 神經連結和腦機接口
  • 機器人與自動化
  • 道德與法規
  • 安全
AI TAIWAN 台灣人工智慧中心
  • Home
  • AI 綜合新聞
  • AI 自動化與 AI Agents
  • AI 智慧產業
  • 機器學習與應用
  • 自然語言處理
  • 神經連結和腦機接口
  • 機器人與自動化
  • 道德與法規
  • 安全
No Result
View All Result
AI TAIWAN 台灣人工智慧中心
No Result
View All Result
Your Ad
Home AI 綜合新聞

建立基於 AI 代理的系統與 LangGraph:添加持久性和串流(逐步指南)

2025-02-02
in AI 綜合新聞
0 0
0
建立基於 AI 代理的系統與 LangGraph:添加持久性和串流(逐步指南)
Share on FacebookShare on Twitter
Your Ad


在我們之前的教學中,我們建立了一個能夠透過網路回答問題的人工智慧代理。然而,當我們為長時間運行的任務建立代理時,有兩個重要的概念需要考慮:持久性和串流。持久性讓你可以在任何時刻保存代理的狀態,這樣在未來的互動中可以從該狀態繼續。這對於長時間運行的應用程式來說非常重要。另一方面,串流則讓你能夠即時發送代理在任何時刻的行動信號,提供透明度和對其行動的控制。在本教程中,我們將透過加入這些強大的功能來增強我們的代理。

設置代理

讓我們開始重新創建我們的代理。我們將載入必要的環境變數,安裝並導入所需的庫,設置 Tavily 搜索工具,定義代理狀態,最後建立代理。

pip install langgraph==0.2.53 langgraph-checkpoint==2.0.6 langgraph-sdk==0.1.36 langchain-groq langchain-community langgraph-checkpoint-sqlite==2.0.1
import os
os.environ[‘TAVILY_API_KEY’] = “<TAVILY_API_KEY>”
os.environ[‘GROQ_API_KEY’] = “<GROQ_API_KEY>”

from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator
from langchain_core.messages import AnyMessage, SystemMessage, HumanMessage, ToolMessage
from langchain_groq import ChatGroq
from langchain_community.tools.tavily_search import TavilySearchResults

tool = TavilySearchResults(max_results=2)

class AgentState(TypedDict):
messages: Annotated[list[AnyMessage], operator.add]

class Agent:
def __init__(self, model, tools, system=””):
self.system = system
graph = StateGraph(AgentState)
graph.add_node(“llm”, self.call_openai)
graph.add_node(“action”, self.take_action)
graph.add_conditional_edges(“llm”, self.exists_action, True: “action”, False: END)
graph.add_edge(“action”, “llm”)
graph.set_entry_point(“llm”)
self.graph = graph.compile()
self.tools = t.name: t for t in tools
self.model = model.bind_tools(tools)

def call_openai(self, state: AgentState):
messages = state[‘messages’]
if self.system:
messages = [SystemMessage(content=self.system)] + messages
message = self.model.invoke(messages)
return ‘messages’: [message]

def exists_action(self, state: AgentState):
result = state[‘messages’][-1]
return len(result.tool_calls) > 0

def take_action(self, state: AgentState):
tool_calls = state[‘messages’][-1].tool_calls
results = []
for t in tool_calls:
print(f”Calling: t”)
result = self.tools[t[‘name’]].invoke(t[‘args’])
results.append(ToolMessage(tool_call_id=t[‘id’], name=t[‘name’], content=str(result)))
print(“Back to the model!”)
return ‘messages’: results

加入持久性

為了加入持久性,我們將使用 LangGraph 的檢查點功能。檢查點會在每個節點之後和之間保存代理的狀態。在本教程中,我們將使用 SqliteSaver,一個簡單的檢查點,利用 SQLite 這個內建的資料庫。雖然我們將使用內存資料庫以簡化操作,但你也可以輕鬆地將其連接到外部資料庫,或使用其他檢查點如 Redis 或 Postgres 來獲得更穩定的持久性。

from langgraph.checkpoint.sqlite import SqliteSaver
import sqlite3
sqlite_conn = sqlite3.connect(“checkpoints.sqlite”,check_same_thread=False)
memory = SqliteSaver(sqlite_conn)

接下來,我們將修改我們的代理以接受檢查點:

class Agent:
def __init__(self, model, tools, checkpointer, system=””):
# 其他部分保持不變
self.graph = graph.compile(checkpointer=checkpointer)
# 其他部分保持不變

現在,我們可以創建一個啟用持久性的代理:

prompt = “””你是一個聰明的研究助手。使用搜索引擎查找信息。 \
你可以進行多次調用(無論是一起還是按順序)。 \
只有在確定你想要的信息時,才可以查找信息。 \
如果你需要在問後續問題之前查找一些信息,你是可以這樣做的!
“””
model = ChatGroq(model=”Llama-3.3-70b-Specdec”)
bot = Agent(model, [tool], system=prompt, checkpointer=memory)

加入串流

串流對於即時更新是必不可少的。我們將專注於兩種類型的串流:

1. 串流消息:發送中間消息,如 AI 決策和工具結果。

2. 串流標記:從 LLM 的回應中串流單個標記。讓我們先開始串流消息。我們將創建一條人類消息,並使用串流方法即時觀察代理的行動。

messages = [HumanMessage(content=”德克薩斯州的天氣如何?”)]
thread = “configurable”: “thread_id”: “1”
for event in bot.graph.stream(“messages”: messages, thread):
for v in event.values():
print(v[‘messages’])

最終輸出:德克薩斯州的當前天氣是晴天,氣溫為 19.4°C (66.9°F),風速為 4.3 mph (6.8 kph)…..

當你運行這個時,你會看到一系列結果。首先是一條 AI 消息指示代理調用 Tavily,接著是一條工具消息顯示搜索結果,最後是一條 AI 消息回答問題。

理解線程 ID

線程 ID 是線程配置中的一個重要部分。它允許代理與不同的用戶或上下文保持獨立的對話。通過為每個對話分配唯一的線程 ID,代理可以同時跟踪多個互動,而不會混淆。

例如,讓我們繼續對話,問:“洛杉磯的天氣怎麼樣?”使用相同的線程 ID:

messages = [HumanMessage(content=”洛杉磯的天氣怎麼樣?”)]
thread = “configurable”: “thread_id”: “1”
for event in bot.graph.stream(“messages”: messages, thread):
for v in event.values():
print(v)

最終輸出:洛杉磯的當前天氣是晴天,氣溫為 17.2°C (63.0°F),風速為 2.2 mph (3.6 kph) ….

代理推斷我們在詢問天氣,這得益於持久性。為了驗證,讓我們問:“哪個更暖和?”:

messages = [HumanMessage(content=”哪個更暖和?”)]
thread = “configurable”: “thread_id”: “1”
for event in bot.graph.stream(“messages”: messages, thread):
for v in event.values():
print(v)

最終輸出:德克薩斯州比洛杉磯暖和。德克薩斯州的當前氣溫為 19.4°C (66.9°F),而洛杉磯的當前氣溫為 17.2°C (63.0°F)

代理正確比較了德克薩斯州和洛杉磯的天氣。為了測試持久性是否能保持對話的獨立性,讓我們用不同的線程 ID 提問相同的問題:

messages = [HumanMessage(content=”哪個更暖和?”)]
thread = “configurable”: “thread_id”: “2”
for event in bot.graph.stream(“messages”: messages, thread):
for v in event.values():
print(v)

輸出:我需要更多信息來回答這個問題。你能提供更多上下文或具體說明你在比較哪兩樣東西嗎?

這次,代理感到困惑,因為它無法訪問之前對話的歷史。

串流標記

要串流標記,我們將使用 astream_events 方法,這是一個異步方法。我們還將切換到異步檢查點。

from langgraph.checkpoint.sqlite.aio import AsyncSqliteSaver

async with AsyncSqliteSaver.from_conn_string(“:memory:”) as checkpointer:
abot = Agent(model, [tool], system=prompt, checkpointer=checkpointer)
messages = [HumanMessage(content=”舊金山的天氣如何?”)]
thread = “configurable”: “thread_id”: “4”
async for event in abot.graph.astream_events(“messages”: messages, thread, version=”v1″):
kind = event[“event”]
if kind == “on_chat_model_stream”:
content = event[“data”][“chunk”].content
if content:
# 在 OpenAI 的上下文中,空內容意味著
# 模型正在請求調用一個工具。
# 所以我們只打印非空內容
print(content, end=”|”)

這將即時串流標記,讓你能夠實時查看代理的思考過程。

結論

通過加入持久性和串流,我們顯著增強了我們的人工智慧代理的能力。持久性使代理能夠在互動中保持上下文,而串流則提供了對其行動的即時洞察。這些功能對於構建生產就緒的應用程式尤其重要,特別是那些涉及多個用戶或人機互動的應用。

在下一個教程中,我們將深入探討人機互動,其中持久性在促進人類與人工智慧代理之間的無縫協作中扮演著重要角色。敬請期待!

參考資料:

(DeepLearning.ai) https://learn.deeplearning.ai/courses/ai-agents-in-langgraph

此外,別忘了在 Twitter 上關注我們,並加入我們的 Telegram 頻道和 LinkedIn 群組。別忘了加入我們的 75k+ ML SubReddit。

🚨 介紹 IntellAgent:一個開源的多代理框架,用於評估複雜的對話 AI 系統(推廣)



新聞來源

本文由 AI 台灣 運用 AI 技術編撰,內容僅供參考,請自行核實相關資訊。
歡迎加入我們的 AI TAIWAN 台灣人工智慧中心 FB 社團,
隨時掌握最新 AI 動態與實用資訊!

Tags: LangGraph添加持久性和串流逐步指南代理的系統與建立基於
Previous Post

清華大學的這篇AI論文提出T1以通過鼓勵探索來擴展強化學習並理解推理擴展

Next Post

Proprio CEO 描繪外科機器人未來,外科醫生短缺迫在眉睫

Related Posts

中國教育改革人工智慧助力創新人才培育
AI 綜合新聞

中國教育改革人工智慧助力創新人才培育

2025-06-11
AI 助力中風患者康復Devon 的 SAMueL-2 計畫創新突破
AI 綜合新聞

AI 助力中風患者康復Devon 的 SAMueL-2 計畫創新突破

2025-04-24
2027 年 AI 預測人類水平 AI 的全新里程碑
AI 綜合新聞

2027 年 AI 預測人類水平 AI 的全新里程碑

2025-04-21
全球AI教育市場蓬勃發展智慧學習工具引領新趨勢
AI 綜合新聞

全球AI教育市場蓬勃發展智慧學習工具引領新趨勢

2025-04-21
AI 技術對人類智能的影響我們在失去什麼?
AI 綜合新聞

AI 技術對人類智能的影響我們在失去什麼?

2025-04-20
人工智慧重塑遊戲開發遊戲未來從現在開始
AI 綜合新聞

人工智慧重塑遊戲開發遊戲未來從現在開始

2025-04-18
Next Post
Proprio CEO 描繪外科機器人未來,外科醫生短缺迫在眉睫

Proprio CEO 描繪外科機器人未來,外科醫生短缺迫在眉睫

5個從我的數據科學旅程中學到的關鍵技巧 | 由Federico Rucci | 2025年2月

5個從我的數據科學旅程中學到的關鍵技巧 | 由Federico Rucci | 2025年2月

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Archives

  • 2025 年 6 月
  • 2025 年 4 月
  • 2025 年 3 月
  • 2025 年 2 月
  • 2025 年 1 月
  • 2024 年 12 月
  • 2024 年 11 月
  • 2024 年 10 月
  • 2024 年 9 月
  • 2024 年 8 月
  • 2024 年 7 月
  • 2024 年 6 月
  • 2024 年 5 月
  • 2024 年 4 月
  • 2024 年 3 月
  • 2024 年 2 月
  • 2023 年 10 月
  • 2023 年 9 月
  • 2023 年 8 月
  • 2023 年 7 月
  • 2023 年 5 月
  • 2023 年 3 月
  • 2023 年 1 月
  • 2022 年 12 月
  • 2022 年 11 月
  • 2022 年 5 月
  • 2022 年 4 月
  • 2022 年 1 月
  • 2021 年 11 月
  • 2021 年 8 月
  • 2021 年 5 月
  • 2021 年 3 月
  • 2021 年 1 月
  • 2020 年 12 月
  • 2020 年 10 月
  • 2020 年 9 月
  • 2019 年 7 月
  • 2018 年 11 月

Categories

  • AI 智慧產業
  • AI 綜合新聞
  • AI 自動化與 AI Agents
  • 安全
  • 機器人與自動化
  • 機器學習與應用
  • 神經連結和腦機接口
  • 自然語言處理
  • 道德與法規
Your Ad
  • 關於我們
  • 廣告合作
  • 免責聲明
  • 隱私權政策
  • DMCA
  • Cookie 隱私權政策
  • 條款與條件
  • 聯絡我們
AI TAIWAN

版權 © 2024 AI TAIWAN.
AI TAIWAN 對外部網站的內容不負任何責任。

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Home
  • AI 綜合新聞
  • AI 自動化與 AI Agents
  • AI 智慧產業
  • 機器學習與應用
  • 自然語言處理
  • 神經連結和腦機接口
  • 機器人與自動化
  • 道德與法規
  • 安全

版權 © 2024 AI TAIWAN.
AI TAIWAN 對外部網站的內容不負任何責任。