前不久阿里发布了qwen3开源模型,据说性能比deepeek还要强,之前体验过qwen2.5当时感觉还不错,据说现在的qwen3 8b就相当于qwen2.5的14b性能,不过我也不是专业人员,也不知道到底是有多强,只是个人感兴趣玩一下.
这次主要来实践的还是阿里配套的qwen agwnt框架,这个框架主要目的还是方便模型来调用外部工具,且原生支持mcp协议
Qwen-Agent 是阿里巴巴开源的一个智能体(Agent)应用开发框架,基于通义千问(Qwen)大语言模型构建。它旨在帮助开发者快速搭建具备指令遵循、工具调用、记忆能力和多代理协作等功能的AI智能体应用 。
本次模型还是部署在lm studio上,不知道怎么部署的可以翻一下之前的文章
https://blog.csdn.net/winerpro/article/details/147027367?sharetype=blog&shareId=147027367&sharerefer=APP&sharesource=winerpro&sharefrom=link
from qwen_agent.agents import Assistant
from qwen_agent.tools.base import BaseTool, register_tool
import json5
# 步骤1:定义计算器工具
@register_tool('simple_calculator')
class SimpleCalculator(BaseTool):
description = '执行基础数学运算的计算器'
parameters = [{
'name': 'expression',
'type': 'string',
'description': '数学表达式,例如:(3 + 5) * 2',
'required': True
}]
def call(self, params: str, **kwargs) -> str:
try:
expr = json5.loads(params)['expression']
result = eval(expr)
return json5.dumps({'result': result, 'expression': expr})
except Exception as e:
return json5.dumps({'error': str(e)})
# 步骤2:配置LLM(使用本地模型)
llm_cfg = {
'model': 'qwen3-8b',
'model_server': 'http://127.0.0.1:1234/v1'
}
# 步骤3:创建仅包含计算功能的Agent
bot = Assistant(
llm=llm_cfg,
system_message="你是一个数学计算助手,只能执行基础运算任务。",
function_list=['simple_calculator'],
)
# 步骤4:测试计算功能
test_cases = [
"(12 + 8) * 5"
]
for expr in test_cases:
# , {'role': 'user', 'content': '/no_think'}
response = list(bot.run_nonstream([{'role': 'user', 'content': f"计算:{expr}"}]))
print(f"输入: {expr}")
# print(f"输出: {response[-1][0]['content']}\n")
js = json5.dumps(response, indent=4, ensure_ascii=False)
print(f"输出: {js}")
注意: 这里开源版的qwen3默认是打开了推理模式的, 由于使用的是lm studio社区的模型文件, 因此它关闭推理模式的方式与官方还是有点区别的, 需要在提示词的结尾添加/no_think
输入: (12 + 8) * 5
输出: [
{
role: "assistant",
content: "\n好的,用户让我计算(12 + 8) * 5。首先我需要确认这是一个基础的数学运算,需要用到括号里的加法,然后乘以5。根据提供的工具,有一个simple_calculator函数可以处理这样的表达式。我要确保输入的表达式格式正确,符合函数的要求。这里用户已经用括号明确标明了运算顺序,所以直接传递这个字符串给计算器就可以了。不需要分解步骤,因为函数会处理整个表达式。检查一下是否有其他可能的问题,比如符号或者括号匹配,但看起来没问题。所以应该调用simple_calculator,参数是\"(12 + 8) * 5\"。\n \n\n",
},
{
role: "assistant",
content: "",
function_call: {
name: "simple_calculator",
arguments: "{\"expression\": \"(12 + 8) * 5\"}",
},
},
{
role: "function",
content: "{result: 100, expression: \"(12 + 8) * 5\"}",
name: "simple_calculator",
},
{
role: "assistant",
content: "\n \n\n计算结果为:100",
},
]
输入: (12 + 8) * 5
输出: [
{
role: "assistant",
content: "\n\n \n\n",
},
{
role: "assistant",
content: "",
function_call: {
name: "simple_calculator",
arguments: "{\"expression\": \"(12 + 8) * 5\"}",
},
},
{
role: "function",
content: "{result: 100, expression: \"(12 + 8) * 5\"}",
name: "simple_calculator",
},
{
role: "assistant",
content: "\n\n \n\n计算结果是:$ (12 + 8) \\times 5 = 100 $。",
},
]