【HelloAgent零基础入门】day4

部署运行你感兴趣的模型镜像

不断完善ing~

第七章:构建你的智能体框架

从零开始构建HelloAgents框架,HelloAgent将以版本迭代的方式推进开发。

7.1 框架整体架构设计
7.1.1 为何需要自建Agent框架

存在以下问题:

  • 过度抽象的复杂性

  • 快速迭代带来的不稳定性

  • 黑盒化的实现逻辑

需要:

  • 深度理解Agent工作原理

  • 获得完全的控制权

  • 培养系统设计能力

在实际应用中:

  • 特定领域的优化需求

  • 性能与资源的精确控制

  • 学习与教学的透明性要求

7.1.2 HelloAgents框架的设计理念

关键在于能够真正解决现有框架的痛点:让学习者快速上手,又能理解Agent的工作原理。

  • 轻量级与教学友好的平衡

  • 基于标准API的务实选择

  • 渐进式学习路径的精心设计

  • 统一的工具抽象,万物皆为工具

7.1.3 本章学习目标

如下所示:

hello-agents/
├── hello_agents/
│   │
│   ├── core/                     # 核心框架层
│   │   ├── agent.py              # Agent基类
│   │   ├── llm.py                # HelloAgentsLLM统一接口
│   │   ├── message.py            # 消息系统
│   │   ├── config.py             # 配置管理
│   │   └── exceptions.py         # 异常体系
│   │
│   ├── agents/                   # Agent实现层
│   │   ├── simple_agent.py       # SimpleAgent实现
│   │   ├── react_agent.py        # ReActAgent实现
│   │   ├── reflection_agent.py   # ReflectionAgent实现
│   │   └── plan_solve_agent.py   # PlanAndSolveAgent实现
│   │
│   ├── tools/                    # 工具系统层
│   │   ├── base.py               # 工具基类
│   │   ├── registry.py           # 工具注册机制
│   │   ├── chain.py              # 工具链管理系统
│   │   ├── async_executor.py     # 异步工具执行器
│   │   └── builtin/              # 内置工具集
│   │       ├── calculator.py     # 计算工具
│   │       └── search.py         # 搜索工具
└──

可以通过安装或者自己编写出来,

安装命令pip install "hello-agents==0.1.1

推荐先体验再进行测试,下面是示例:

# 安装好hello-agnets后,进行体验

from hello_agents import SimpleAgent, HelloAgentsLLM
from dotenv import load_dotenv

load_dotenv()

# 创建一个实例
llm = HelloAgentsLLM()

# 创建一个simpleAgent
agent = SimpleAgent(
    name="AI助手",
    llm=llm,
    system_prompt="你是一个有用的AI助手"
)

# 基础对话
response = agent.run("你好,请介绍一下自己")
print(response)

# 添加工具功能
from hello_agents.tools import CalculatorTool
calculator = CalculatorTool()

response = agent.run("请帮我计算 2 + 3 * 4")
print(response)

# 查看对话历史
print(f"历史消息数:{len(agent.git_history())}")


输出结果为:

在这里插入图片描述

7.2 HelloAgentLLM扩展

在4.1.3节中进行迭代升级。升级内容:

  • 多提供商支持

  • 本地模型集成

    引入VLLM和Ollama这两种高性能本地部署方案,

  • 自动检测机制

    根据环境信息智能推断所使用的LLM服务商

7.2.1 支持多提供商

之前是通过api_key,base_url连接的。但是也存在有些服务商的不同命名,因此引入了provider,目的就是封装处理不同服务商的配置细节。(理解框架封装带来的简便性)

示例:继承HelloAgentsLLM,增加对ModelScope平台的支持。创建my_llm.py文件。

注意配置ModelScope的密钥,然后在主程序中调用,主程序为my_main.py

import os
from typing import Optional
from openai import OpenAI
from hello_agents import HelloAgentsLLM 

# 创建自定义LLM
class MyLLM(HelloAgentsLLM):
    def __init__(
        self,
        model: Optional[str] = None,
        api_key: Optional[str] = None,
        base_url: Optional[str] = None,
        provider: Optional[str] = "auto",
        **kwargs
    ):
        # 检查provider是否为我们想处理的modelscope
        if provider == "modelscope":
            print("正在使用自定义的ModelScope Provider")
            self.provider = "modelscope"

            # 解析ModelScope的凭证
            self.api_key = api_key or os.getenv("MODELSCOPE_API_KEY")
            self.base_url = base_url or "https://api-inference.modelscope.cn/v1/"

            # 验证凭证是否存在
            if not self.api_key:
                raise ValueError("ModelScope API Key not found, Please set MODELSCOPE_API_KEY in environment variables.")

            # 设置默认模型和其他参数
            self.model = model or os.getenv("LLM_MODEL_ID") or "Qwen/Qwen2.5-VL-72B-Instruct"
            self.temperature = kwargs.get('temperature', 0.7)
            self.max_tokens = kwargs.get('max_tokens')
            self.timeout = kwargs.get('timeout', 60)

            # 使用获取的参数创建OpenAI客户端实例
            self._client = OpenAI(api_key=self.api_key, base_url=self.base_url, timeout=self.timeout)
        else:
            # 如果不是,则完全使用父类的原始逻辑来处理
            super().__init__(model=model, api_key=api_key, base_url=base_url, provider=provider, **kwargs)

my_main.py。

# my_main.py 主程序
from dotenv import load_dotenv
from my_llm import MyLLM

load_dotenv()

# 实例化客户端,并指定provider
# 需要传入魔塔中的model_id
llm = MyLLM(model='Qwen/Qwen3-32B', provider="modelscope")

# 准备消息
messages = [
    {"role": "user", "content":"你好,请介绍一下你自己。"}
]

# 发起调用
response_stream = llm.think(messages)

# 打印响应
print("ModelScope Response")
for chunk in response_stream:
    print(chunk, end="", flush=True)


示例效果:

在这里插入图片描述

7.2.2 本地模型调用
  • VLLM

    为LLM推理设计的高性能python库,通过PagedAttention等先进技术,可以实现比标准Transformers高出数倍的吞吐量。

  • Ollama

    将模型下载、配置和服务启动等步骤封装到了一条命令中,适合快速上手

上述两个接入HelloAgentsLLM,可以当成provider进行接入即可。

例如:

llm_client = HelloAgentsLLM(
    provider="vllm",
    model="Qwen/Qwen1.5-0.5B-Chat", # 需与服务启动时指定的模型一致
    base_url="http://localhost:8000/v1",
    api_key="vllm" # 本地服务通常不需要真实API Key,可填任意非空字符串
)

7.2.3 自动检测机制

HelloAgentsLLM 内部设计了两个核心辅助方法:_auto_detect_provider_resolve_credentials。它们协同工作,

  • _auto_detect_provider 负责根据环境信息推断服务商,

  • _resolve_credentials 则根据推断结果完成具体的参数配置。

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

所谓远行Misnearch

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值