当前位置: 代码网 > it编程>前端脚本>Python > 使用python开发一个可调用工具的AI智能体

使用python开发一个可调用工具的AI智能体

2025年07月11日 Python 我要评论
在人工智能时代,ai agent凭借其强大的任务处理能力,逐渐成为开发人员手中的得力工具。今天,我们就来一起动手,用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 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 导入需要的库和定义系统提示词

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_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 初始化模型

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}")
        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函数中:

  • 首先配置日志记录,设置日志级别为info,指定日志格式。
  • 调用initialize_model初始化ai模型,若成功则记录日志,失败则记录错误日志并返回。
  • 调用read_pc_info获取电脑配置信息,成功则记录配置信息日志,失败记录错误日志并返回。
  • 根据获取的电脑配置信息构建user_prompt,明确告知ai agent需要评价的内容和格式要求。
  • 使用初始化的模型和system_prompt创建agent实例。
  • 通过agent.run_sync(user_prompt)调用ai agent,传入用户提示词,获取电脑配置评价的响应。
  • 最后获得返回的结果

三、结果展示

运行该项目后,在控制台会输出电脑配置信息获取过程、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模型,也需要合理的提示词设计和数据预处理,才能得到更准确的结果。当然,另一方也需要工具能够提供尽可能详细的信息给到大模型,才能帮助大模型做出更准备的判断和更有价值的建议。

未来,我们可以从以下几个方面优化这个项目:

  • 增强工具功能:可以添加更多的系统信息收集功能,如gpu信息、网络速度测试等
  • 改进提示词:针对大模型可能出现的误解,优化提示词设计,提供更明确的指导
  • 多模型对比:增加模型选择功能,对比不同模型的输出结果,选择最准确的评估
  • 用户交互优化:添加图形界面或web界面,提升用户体验
  • 增加评估维度:除了硬件性能,还可以评估系统健康状态、安全配置等方面

通过这个项目,我们不仅学习了如何构建一个ai agent,更重要的是理解了如何将大模型与实际工具结合,创造出真正有价值的应用。ai agent的潜力巨大,随着技术的不断发展,我们可以期待更多创新应用的出现。

以上就是使用python开发一个可调用工具的ai智能体的详细内容,更多关于python ai智能体的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com