用 python 開發一個可調用工具的 AI Agent,實現電腦配置專業評價

在人工智能時代,AI Agent憑借其強大的任務處理能力,逐漸成為開發人員手中的得力工具。今天,我們就來一起動手,用Python打造一個能夠調用工具的AI Agent,實現根據電腦信息對電腦配置進行專業評價的功能。

一、項目創建與目錄結構

1.1 項目創建

首先,我們需要創建一個新的項目環境。這里使用UV進行項目創建。

uv init demo

項目創建完成后,進入項目文件夾并安裝必要的包, 比如安裝psutil

uv add psutil

安裝的包都會記錄在pypoject.toml, 看看我都安裝了哪些包

[project]
name = "demo"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = ["psutil>=7.0.0","pydantic-ai>=0.2.16","python-dotenv>=1.1.0","setuptools>=80.9.0",
]

1.2 目錄結構

我們的項目目錄結構如下:

demo
├── .venv    
├──.env
├──.gitignore
├──.python-version
├── main.py
├── pyproject.toml
├── README.md
├── tools.py
├── uv.lock

可以看到除了創建項目時uv自動創建的文件及文件夾,這個項目我主要創建了3個文件:

  • main.py:項目的主程序文件,負責整個AI Agent的運行邏輯,包括模型初始化、與AI交互以及結果處理等核心功能。
  • tools.py:存放讀取電腦配置信息的工具函數,為main.py提供電腦配置數據支持。
  • .env:用于存儲敏感信息,此項目主要存儲了OPENROUTER_API_KEY,保證API密鑰的安全,避免在代碼中直接暴露。

二、功能實現與代碼解析

2.1 讀取電腦配置信息(tools.py)

tools.py文件中,我定義了read_pc_info函數,用于獲取電腦的詳細配置信息。該函數的實現依賴platformpsutil庫。

import platform
import psutildef read_pc_info():# 獲取系統信息info = []# CPU信息info.append(f"CPU: {platform.processor()}")info.append(f"CPU Cores: {psutil.cpu_count(logical=False)} physical, {psutil.cpu_count(logical=True)} logical")# 內存信息mem = psutil.virtual_memory()info.append(f"RAM: {mem.total / (1024**3):.1f} GB (Available: {mem.available / (1024**3):.1f} GB)")# 磁盤信息partitions = psutil.disk_partitions()for p in partitions:if p.fstype:usage = psutil.disk_usage(p.mountpoint)info.append(f"Disk {p.device}: {usage.total / (1024**3):.1f} GB ({usage.percent}% used)")# 操作系統信息info.append(f"OS: {platform.system()} {platform.release()}")return "\n".join(info)
  • CPU信息獲取:使用platform.processor()獲取CPU型號,psutil.cpu_count(logical=False)獲取物理核心數,psutil.cpu_count(logical=True)獲取邏輯核心數。
  • 內存信息獲取:通過psutil.virtual_memory()獲取系統內存相關信息,包括總內存和可用內存,并進行單位換算后添加到info列表。
  • 磁盤信息獲取psutil.disk_partitions()獲取磁盤分區信息,遍歷分區,使用psutil.disk_usage(p.mountpoint)獲取每個分區的使用情況,添加到info列表。
  • 操作系統信息獲取platform.system()獲取操作系統名稱,platform.release()獲取操作系統版本號,將其組合添加到info列表。最后,將info列表中的所有信息以換行符連接成字符串返回。

2.2 主程序邏輯(main.py)

main.py文件中,包含了項目的核心運行邏輯。

2.2.1 導入需要的庫和定義系統提示詞
import os
from typing import Optional, Tuple
from dotenv import load_dotenv
from openai import OpenAI
from pydantic_ai import Agent
from pydantic_ai.models.openai import OpenAIModel
from pydantic_ai.providers.openai import OpenAIProvider
from tools import read_pc_info
import logging# 系統提示詞定義
SYSTEM_PROMPT = """
你是一位專業的電腦硬件評測專家,擅長分析電腦配置的性能、適用性和升級潛力。你能夠根據用戶提供的電腦配置信息,給出專業、實用的評價和建議。請以簡潔明了的語言表達觀點,既要考慮技術細節,也要考慮普通用戶的理解能力。
"""

這里先導入了項目所需的各種庫,定義了SYSTEM_PROMPT常量,用于設定AI Agent的角色和能力,讓其以專業電腦硬件評測專家的身份進行回答。

2.2.2 獲取API配置
def get_api_config() -> Tuple[str, str]:"""獲取OpenRouter API配置返回:Tuple[str, str]: (api_key, base_url) API密鑰和基礎URL異常:ValueError: 當API密鑰未設置時EnvironmentError: 當.env文件加載失敗時"""try:if not load_dotenv():logging.warning(".env文件未找到或加載失敗")api_key = os.getenv("OPENROUTER_API_KEY")base_url = 'https://openrouter.ai/api/v1'if not api_key:raise ValueError("請在.env文件中設置OPENROUTER_API_KEY")return api_key, base_urlexcept Exception as e:logging.error(f"獲取API配置失敗: {e}")raise

該函數負責從.env文件中加載OPENROUTER_API_KEY,并返回API密鑰和base_url(因為我用的是openrouter里的模型,所以需要base_url這個參數)。 如果.env文件加載失敗或API密鑰未設置,會拋出相應的異常。

2.2.2 初始化模型
def initialize_model() -> OpenAIModel:"""初始化AI大模型實例返回:OpenAIModel: 初始化好的模型實例異常:RuntimeError: 當模型初始化失敗時"""try:api_key, base_url = get_api_config()provider = OpenAIProvider(base_url=base_url, api_key=api_key)return OpenAIModel('qwen/qwen-2.5-72b-instruct:free',provider=provider)except Exception as e:logging.error(f"模型初始化失敗: {e}")raise RuntimeError("無法初始化AI模型") from e

此函數通過調用get_api_config獲取API配置,然后使用OpenAIProvider和指定的模型名稱(這里我選的是免費的qwen/qwen-2.5-72b-instruct:free)初始化OpenAIModel實例。如果初始化過程中出現錯誤,會記錄錯誤日志并拋出RuntimeError

2.2.4 主函數邏輯
def main():# 配置日志記錄logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s')try:model = initialize_model()logging.info("AI模型初始化成功")except Exception as e:logging.error(f"連接大模型錯誤: {e}")returntry:pc_info = read_pc_info()logging.info("成功獲取電腦配置信息")logging.info("電腦配置信息:\n" + pc_info)except Exception as e:logging.error(f"獲取配置信息出錯: {e}")return# 構建用戶提示詞user_prompt = f"""我需要您對這臺電腦的配置進行全面評價。請分析以下幾點:1. 這臺電腦的性能是否能夠滿足日常辦公、網頁瀏覽、視頻播放等基本需求2. 是否適合運行更復雜的應用程序,如視頻編輯、游戲或編程3. 從性價比角度考慮,是否有必要升級某些硬件組件4. 如果需要升級,您推薦升級哪些組件,預算大約是多少5. 如果不值得升級,您認為在什么情況下應該考慮更換新電腦按照指定格式給出專業評測:1. 使用簡潔清晰的中文回答;2. 回答必須使用標準 Markdown 格式,例如:## 標題、- 列表項;3. 不要包含任何亂碼、HTML 標簽、JavaScript 代碼或特殊符號;4. 避免出現“(注:...)”這類解釋性括號內容;5. 輸出應易于閱讀且結構清晰。以下是我的電腦配置信息:{pc_info}"""# 創建AI代理agent = Agent(model,system_prompt=SYSTEM_PROMPT)# 調用模型獲取評價response = agent.run_sync(user_prompt)# 打印結果logging.info("電腦配置評價結果:")logging.info(response)if __name__ == "__main__":main()

main函數中:

  1. 首先配置日志記錄,設置日志級別為INFO,指定日志格式。
  2. 調用initialize_model初始化AI模型,若成功則記錄日志,失敗則記錄錯誤日志并返回。
  3. 調用read_pc_info獲取電腦配置信息,成功則記錄配置信息日志,失敗記錄錯誤日志并返回。
  4. 根據獲取的電腦配置信息構建user_prompt,明確告知AI Agent需要評價的內容和格式要求。
  5. 使用初始化的模型和SYSTEM_PROMPT創建Agent實例。
  6. 通過agent.run_sync(user_prompt)調用AI Agent,傳入用戶提示詞,獲取電腦配置評價的響應。
  7. 最后獲得返回的結果

三、結果展示

運行該項目后,在控制臺會輸出電腦配置信息獲取過程、AI 模型交互過程的日志信息,最終展示處理后的電腦配置評價結果。

  • 工具(read_pc_info函數)獲得的信息
  • 請添加圖片描述
    將工具獲得的信息和提示詞給大模型后,大模型返回的結果
    在這里插入圖片描述
    因為提示詞中我們說明了要Markdown格式,所以把‘\n’轉成實際的換行,就更容易讀了
## 電腦配置詳細評測### 1. 基本需求
根據您提供的配置信息,以下是對這臺電腦性能的分析:
- **CPU**:Intel64 Family 6 Model 142 Stepping 10, 4核心8線程,這是一顆中等檔次的處理器,型號可能是Intel Core i5-8250U(根據提供的信息推測)。對于日常辦公、網頁瀏覽和視頻播放等基本需求來說,這塊處理器已經非常足夠,能夠保證流暢的使用體驗。
- **內存**:19GB,但可用的為8GB。內存方面有些不足,8GB對于現代操作系統和多任務處理來說略顯緊張。建議將內存提升至16GB,這將顯著改善多任務處理能力和軟件運行效率。
- **硬盤**:三個硬盤分區,C盤200GB已用66.1%,表明系統分區負載較重。D盤和E盤相對空閑,仍可滿足存儲需求。
- **OS**:Windows 11 對系統性能有一定需求,您的電腦配置可以支持,但會感覺到一些性能瓶頸,尤其是在內存方面。### 2. 復雜應用程序
- **視頻編輯**:這塊CPU和8GB內存對于視 頻編輯來說有些吃力,處理高清視頻時可能會遇到卡頓和較高的延遲,不推薦用于專業視頻編輯。
- **游戲**:沒有提供顯卡信息,保守估計內置集顯(如Intel UHD Graphics 620)。對于要求不高的游戲,該配置勉強可以運行,但無法流暢玩大型3D游戲。
- **編程**:日常編寫代碼和運行輕量級開發環境(如Web開發)可以勝任,但在處理大型項 目或資源密集型編譯時可能會感到力不從心。### 3. 性價比與升級建議
從性價比角度來看,對這臺電腦硬件 進行合理升級可以提高其性能和使用壽命,建議如下:
- **內存升級**:將內存從8GB提升至16GB或更高,成本相 對較低但效果顯著,預算約為300-500元。
- **SSD**:如果C盤使用的是HDD,考慮更換為1TB或更大容量的NVMe SSD ,這將大幅提升系統的啟動速度和程序加載速度,預算約800-1500元。### 4. 升級推薦
- **升級內存**:增 加至16GB,預算300-500元。
- **升級SSD**:如果目前使用的是HDD,強烈建議更換為1TB NVMe SSD,以極大地提高 數據讀寫速度,預算800-1500元。### 5. 更換新電腦
如果上述升級措施仍無法滿足您的需求,或者您希望獲 得更高的性能和更長的使用壽命,建議考慮替換整機,特別是當您需要進行高負載的工作(如專業視頻編輯、3D建模和高端游戲)時。更換新電腦的情況包括:
- **性能瓶頸**:盡管通過硬件升級,整體性能有所提升,但在某些特定任務中仍然感覺卡頓或延遲較高。
- **技術落伍**:當前的硬件架構已經無法支持最新的軟件和技術,如AI加速、實時光線追蹤等。
- **性價比過低**:升級的成本已經接近于購買新電腦,或者升級后的性能提升不明顯。

我們創建的AI Agent就完成了。
我試了幾個openrouter支持調用工具的免費大模型,只有這個大模型說對了CPU型號,但是它對內存的評價不是很準確,雖然明知道是20G內存,其中8G可用,還建議我升級到16G(我的電腦運行了太多的程序,打開了太多的網頁,所以20G的內存,只剩8G可用)。因為我們的工具沒有給出硬盤的詳細型號,所以大模型給的建議參考價值就不大了,看來要改進工具函數獲取更詳細的信息。

四、項目總結與優化方向

這個項目展示了如何使用Python創建一個能夠調用工具的AI Agent,實現電腦配置的自動評估。通過結合系統工具與大語言模型的能力,我們構建了一個簡單但實用的應用場景。

在實際使用中,我發現大模型在某些方面的判斷還不夠準確,比如對內存的評估就沒有考慮到當前系統的負載情況。這也提醒我們,即使是強大的AI模型,也需要合理的提示詞設計和數據預處理,才能得到更準確的結果。當然,另一方也需要工具能夠提供盡可能詳細的信息給到大模型,才能幫助大模型做出更準備的判斷和更有價值的建議。

未來,我們可以從以下幾個方面優化這個項目:

  1. 增強工具功能:可以添加更多的系統信息收集功能,如GPU信息、網絡速度測試等
  2. 改進提示詞:針對大模型可能出現的誤解,優化提示詞設計,提供更明確的指導
  3. 多模型對比:增加模型選擇功能,對比不同模型的輸出結果,選擇最準確的評估
  4. 用戶交互優化:添加圖形界面或Web界面,提升用戶體驗
  5. 增加評估維度:除了硬件性能,還可以評估系統健康狀態、安全配置等方面

通過這個項目,我們不僅學習了如何構建一個AI Agent,更重要的是理解了如何將大模型與實際工具結合,創造出真正有價值的應用。AI Agent的潛力巨大,隨著技術的不斷發展,我們可以期待更多創新應用的出現。

如果你也想嘗試這個項目,只需按照本文的步驟操作,就能輕松構建出自己的電腦配置評估AI Agent。希望這個項目能為你提供一些啟發,幫助你探索更多AI Agent的應用場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87508.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87508.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87508.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WSL 安裝使用和常用命令

參考官方使用說明&#xff1a; https://learn.microsoft.com/zh-cn/windows/wsl/ 安裝wsl: wsl --install --no-distribution --no-distribution&#xff1a;安裝 WSL 時不要安裝分發版 更新 wsl: wsl --update 設置wsl 默認版本&#xff1a; wsl --set-default-version <…

720全景VR拍攝制作實戰教程

720全景VR拍攝制作實戰教程 720全景VR拍攝制作是近年來興起的一種沉浸式影像制作技術。它通過多角度拍攝&#xff0c;并將畫面拼接成一個全景視角&#xff0c;使觀眾獲得身臨其境的觀看體驗。本教程將帶你從準備階段到拍攝階段&#xff0c;再到后期處理階段&#xff0c;一步步…

什么真正的云原生開發?如何區別本地開發后部署到云端?

以下是關于云原生開發的深度解析&#xff0c;以及與本地開發后遷移上云的本質區別&#xff1a; 一、真正的云原生開發&#xff1a;從理念到實踐的全面革新 1. 定義與核心思想 云原生開發是一種以云計算能力為核心的架構設計和開發方法論&#xff0c;其本質是讓應用從誕生之初…

從代碼學習深度學習 - 詞的相似性和類比任務 PyTorch版

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言加載預訓練詞向量TokenEmbedding 類詳解預訓練詞向量簡介 (GloVe)具體含義總結建議應用預訓練詞向量詞相似度knn 函數get_similar_tokens 函數相似詞查找示例詞類比get_analogy 函數詞類比任務…

ubuntu 22.04 安裝部署elk(elasticsearch/logstash/kibana) 7.10.0詳細教程

安裝部署elk7.10.0詳細教程 一、安裝jdk 11環境二、安裝elasticsearch 7.10.0三、安裝kibana 7.10.0四、安裝logstash 7.10.0五、安裝ik7.10.0分詞六、開啟安全功能1. 開啟用戶名密碼登錄2. 開啟es安全加密通信3. 開啟Kibana安全功能 七、注意事項和常見錯誤八、其它操作及命令…

技術文章: 基板的吸水率

PCB基板或覆銅板的吸水率是一個重要的性能指標&#xff0c;它衡量了覆銅板在特定條件下&#xff08;通常是浸水后&#xff09;吸收水分的能力&#xff0c;通常用指定條件下吸水后與吸水前相比&#xff0c;質量增加的百分比來表示。當材料暴露扎起在潮濕空氣中或浸沒在水中時其抵…

九日集訓第三天

目錄 搜索旋轉排序數組 搜索旋轉排序數組|| 尋找旋轉排序中的數組最小值 爬樓梯 斐波那契數 第N個泰波那契數 差的絕對值為K的數對數目 猜數字 拿硬幣 山峰數組的峰頂索引 搜索旋轉排序數組 class Solution { public:int search(vector<int>& nums, int t…

CppCon 2017 學習:folly::Function A Non-copyable Alternative to std::function

你說的內容是關于 C 中 可調用類型&#xff08;Callable Types&#xff09; 的基礎知識&#xff0c;我幫你理清并補充理解。 Callable Types&#xff08;可調用類型&#xff09;簡介 C 中任何可以用 () 括號操作符“調用”的對象&#xff0c;都叫做 可調用類型。典型包括&…

PyTorch 中Tensor常用數據結構(int, list, numpy array等)互相轉換和實戰示例

在 PyTorch 中&#xff0c;tensor 是一種強大且靈活的數據結構&#xff0c;可以與多種 Python 常用數據結構&#xff08;如 int, list, numpy array 等&#xff09;互相轉換。下面是詳細解釋和代碼示例&#xff1a; 1. Tensor ? int / float 轉為 int / float&#xff08;前提…

計算機網絡與數據通信基礎

第一章 計算機網絡概述 1. 計算機網絡的核心概念 1.1 定義 將 地理分散 的、具有 獨立處理能力 的計算機系統&#xff08;主機/Host&#xff09;&#xff0c;通過 傳輸介質 與 網絡設備 互連&#xff0c;在 網絡協議 和 軟件 支持下實現 資源共享 與 數據通信 的系統。 關鍵術…

【統計術語】

文章目錄 基礎概念術語基期與現期增長量與增長率環比與同比 比重術語平均數術語特殊增長術語其他常用術語 基礎概念術語 基期與現期 基期&#xff1a;作為基礎參照的時期&#xff0c;一般指過去的時間 現期&#xff1a;與基期對比的時期&#xff0c;一般指現在的時間 示例&am…

XXE(XML外部實體注入)詳解

目錄 一、XXE漏洞簡介 二、XML詳解 (一) XML文檔結構 1. 文檔聲明 2. XML文檔類型定義&#xff08;DTD&#xff09; 3. XML文檔元素 4. XML文檔示例 三、XXE漏洞類型 四、XXE漏洞挖掘技巧 五、XXE漏洞危害 (一) 文件讀取 (二) 內網探測 1. 端口探測 2. 主機存活探…

深入解析JVM字節碼執行引擎

JVM 字節碼執行引擎。它是 JVM 核心組件之一&#xff0c;負責實際執行加載到內存中的字節碼指令。你可以將它想象成 JVM 的“CPU”。 核心職責&#xff1a; 加載待執行的字節碼&#xff1a; 從方法區&#xff08;元空間&#xff09;獲取已加載類的方法字節碼。創建和管理棧幀…

華為OD機試-MELON的難題-DFS(JAVA 2025A卷)

題意是從N快雨花石中找出最少拿出雨花石的塊數&#xff0c;使得雨花石可以均分&#xff0c;直接使用dfs解決此類組合問題 package com.example.demo.bean;import java.util.Arrays; import java.util.LinkedList; import java.util.Scanner;public class YuHuaStone {public s…

鴻蒙數據庫操作

一、使用關系型數據庫實現數據持久化&#xff0c;需要獲取一個RdbStore&#xff0c;其中包括建庫、建表、升降級等操作。 const STORE_CONFIG: relationalStore.StoreConfig {name: AnyOffice.db, // 數據庫文件名securityLevel: relationalStore.SecurityLevel.S1, // 數據庫…

基于ARM SoC的半導體測試

ARM SoC&#xff08;System on Chip&#xff09; 是一種集成了多個關鍵計算組件的單片系統芯片&#xff0c;廣泛應用于移動設備、嵌入式系統、物聯網&#xff08;IoT&#xff09;和半導體測試設備等領域。它的核心設計理念是“高度集成”&#xff0c;將處理器、內存、外設接口等…

JavaEE->多線程2

目錄 一、線程安全&#xff08;重點&#xff09; 1.線程安全演示 2.線程不安全的原因 1.線程是搶占式執行的&#xff08;執行順序是隨機的&#xff09; 2.多個線程同時修改了同一個變量 3.原子性 4.內存可見性 5.指令重排序&#xff08;有序性&#xff09; 二、解決線…

Flutter TCP通信

啟動TCP服務 Future<void> startServer() async {final server await ServerSocket.bind(InternetAddress.anyIPv4, 12345);print(Server listening on ${server.address}:${server.port});server.listen((Socket socket) {print(Client connected: ${socket.remoteAddr…

flask拆分計劃

兩個啟動鏈接&#xff0c;看日志提示是因為2次啟動&#xff0c;一次是database&#xff0c;一次是xmind2&#xff0c;去掉一次就可以&#xff0c;如何去掉一次&#xff1f; 這里啟動也調用了一次&#xff0c;所以測試環境注釋掉&#xff0c;如下圖&#xff0c;也就調用了一次

【生活】ECMO原理、作用、費用及使用方法

博客目錄 一、ECMO 是什么&#xff1f;二、ECMO 的作用1. 替代肺功能&#xff08;氧合與二氧化碳清除&#xff09;2. 替代心臟功能&#xff08;循環支持&#xff09;3. 為其他治療爭取時間4. 用于心肺復蘇&#xff08;ECPR&#xff09; 三、ECMO 的費用1. 設備使用費2. 耗材費用…