iT邦幫忙

2025 iThome 鐵人賽

DAY 14
0

建構智能助手的大腦 — LangChain Agent 系統架構解析 (1)

在前面的 API 系列文章中,我們學會了如何建立各種功能的 API 端點。但這些只是「工具」,真正的智慧來自於如何智能地使用這些工具

今天開始,我們要進入 LangChain 的世界,看看如何建構一個真正的智能助手。


功能簡介

LangChain Agent 系統是整個智能助手的核心大腦,它包含:

  • 自定義 LLM 包裝器:讓 Gemini 可以與 LangChain 框架完美整合
  • 工具註冊系統:管理十多種不同的智能工具
  • Agent 決策引擎:根據用戶輸入智能選擇並執行合適的工具
  • 錯誤處理機制:多行自定義錯誤處理器,確保系統穩定運作

核心程式碼解析

LangChain Agent 初始化

class LangChainAgentApp(customtkinter.CTk):
    def __init__(self):
        super().__init__()
        
        # 基本窗口設置
        self.title("LangChain Agent 助手")
        self.geometry("1200x700")
        
        # 初始化變量
        self.chat_history = []
        self.message_queue = queue.Queue()
        self.agent = None
        self.system_tools = None
        
        # 檔案處理相關變量
        self.waiting_for_file_action = False
        self.last_uploaded_file_content = ""
        self.last_uploaded_filename = ""
        self.last_analysis_result = ""
        
        # 初始化 LangChain 組件
        self._initialize_langchain()
        
        # 建立GUI
        self._create_gui()

LangChain 組件初始化

def _initialize_langchain(self):
    """初始化 LangChain 組件"""
    try:
        # Gemini API 設定
        api_key = os.getenv('API_KEY')
        
        # 創建自定義 LLM
        self.gemini_llm = GeminiLLM(
            api_key=api_key, 
            model_name=os.environ.get("GEMINI_MODEL", "models/gemini-2.5-flash")
        )
        
        # 初始化系統工具
        self.system_tools = SystemTools(app_instance=self)
        
        # 定義工具列表 - 多種智能工具
        tools = [
            Tool(name="內容生成工具", func=self.system_tools.generate_content_tool, ...),
            Tool(name="開啟小畫家", func=self.system_tools.open_paint_tool, ...),
            # ... 其他工具
        ]
        
        # 初始化 Agent
        self.agent = initialize_agent(
            tools, 
            self.gemini_llm, 
            agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, 
            verbose=True,
            handle_parsing_errors=custom_error_handler
        )

系統架構特色

1. 模組化設計

  • LLM 層:處理自然語言理解與生成
  • Agent 層:負責決策與工具選擇
  • Tool 層:執行具體的功能操作
  • UI 層:提供使用者互動介面

2. 非同步處理

def start_agent_call(self):
    """啟動 Agent 處理用戶輸入"""
    question = self.entry.get().strip()
    if question:
        self._append_to_history("使用者", question)
        self.message_queue.put(("Agent", "正在處理…"))
        
        # 啟動新執行緒來呼叫 Agent
        thread = threading.Thread(target=self.get_agent_response, args=(question,))
        thread.start()

3. 智能狀態管理

系統會追蹤各種內容狀態:

  • last_generated_content:最近生成的內容
  • last_analysis_result:最近的分析結果
  • uploaded_file_content:上傳檔案的內容
  • waiting_for_file_action:等待用戶操作的狀態

運作流程

  1. 用戶輸入:透過 GUI 介面接收用戶問題
  2. Agent 分析:LangChain Agent 分析用戶意圖
  3. 工具選擇:從十多種工具中選擇最適合的
  4. 執行操作:呼叫對應的 API 或執行本地操作
  5. 結果回傳:將處理結果顯示給用戶
  6. 狀態更新:更新系統內部狀態供後續使用

上一篇
DAY 13
下一篇
DAY 15
系列文
我的 AI 助手開發16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言