qwen3 + qwen agent

前不久阿里发布了qwen3开源模型,据说性能比deepeek还要强,之前体验过qwen2.5当时感觉还不错,据说现在的qwen3 8b就相当于qwen2.5的14b性能,不过我也不是专业人员,也不知道到底是有多强,只是个人感兴趣玩一下.

这次主要来实践的还是阿里配套的qwen agwnt框架,这个框架主要目的还是方便模型来调用外部工具,且原生支持mcp协议

qwen agent

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 $。",
    },
]

 

 

你可能感兴趣的:(python,ai)