在前面的 API 系列文章中,我們學會了如何建立各種功能的 API 端點。但這些只是「工具」,真正的智慧來自於如何智能地使用這些工具。
今天開始,我們要進入 LangChain 的世界,看看如何建構一個真正的智能助手。
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
)
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()
系統會追蹤各種內容狀態: