用 python 开发一个可调用工具的 AI Agent,实现电脑配置专业评价

在人工智能时代,AI Agent凭借其强大的任务处理能力,逐渐成为开发人员手中的得力工具。今天,我们就来一起动手,用Python打造一个能够调用工具的AI Agent,实现根据电脑信息对电脑配置进行专业评价的功能。

一、项目创建与目录结构

1.1 项目创建

首先,我们需要创建一个新的项目环境。这里使用UV进行项目创建。

cmd 复制代码
uv init demo

项目创建完成后,进入项目文件夹并安装必要的包, 比如安装psutil

cmd 复制代码
uv add psutil

安装的包都会记录在pypoject.toml, 看看我都安装了哪些包

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库。

python 复制代码
import platform
import psutil


def 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 导入需要的库和定义系统提示词
python 复制代码
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配置
python 复制代码
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_url
    except Exception as e:
        logging.error(f"获取API配置失败: {e}")
        raise

该函数负责从.env文件中加载OPENROUTER_API_KEY,并返回API密钥和base_url(因为我用的是openrouter里的模型,所以需要base_url这个参数)。 如果.env文件加载失败或API密钥未设置,会抛出相应的异常。

2.2.2 初始化模型
python 复制代码
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 主函数逻辑
python 复制代码
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}")
        return

    try:
        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'转成实际的换行,就更容易读了
markdown 复制代码
## 电脑配置详细评测

### 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的应用场景。

相关推荐
随心点儿10 分钟前
使用python 将多个docx文件合并为一个word
开发语言·python·多个word合并为一个
不学无术の码农14 分钟前
《Effective Python》第十三章 测试与调试——使用 Mock 测试具有复杂依赖的代码
开发语言·python
sleepybear111321 分钟前
在Ubuntu上从零开始编译并运行Home Assistant源码并集成HACS与小米开源的Ha Xiaomi Home
python·智能家居·小米·home assistant·米家·ha xiaomi home
纪伊路上盛名在26 分钟前
(鱼书)深度学习入门1:python入门
人工智能·python·深度学习
Shuai@29 分钟前
VILA-M3: Enhancing Vision-Language Models with Medical Expert Knowledge
人工智能·语言模型·自然语言处理
动亦定31 分钟前
AI与物联网(IoT)的融合
人工智能·物联网
夏末蝉未鸣0143 分钟前
python transformers笔记(TrainingArguments类)
python·自然语言处理·transformer
德育处主任Pro1 小时前
「py数据分析」04如何将 Python 爬取的数据保存为 CSV 文件
数据库·python·数据分析
咸鱼鲸1 小时前
【PyTorch】PyTorch中数据准备工作(AI生成)
人工智能·pytorch·python
停走的风1 小时前
二刷(李宏毅深度学习,醍醐灌顶,长刷长爽)
人工智能·深度学习