不断完善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则根据推断结果完成具体的参数配置。
4万+

被折叠的 条评论
为什么被折叠?



