欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用python開發(fā)一個(gè)可調(diào)用工具的AI智能體

 更新時(shí)間:2025年07月11日 09:02:00   作者:dudly  
在人工智能時(shí)代,AI Agent憑借其強(qiáng)大的任務(wù)處理能力,逐漸成為開發(fā)人員手中的得力工具,下面我們就來看看如何使用Python打造一個(gè)能夠調(diào)用工具的AI Agent,實(shí)現(xiàn)根據(jù)電腦信息對(duì)電腦配置進(jìn)行專業(yè)評(píng)價(jià)的功能吧

在人工智能時(shí)代,AI Agent憑借其強(qiáng)大的任務(wù)處理能力,逐漸成為開發(fā)人員手中的得力工具。今天,我們就來一起動(dòng)手,用Python打造一個(gè)能夠調(diào)用工具的AI Agent,實(shí)現(xiàn)根據(jù)電腦信息對(duì)電腦配置進(jìn)行專業(yè)評(píng)價(jià)的功能。

一、項(xiàng)目創(chuàng)建與目錄結(jié)構(gòu)

1.1 項(xiàng)目創(chuàng)建

首先,我們需要?jiǎng)?chuàng)建一個(gè)新的項(xiàng)目環(huán)境。這里使用UV進(jìn)行項(xiàng)目創(chuàng)建。

uv init demo

項(xiàng)目創(chuàng)建完成后,進(jìn)入項(xiàng)目文件夾并安裝必要的包, 比如安裝psutil

uv add psutil

安裝的包都會(huì)記錄在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 目錄結(jié)構(gòu)

我們的項(xiàng)目目錄結(jié)構(gòu)如下:

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

可以看到除了創(chuàng)建項(xiàng)目時(shí)uv自動(dòng)創(chuàng)建的文件及文件夾,這個(gè)項(xiàng)目我主要?jiǎng)?chuàng)建了3個(gè)文件:

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

二、功能實(shí)現(xiàn)與代碼解析

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

tools.py文件中,我定義了read_pc_info函數(shù),用于獲取電腦的詳細(xì)配置信息。該函數(shù)的實(shí)現(xiàn)依賴platformpsutil庫。

import platform
import psutil


def read_pc_info():
    # 獲取系統(tǒng)信息
    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")

    # 內(nèi)存信息
    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)")

    # 操作系統(tǒng)信息
    info.append(f"OS: {platform.system()} {platform.release()}")

    return "\n".join(info)
  • CPU信息獲取:使用platform.processor()獲取CPU型號(hào),psutil.cpu_count(logical=False)獲取物理核心數(shù),psutil.cpu_count(logical=True)獲取邏輯核心數(shù)。
  • 內(nèi)存信息獲取:通過psutil.virtual_memory()獲取系統(tǒng)內(nèi)存相關(guān)信息,包括總內(nèi)存和可用內(nèi)存,并進(jìn)行單位換算后添加到info列表。
  • 磁盤信息獲取psutil.disk_partitions()獲取磁盤分區(qū)信息,遍歷分區(qū),使用psutil.disk_usage(p.mountpoint)獲取每個(gè)分區(qū)的使用情況,添加到info列表。
  • 操作系統(tǒng)信息獲取platform.system()獲取操作系統(tǒng)名稱,platform.release()獲取操作系統(tǒng)版本號(hào),將其組合添加到info列表。最后,將info列表中的所有信息以換行符連接成字符串返回。

2.2 主程序邏輯(main.py)

main.py文件中,包含了項(xiàng)目的核心運(yùn)行邏輯。

2.2.1 導(dǎo)入需要的庫和定義系統(tǒng)提示詞

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

# 系統(tǒng)提示詞定義
SYSTEM_PROMPT = """
你是一位專業(yè)的電腦硬件評(píng)測(cè)專家,擅長(zhǎng)分析電腦配置的性能、適用性和升級(jí)潛力。你能夠根據(jù)用戶提供的電腦配置信息,給出專業(yè)、實(shí)用的評(píng)價(jià)和建議。請(qǐng)以簡(jiǎn)潔明了的語言表達(dá)觀點(diǎn),既要考慮技術(shù)細(xì)節(jié),也要考慮普通用戶的理解能力。
"""

這里先導(dǎo)入了項(xiàng)目所需的各種庫,定義了SYSTEM_PROMPT常量,用于設(shè)定AI Agent的角色和能力,讓其以專業(yè)電腦硬件評(píng)測(cè)專家的身份進(jìn)行回答。

2.2.2 獲取API配置

def get_api_config() -> Tuple[str, str]:
    """獲取OpenRouter API配置

    返回:
        Tuple[str, str]: (api_key, base_url) API密鑰和基礎(chǔ)URL

    異常:
        ValueError: 當(dāng)API密鑰未設(shè)置時(shí)
        EnvironmentError: 當(dāng).env文件加載失敗時(shí)
    """
    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("請(qǐng)?jiān)?env文件中設(shè)置OPENROUTER_API_KEY")

        return api_key, base_url
    except Exception as e:
        logging.error(f"獲取API配置失敗: {e}")
        raise

該函數(shù)負(fù)責(zé)從.env文件中加載OPENROUTER_API_KEY,并返回API密鑰和base_url(因?yàn)槲矣玫氖莖penrouter里的模型,所以需要base_url這個(gè)參數(shù))。 如果.env文件加載失敗或API密鑰未設(shè)置,會(huì)拋出相應(yīng)的異常。

2.2.2 初始化模型

def initialize_model() -> OpenAIModel:
    """初始化AI大模型實(shí)例

    返回:
        OpenAIModel: 初始化好的模型實(shí)例

        異常:
        RuntimeError: 當(dāng)模型初始化失敗時(shí)
    """
    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

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

2.2.4 主函數(shù)邏輯

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"連接大模型錯(cuò)誤: {e}")
        return

    try:
        pc_info = read_pc_info()
        logging.info("成功獲取電腦配置信息")
        logging.info("電腦配置信息:\n" + pc_info)
    except Exception as e:
        logging.error(f"獲取配置信息出錯(cuò): {e}")
        return

    # 構(gòu)建用戶提示詞
    user_prompt = f"""
    我需要您對(duì)這臺(tái)電腦的配置進(jìn)行全面評(píng)價(jià)。請(qǐng)分析以下幾點(diǎn):
    1. 這臺(tái)電腦的性能是否能夠滿足日常辦公、網(wǎng)頁瀏覽、視頻播放等基本需求
    2. 是否適合運(yùn)行更復(fù)雜的應(yīng)用程序,如視頻編輯、游戲或編程
    3. 從性價(jià)比角度考慮,是否有必要升級(jí)某些硬件組件
    4. 如果需要升級(jí),您推薦升級(jí)哪些組件,預(yù)算大約是多少
    5. 如果不值得升級(jí),您認(rèn)為在什么情況下應(yīng)該考慮更換新電腦

    按照指定格式給出專業(yè)評(píng)測(cè):
    1. 使用簡(jiǎn)潔清晰的中文回答;
    2. 回答必須使用標(biāo)準(zhǔn) Markdown 格式,例如:## 標(biāo)題、- 列表項(xiàng);
    3. 不要包含任何亂碼、HTML 標(biāo)簽、JavaScript 代碼或特殊符號(hào);
    4. 避免出現(xiàn)“(注:...)”這類解釋性括號(hào)內(nèi)容;
    5. 輸出應(yīng)易于閱讀且結(jié)構(gòu)清晰。

    以下是我的電腦配置信息:
    {pc_info}
    """

    # 創(chuàng)建AI代理
    agent = Agent(
        model,
        system_prompt=SYSTEM_PROMPT
    )

    # 調(diào)用模型獲取評(píng)價(jià)
    response = agent.run_sync(user_prompt)

    # 打印結(jié)果
    logging.info("電腦配置評(píng)價(jià)結(jié)果:")
    logging.info(response)

if __name__ == "__main__":
    main()

main函數(shù)中:

  • 首先配置日志記錄,設(shè)置日志級(jí)別為INFO,指定日志格式。
  • 調(diào)用initialize_model初始化AI模型,若成功則記錄日志,失敗則記錄錯(cuò)誤日志并返回。
  • 調(diào)用read_pc_info獲取電腦配置信息,成功則記錄配置信息日志,失敗記錄錯(cuò)誤日志并返回。
  • 根據(jù)獲取的電腦配置信息構(gòu)建user_prompt,明確告知AI Agent需要評(píng)價(jià)的內(nèi)容和格式要求。
  • 使用初始化的模型和SYSTEM_PROMPT創(chuàng)建Agent實(shí)例。
  • 通過agent.run_sync(user_prompt)調(diào)用AI Agent,傳入用戶提示詞,獲取電腦配置評(píng)價(jià)的響應(yīng)。
  • 最后獲得返回的結(jié)果

三、結(jié)果展示

運(yùn)行該項(xiàng)目后,在控制臺(tái)會(huì)輸出電腦配置信息獲取過程、AI 模型交互過程的日志信息,最終展示處理后的電腦配置評(píng)價(jià)結(jié)果。

工具(read_pc_info函數(shù))獲得的信息

將工具獲得的信息和提示詞給大模型后,大模型返回的結(jié)果

因?yàn)樘崾驹~中我們說明了要Markdown格式,所以把‘\n’轉(zhuǎn)成實(shí)際的換行,就更容易讀了

## 電腦配置詳細(xì)評(píng)測(cè)

### 1. 基本需求
根據(jù)您提供的配置信息,以下是對(duì)這臺(tái)電腦性能的分析:
- **CPU**:Intel64 Family 6 Model 142 Stepping 10, 4核心8線程,這是一顆中等檔次的處理器,型號(hào)可能是Intel Core i5-8250U(根據(jù)提供的信息推測(cè))。對(duì)于日常辦公、網(wǎng)頁瀏覽和視頻播放等基本需求來說,這塊處理器已經(jīng)非常足夠,能夠保證流暢的使用體驗(yàn)。
- **內(nèi)存**:19GB,但可用的為8GB。內(nèi)存方面有些不足,8GB對(duì)于現(xiàn)代操作系統(tǒng)和多任務(wù)處理來說略顯緊張。建議將內(nèi)存提升至16GB,這將顯著改善多任務(wù)處理能力和軟件運(yùn)行效率。
- **硬盤**:三個(gè)硬盤分區(qū),C盤200GB已用66.1%,表明系統(tǒng)分區(qū)負(fù)載較重。D盤和E盤相對(duì)空閑,仍可滿足存儲(chǔ)需求。
- **OS**:Windows 11 對(duì)系統(tǒng)性能有一定需求,您的電腦配置可以支持,但會(huì)感覺到一些性能瓶頸,尤其是在內(nèi)存方面。
  
### 2. 復(fù)雜應(yīng)用程序
- **視頻編輯**:這塊CPU和8GB內(nèi)存對(duì)于視 頻編輯來說有些吃力,處理高清視頻時(shí)可能會(huì)遇到卡頓和較高的延遲,不推薦用于專業(yè)視頻編輯。
- **游戲**:沒有提供顯卡信息,保守估計(jì)內(nèi)置集顯(如Intel UHD Graphics 620)。對(duì)于要求不高的游戲,該配置勉強(qiáng)可以運(yùn)行,但無法流暢玩大型3D游戲。
- **編程**:日常編寫代碼和運(yùn)行輕量級(jí)開發(fā)環(huán)境(如Web開發(fā))可以勝任,但在處理大型項(xiàng) 目或資源密集型編譯時(shí)可能會(huì)感到力不從心。
  
### 3. 性價(jià)比與升級(jí)建議
從性價(jià)比角度來看,對(duì)這臺(tái)電腦硬件 進(jìn)行合理升級(jí)可以提高其性能和使用壽命,建議如下:
- **內(nèi)存升級(jí)**:將內(nèi)存從8GB提升至16GB或更高,成本相 對(duì)較低但效果顯著,預(yù)算約為300-500元。
- **SSD**:如果C盤使用的是HDD,考慮更換為1TB或更大容量的NVMe SSD ,這將大幅提升系統(tǒng)的啟動(dòng)速度和程序加載速度,預(yù)算約800-1500元。

### 4. 升級(jí)推薦
- **升級(jí)內(nèi)存**:增 加至16GB,預(yù)算300-500元。
- **升級(jí)SSD**:如果目前使用的是HDD,強(qiáng)烈建議更換為1TB NVMe SSD,以極大地提高 數(shù)據(jù)讀寫速度,預(yù)算800-1500元。

### 5. 更換新電腦
如果上述升級(jí)措施仍無法滿足您的需求,或者您希望獲 得更高的性能和更長(zhǎng)的使用壽命,建議考慮替換整機(jī),特別是當(dāng)您需要進(jìn)行高負(fù)載的工作(如專業(yè)視頻編輯、3D建模和高端游戲)時(shí)。更換新電腦的情況包括:
- **性能瓶頸**:盡管通過硬件升級(jí),整體性能有所提升,但在某些特定任務(wù)中仍然感覺卡頓或延遲較高。
- **技術(shù)落伍**:當(dāng)前的硬件架構(gòu)已經(jīng)無法支持最新的軟件和技術(shù),如AI加速、實(shí)時(shí)光線追蹤等。
- **性價(jià)比過低**:升級(jí)的成本已經(jīng)接近于購買新電腦,或者升級(jí)后的性能提升不明顯。

我們創(chuàng)建的AI Agent就完成了。

我試了幾個(gè)openrouter支持調(diào)用工具的免費(fèi)大模型,只有這個(gè)大模型說對(duì)了CPU型號(hào),但是它對(duì)內(nèi)存的評(píng)價(jià)不是很準(zhǔn)確,雖然明知道是20G內(nèi)存,其中8G可用,還建議我升級(jí)到16G(我的電腦運(yùn)行了太多的程序,打開了太多的網(wǎng)頁,所以20G的內(nèi)存,只剩8G可用)。因?yàn)槲覀兊墓ぞ邲]有給出硬盤的詳細(xì)型號(hào),所以大模型給的建議參考價(jià)值就不大了,看來要改進(jìn)工具函數(shù)獲取更詳細(xì)的信息。

四、項(xiàng)目總結(jié)與優(yōu)化方向

這個(gè)項(xiàng)目展示了如何使用Python創(chuàng)建一個(gè)能夠調(diào)用工具的AI Agent,實(shí)現(xiàn)電腦配置的自動(dòng)評(píng)估。通過結(jié)合系統(tǒng)工具與大語言模型的能力,我們構(gòu)建了一個(gè)簡(jiǎn)單但實(shí)用的應(yīng)用場(chǎng)景。

在實(shí)際使用中,我發(fā)現(xiàn)大模型在某些方面的判斷還不夠準(zhǔn)確,比如對(duì)內(nèi)存的評(píng)估就沒有考慮到當(dāng)前系統(tǒng)的負(fù)載情況。這也提醒我們,即使是強(qiáng)大的AI模型,也需要合理的提示詞設(shè)計(jì)和數(shù)據(jù)預(yù)處理,才能得到更準(zhǔn)確的結(jié)果。當(dāng)然,另一方也需要工具能夠提供盡可能詳細(xì)的信息給到大模型,才能幫助大模型做出更準(zhǔn)備的判斷和更有價(jià)值的建議。

未來,我們可以從以下幾個(gè)方面優(yōu)化這個(gè)項(xiàng)目:

  • 增強(qiáng)工具功能:可以添加更多的系統(tǒng)信息收集功能,如GPU信息、網(wǎng)絡(luò)速度測(cè)試等
  • 改進(jìn)提示詞:針對(duì)大模型可能出現(xiàn)的誤解,優(yōu)化提示詞設(shè)計(jì),提供更明確的指導(dǎo)
  • 多模型對(duì)比:增加模型選擇功能,對(duì)比不同模型的輸出結(jié)果,選擇最準(zhǔn)確的評(píng)估
  • 用戶交互優(yōu)化:添加圖形界面或Web界面,提升用戶體驗(yàn)
  • 增加評(píng)估維度:除了硬件性能,還可以評(píng)估系統(tǒng)健康狀態(tài)、安全配置等方面

通過這個(gè)項(xiàng)目,我們不僅學(xué)習(xí)了如何構(gòu)建一個(gè)AI Agent,更重要的是理解了如何將大模型與實(shí)際工具結(jié)合,創(chuàng)造出真正有價(jià)值的應(yīng)用。AI Agent的潛力巨大,隨著技術(shù)的不斷發(fā)展,我們可以期待更多創(chuàng)新應(yīng)用的出現(xiàn)。

以上就是使用python開發(fā)一個(gè)可調(diào)用工具的AI智能體的詳細(xì)內(nèi)容,更多關(guān)于python AI智能體的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python字符串替換第一個(gè)字符串的方法

    python字符串替換第一個(gè)字符串的方法

    這篇文章主要介紹了python字符串替換第一個(gè)字符串的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Python實(shí)現(xiàn)自定義讀寫分離代碼實(shí)例

    Python實(shí)現(xiàn)自定義讀寫分離代碼實(shí)例

    這篇文章主要介紹了Python實(shí)現(xiàn)自定義讀寫分離代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 解決pymysql cursor.fetchall() 獲取不到數(shù)據(jù)的問題

    解決pymysql cursor.fetchall() 獲取不到數(shù)據(jù)的問題

    這篇文章主要介紹了解決pymysql cursor.fetchall() 獲取不到數(shù)據(jù)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python中的字典操作及字典函數(shù)

    python中的字典操作及字典函數(shù)

    本篇文章給大家介紹了python中的字典,包括字典的操作,字典函數(shù)實(shí)現(xiàn)代碼,需要的朋友參考下吧
    2018-01-01
  • python類屬性學(xué)習(xí)深入講解

    python類屬性學(xué)習(xí)深入講解

    這篇文章主要介紹了python類屬性學(xué)習(xí)深入講解,文中對(duì)于python的類屬性的理解有正在學(xué)習(xí)python的同學(xué)可以一塊學(xué)習(xí)下
    2021-03-03
  • 如何利用Python快速繪制海報(bào)級(jí)別地圖詳解

    如何利用Python快速繪制海報(bào)級(jí)別地圖詳解

    Python之所以這么流行,是因?yàn)樗粌H能夠應(yīng)用于科技領(lǐng)域,還能用來做許多其他學(xué)科的研究工具,最常見的便是繪制地圖,這篇文章主要給大家介紹了關(guān)于如何利用Python快速繪制海報(bào)級(jí)別地圖的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Django使用Channels實(shí)現(xiàn)WebSocket的方法

    Django使用Channels實(shí)現(xiàn)WebSocket的方法

    WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通訊的協(xié)議。WebSocket允許服務(wù)端主動(dòng)向客戶端推送數(shù)據(jù)。這篇文章主要介紹了Django使用Channels實(shí)現(xiàn)WebSocket,需要的朋友可以參考下
    2019-07-07
  • python如何調(diào)用php文件中的函數(shù)詳解

    python如何調(diào)用php文件中的函數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于python如何調(diào)用php文件中函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 安裝2019Pycharm最新版本的教程詳解

    安裝2019Pycharm最新版本的教程詳解

    這篇文章主要介紹了安裝2019Pycharm最新版本的教程詳解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • tensorflow 獲取所有variable或tensor的name示例

    tensorflow 獲取所有variable或tensor的name示例

    今天小編就為大家分享一篇tensorflow 獲取所有variable或tensor的name示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01

最新評(píng)論