微型代理-α是基于Qwen2.5-Coder系列模型训练的轻量级AI代理,专为边缘设备设计,支持Pythonic函数调用方式。
下载量 207
发布时间 : 2/11/2025
模型介绍
内容详情
替代品
模型简介
该模型采用Python代码块与工具交互的方式,支持并行多函数调用和自由形式推理,适用于需要复杂逻辑处理的场景。
模型特点
Pythonic函数调用
支持使用Python代码块与工具交互,相比传统JSON方式更灵活高效
并行多函数调用
可在一次对话中利用多个同步进程解决问题,减少对话轮次
自由形式推理
允许在自然语言中提供推理痕迹,无需强制特定输出格式
边缘设备优化
经过量化感知训练,适合在资源有限的边缘设备上运行
模型能力
文本生成
Python代码生成
函数调用
复杂逻辑处理
多任务并行处理
使用案例
日程管理
检查时间可用性
检查特定时间段是否可用
返回布尔值表示时间段可用性
自动化任务
复杂逻辑处理
执行需要条件判断和多步骤处理的任务
生成可执行的Python程序解决方案
许可证: 其他 许可证名称: qwen-research 许可证链接: https://huggingface.co/Qwen/Qwen2.5-Coder-3B-Instruct/blob/main/LICENSE 语言:
- 英文 基础模型:
- Qwen/Qwen2.5-Coder-3B-Instruct 管道标签: 文本生成 库名称: transformers 标签:
- 代码
- 聊天
- qwen
- qwen-coder
- 代理
微型代理-α
简介
微型代理-α 是 Dria-Agent-a 的扩展版本,基于 Qwen2.5-Coder 系列模型训练,专为边缘设备设计。这些模型经过精细的量化感知训练,以最小化量化后的性能损失。
微型代理-α 采用 Pythonic 函数调用 方式,即大型语言模型(LLMs)使用 Python 代码块与提供的工具交互并输出动作。这一方法受到多项先前工作的启发,包括但不限于 DynaSaur、RLEF、ADAS 和 CAMEL。与传统的基于 JSON 的函数调用方法相比,这种方式具有以下优势:
- 一次性并行多函数调用:模型可以在一次对话中利用多个同步进程解决问题,而其他函数调用模型可能需要多次对话轮次。
- 自由形式的推理与动作:模型可以在自然语言中自由提供推理痕迹,并在 ```python ``` 代码块之间插入动作,无需特殊提示或调整。这有助于减轻因强制特定输出格式而可能导致的性能损失(参见 Let Me Speak Freely?)。
- 即时生成复杂解决方案:模型提供的解决方案本质上是一个 Python 程序,排除了某些“高风险”内置函数,如
exec
、eval
和compile
(完整列表见下方的快速入门)。这使得模型能够实现自定义的复杂逻辑,包括条件判断和同步管道(将一个函数的输出用作下一个函数的参数),这是当前基于 JSON 的函数调用方法无法实现的(据我们所知)。
快速入门
您可以使用 dria_agent 包轻松使用微型代理:
pip install dria_agent
该包支持模型、工具、代码执行和后端(支持 mlx、ollama 和 transformers)。
使用方法
使用 @tool 装饰器将函数暴露给代理。
from dria_agent import tool
@tool
def check_availability(day: str, start_time: str, end_time: str) -> bool:
"""
检查给定时间段是否可用。
:param day: 日期,格式为 "YYYY-MM-DD"。
:param start_time: 开始时间(24 小时制,HH:MM 格式)。
:param end_time: 结束时间(24 小时制,HH:MM 格式)。
:return: 如果时间段可用则返回 True,否则返回 False。
"""
# 模拟实现
if start_time == "12:00" and end_time == "13:00":
return False
return True
创建带有自定义工具的代理:
from dria_agent import ToolCallingAgent
agent = ToolCallingAgent(
tools=[check_availability]
)
使用 agent.run(query) 执行任务并调用工具。
execution = agent.run("检查我明天中午的日历", print_results=True)
输出如下:
让我帮你检查明天中午一小时的冥想时间是否可用。
分步推理:
1. 我们需要检查特定时间段(中午)的可用性
2. 持续时间为 1 小时,因此使用相同的开始和结束时间
3. 因为是明天,所以日期格式应为 "YYYY-MM-DD"
4. 使用 check_availability() 函数传入这些参数
以下是检查可用性的代码:
```python
tomorrow = (datetime.now() + timedelta(days=1)).strftime("%Y-%m-%d")
start_time = "12:00" # 中午,24 小时制
end_time = "13:00" # 中午后一小时
availability = check_availability(tomorrow, start_time, end_time)
```
代码将执行以下操作:
- 使用 datetime 和 timedelta 计算明天的日期
- 设置中午 12:00 开始的一小时时间段
- 使用 check_availability 函数检查该时间段是否可用
availability 变量将包含 True(如果可用)或 False(如果不可用)。
如果使用 dria_agent,系统提示和工具无需额外设置即可直接使用。
您也可以直接使用 transformers 加载 Tiny-Agent-a-3B:
import json
from typing import Any, Dict, List
from transformers import AutoModelForCausalLM, AutoTokenizer
# 加载模型和分词器
model_name = "driaforall/Tiny-Agent-a-3B"
model = AutoModelForCausalLM.from_pretrained(
model_name, device_map="auto", torch_dtype="auto", trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 系统提示以获得最佳性能
SYSTEM_PROMPT = """
你是一位专业的 AI 助手,擅长提供 Python 代码来解决用户提出的任务或问题。
你可以自由使用 Python 代码,包括以下可用函数:
<|functions_schema|>
{{functions_schema}}
<|end_functions_schema|>
出于安全考虑,以下危险内置函数已被限制:
- exec
- eval
- execfile
- compile
- importlib
- input
- exit
请逐步思考并提供推理过程,函数调用之外的部分用自然语言描述。
所有 Python 代码请放在一个单独的 markdown 代码块中。
完全不要使用 print() 语句。尽量避免修改变量。
""".strip()
# 示例函数架构(定义模型可用的函数)
FUNCTIONS_SCHEMA = """
def check_availability(day: str, start_time: str, end_time: str) -> bool:
"""
检查给定时间段是否可用。
:param day: 日期,格式为 "YYYY-MM-DD"。
:param start_time: 开始时间(24 小时制,HH:MM 格式)。
:param end_time: 结束时间(24 小时制,HH:MM 格式)。
:return: 如果时间段可用则返回 True,否则返回 False。
"""
pass
"""
# 格式化系统提示
system_prompt = SYSTEM_PROMPT.replace("{{functions_schema}}", FUNCTIONS_SCHEMA)
# 示例用户查询
USER_QUERY = "检查我明天中午一小时的冥想时间是否可用。"
# 为模型格式化消息
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": USER_QUERY},
]
# 准备模型输入
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# 生成响应
generated_ids = model.generate(
**model_inputs,
max_new_tokens=512
)
# 提取新生成的标记
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
# 解码响应
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
评估与性能
我们在 Dria-Pythonic-Agent-Benchmark (DPAB) 上评估模型:这是我们通过合成数据生成 + 基于模型的验证 + 过滤和人工选择构建的基准,用于评估 LLMs 在 Pythonic 函数调用方面的能力,涵盖多种场景和任务。更多信息请参见 博客。
以下是 DPAB 结果:
当前各模型的基准测试结果(严格模式):
模型名称 | Pythonic | JSON |
---|---|---|
闭源模型 | ||
Claude 3.5 Sonnet | 87 | 45 |
gpt-4o-2024-11-20 | 60 | 30 |
开源模型 | ||
> 100B 参数 | ||
DeepSeek V3 (685B) | 63 | 33 |
MiniMax-01 | 62 | 40 |
Llama-3.1-405B-Instruct | 60 | 38 |
> 30B 参数 | ||
Qwen-2.5-Coder-32b-Instruct | 68 | 32 |
Qwen-2.5-72b-instruct | 65 | 39 |
Llama-3.3-70b-Instruct | 59 | 40 |
QwQ-32b-Preview | 47 | 21 |
< 20B 参数 | ||
Phi-4 (14B) | 55 | 35 |
Qwen2.5-Coder-7B-Instruct | 44 | 39 |
Qwen-2.5-7B-Instruct | 47 | 34 |
Tiny-Agent-a-3B | 72 | 34 |
Qwen2.5-Coder-3B-Instruct | 26 | 37 |
Tiny-Agent-a-1.5B | 73 | 30 |
引用
@misc{Dria-Agent-a,
url={https://huggingface.co/blog/andthattoo/dria-agent-a},
title={Dria-Agent-a},
author={"andthattoo", "Atakan Tekparmak"}
}
Phi 2 GGUF
其他
Phi-2是微软开发的一个小型但强大的语言模型,具有27亿参数,专注于高效推理和高质量文本生成。
大型语言模型
支持多种语言
P
TheBloke
41.5M
205
Roberta Large
MIT
基于掩码语言建模目标预训练的大型英语语言模型,采用改进的BERT训练方法
大型语言模型
英语
R
FacebookAI
19.4M
212
Distilbert Base Uncased
Apache-2.0
DistilBERT是BERT基础模型的蒸馏版本,在保持相近性能的同时更轻量高效,适用于序列分类、标记分类等自然语言处理任务。
大型语言模型
英语
D
distilbert
11.1M
669
Llama 3.1 8B Instruct GGUF
Meta Llama 3.1 8B Instruct 是一个多语言大语言模型,针对多语言对话用例进行了优化,在常见的行业基准测试中表现优异。
大型语言模型
英语
L
modularai
9.7M
4
Xlm Roberta Base
MIT
XLM-RoBERTa是基于100种语言的2.5TB过滤CommonCrawl数据预训练的多语言模型,采用掩码语言建模目标进行训练。
大型语言模型
支持多种语言
X
FacebookAI
9.6M
664
Roberta Base
MIT
基于Transformer架构的英语预训练模型,通过掩码语言建模目标在海量文本上训练,支持文本特征提取和下游任务微调
大型语言模型
英语
R
FacebookAI
9.3M
488
Opt 125m
其他
OPT是由Meta AI发布的开放预训练Transformer语言模型套件,参数量从1.25亿到1750亿,旨在对标GPT-3系列性能,同时促进大规模语言模型的开放研究。
大型语言模型
英语
O
facebook
6.3M
198
Llama 3.1 8B Instruct
Llama 3.1是Meta推出的多语言大语言模型系列,包含8B、70B和405B参数规模,支持8种语言和代码生成,优化了多语言对话场景。
大型语言模型
Transformers

支持多种语言
L
meta-llama
5.7M
3,898
T5 Base
Apache-2.0
T5基础版是由Google开发的文本到文本转换Transformer模型,参数规模2.2亿,支持多语言NLP任务。
大型语言模型
支持多种语言
T
google-t5
5.4M
702
Xlm Roberta Large
MIT
XLM-RoBERTa是基于100种语言的2.5TB过滤CommonCrawl数据预训练的多语言模型,采用掩码语言建模目标进行训练。
大型语言模型
支持多种语言
X
FacebookAI
5.3M
431
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers

支持多种语言
L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers

英语
C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统
中文
R
uer
2,694
98
AIbase是一个专注于MCP服务的平台,为AI开发者提供高质量的模型上下文协议服务,助力AI应用开发。
简体中文