上一篇文章:構建本地 AI 智能體:LangGraph、AI 智能體和 Ollama 使用指南-1
Ollama 是一個開源項目,它使在本地機器上運行大型語言模型(LLM)變得簡單且用戶友好。它提供了一個用戶友好的平臺,簡化了 LLM 技術的復雜性,使其易于訪問和定制,適用于希望利用 AI 力量而無需廣泛的技術專業知識的用戶。
它易于安裝。此外,我們有一系列模型和一套全面的功能和功能,旨在增強用戶體驗。
關鍵特點:
Ollama 社區是一個充滿活力、以項目為驅動的社區,促進協作和創新,有一個活躍的開源社區增強其開發、工具和集成。
在這個演示中,我們將使用qwen2:7b 模型創建一個簡單的智能體示例。這個智能體可以使用 Tavily 搜索 API 搜索網絡并生成響應。
我們將從安裝 Langgraph 開始,這是一個設計用于使用 LLM 構建有狀態、多參與者應用程序的庫,非常適合創建智能體和多智能體工作流程。LangGraph 受到 Pregel、Apache Beam 和 NetworkX 的啟發,由 LangChain Inc. 開發,可以獨立于 LangChain 使用。
我們將使用qwen2:7b 作為我們的 LLM 模型,該模型將與 Ollama 和 Tavily 的搜索 API 集成。Tavily 的 API 針對 LLM 進行了優化,提供了事實性、高效、持久的搜索體驗。
開始安裝langgraph包:
pip install -U langgraph
如有需要,安裝其他包:
pip install langchain-openai langchainhub
完成安裝后,我們將進入下一個關鍵步驟:提供 Travily API 密鑰。
注冊 Travily 并生成 API 密鑰。
export TAVILY_API_KEY='apikeygoeshere'
現在,我們將運行以下代碼來獲取模型。請嘗試使用 Llama 或任何其他版本的 qwen2:7b。
ollama pull qwen2:7b
導入構建智能體所需的所有必要庫。
from langchain import hubfrom langchain_community.tools.tavily_search import TavilySearchResultsfrom langchain.prompts import PromptTemplatefrom langgraph.prebuilt import create_react_agentfrom langchain_openai import ChatOpenAIfrom langchain_core.output_parsers import JsonOutputParserfrom langchain_community.chat_models import ChatOllama
我們將首先定義我們想要使用的工具,并將工具與 llm 綁定。在這個簡單的例子中,我們將使用通過 Tavily 提供的內置搜索工具。
示例代碼如下所示:
import os# 設置環境變量'TAVILY_API_KEY',將其值設為一個API密鑰字符串# 這個密鑰用于認證和授權應用程序訪問Tavily API的服務# 通過將API密鑰存儲在環境變量中,可以提高代碼的安全性和可維護性,避免硬編碼敏感信息os.environ['TAVILY_API_KEY'] = 'tvly-xxxxxxxxxx'# 初始化ChatOpenAI實例,設置以下參數:# model參數指定使用的語言模型為'qwen2:7b'# temperature參數設置為0.0,這意味著生成的響應將更加確定和基于模型的知識,減少隨機性# api_key參數設置為'ollama'# base_url參數指定了與模型交互的API基礎URL,此處指向本地主機上的一個特定端口和路徑llm = ChatOpenAI(model='qwen2:7b', temperature=0.0, api_key='ollama', base_url='http://localhost:11434/v1')# 創建工具列表,其中包含一個TavilySearchResults實例,用于執行搜索操作# max_results參數設置為3,這意味著每次搜索將返回最多3個結果tools = [TavilySearchResults(max_results=3)]
下面的代碼片段檢索一個提示模板并以可讀格式打印。然后可以根據需要使用或修改此模板。
# 從LangChain的Hub中拉取一個預定義的prompt模板prompt = hub.pull('wfh/react-agent-executor')# 使用pretty_print()方法以更易讀的格式打印模板內容prompt.pretty_print()
使用前面創建的語言模型(llm)、一組工具(tools)和一個提示模板(prompt)創建一個智能體(agent)。
# 創建agent對象agent = create_react_agent(llm, tools, messages_modifier=prompt)from IPython.display import Image, display# agent.get_graph()方法返回代理的內部狀態圖,描述了代理的組件和它們之間的關系# draw_mermaid_png()方法將狀態圖轉換為PNG格式的圖像,便于可視化展示display(Image(agent.get_graph().draw_mermaid_png()))
這段代碼的作用是在Jupyter Notebook中顯示智能體的結構和工作流程圖,幫助理解和調試智能體的行為。
agent 節點會使用消息列表調用語言模型。如果生成的 AIMessage 包含 tool_calls,則圖將調用 tools 節點。tools 節點執行工具(每個 tool_call 執行一個工具),并將響應作為 ToolMessage 對象添加到消息列表中。然后 agent 節點再次調用語言模型。這個過程會一直重復,直到響應中不再有 tool_calls。然后 agent 返回包含鍵 'messages' 的字典,其中包含了完整的消息列表。
# 調用agent的invoke方法response = agent.invoke({'messages': [('user', '解釋人工智能')]})# 遍歷響應字典中'messages'鍵對應的列表,該列表包含了代理生成的響應消息for message in response['messages']: print(message.content)
生成如下響應:
#記錄夏日生活點滴#