微信扫码
与创始人交个朋友
我要投稿
随着人工智能技术的飞速发展,大型语言模型(LLM)在各个领域展现出了巨大的潜力。Qwen-Agent,一个基于Qwen模型的框架,为开发者提供了一个强大的工具,以实现指令跟随、工具使用、规划和记忆等高级功能。本文将详细介绍Qwen-Agent的基本概念、技术特点、功能优势以及实际代码实践,旨在为读者提供一个全面的视角,以便更好地理解和应用这一框架。
Qwen-Agent 是一款多功能的开发框架,专为构建基于大型语言模型(LLM)的智能Agent应用而设计。该框架深度整合了通义千问模型(Qwen),赋予开发者强大的指令遵循、工具运用、策略规划以及持久记忆等核心能力。
通过Qwen-Agent,开发者能够便捷地开发出功能丰富的Agent应用,同时,项目还提供了浏览器助手、代码解释器、自定义助手等一系列实用的示例应用,帮助开发者快速理解和掌握框架的使用。
此外,Qwen-Agent 提供了全面的API接口,极大地简化了二次开发和系统集成的过程,让开发者能够灵活地扩展和定制自己的应用程序。无论是想要提升现有产品的智能化水平,还是创造全新的智能解决方案,Qwen-Agent 都是一个强大而灵活的开发平台。
Qwen-Agent的技术架构由以下几个核心组件构成:
语言模型(LLMs):提供基础的语言处理能力。
Qwen-Agent支持接入阿里云DashScope服务提供的Qwen模型服务,也支持通过OpenAI API方式接入开源的Qwen模型服务。这种灵活性使得开发者可以根据项目需求选择合适的模型服务。
通过工具集成,Qwen-Agent的智能代理可以自动化执行复杂的任务。这些工具可以是内置的,也可以是开发者根据特定需求自定义的。
Qwen-Agent的智能代理具备任务规划能力,能够根据用户的需求制定和执行计划。同时,它们还具备记忆功能,能够保持对话的连贯性,提供更加自然和人性化的交互体验。
Qwen-Agent支持多模态交互,结合图像、语音等多种模态进行交互,这为开发更加丰富和直观的智能代理应用提供了可能。
Qwen-Agent 的安装部署过程简单明了,可以通过以下步骤快速开始:
pip install -U qwen-agent
git clone https://github.com/QwenLM/Qwen-Agent.git
cd Qwen-Agent
pip install -e ./
pip install -U qwen-agent[gui]
# 或,从源代码安装最新版本: pip install -e ./[gui]
六、开发实践
框架提供了大模型(LLM,继承自class BaseChatModel,并提供了Function Calling功能)和工具(Tool,继承自class BaseTool)等原子组件,也提供了智能体(Agent)等高级抽象组件(继承自class Agent)。
import pprint
import urllib.parse
import json5
from qwen_agent.agents import Assistant
from qwen_agent.tools.base import BaseTool, register_tool
第1步(可选):定义工具函数
添加一个名为`my_image_gen`的自定义工具。
class MyImageGen(BaseTool):
# `description`告诉代理这个工具的功能。
description = 'AI绘画(图像生成)服务,输入文本描述,并返回基于文本信息绘制的图像URL。'
# `parameters`告诉代理工具有哪些输入参数。
parameters = [{
'name': 'prompt',
'type': 'string',
'description': '所需图像内容的详细描述,用中文',
'required': True
}]
def call(self, params: str, **kwargs) -> str:
# `params`是由LLM代理生成的参数。
prompt = json5.loads(params)['prompt']
prompt = urllib.parse.quote(prompt)
return json5.dumps({'image_url': f'https://image.pollinations.ai/prompt/{prompt}'},ensure_ascii=False)
第2步:定义LLM
您可以选择使用阿里云的 DashScope 提供的模型服务,或者使用开源的 Qwen 模型部署和使用自己本地部署的模型服务。
如果您选择使用 DashScope 提供的模型服务,需要先到阿里云注册获取唯一的 DashScope API 密钥。
llm_cfg = {
# 使用阿里云上DashScope提供模型服务(需要提前注册开通)
'model': 'qwen-max',
'model_server': 'dashscope',
'api_key': 'YOUR_DASHSCOPE_API_KEY',
# 如果这里没有设置'api_key',它将使用环境变量`DASHSCOPE_API_KEY`。
# 使用与OpenAI API兼容的模型服务,例如vLLM或Ollama:
# 'model': 'Qwen2-7B-Instruct',
# 'model_server': 'http://localhost:8000/v1', # api_base
# 'api_key': 'EMPTY',
# (可选)生成的LLM超参数:
'generate_cfg': {
'top_p': 0.8
}
}
第3步:创建一个代理
这里我们使用Assistant代理作为示例,它能够使用工具和读取文件。
system_instruction = '''
你是一个乐于助人的助手。收到用户的请求后,你应该:
- 首先绘制一张图像并获取图像URL,
- 然后运行代码`request.get(image_url)`来下载图像,
- 最后从给定的文档中选择一个图像操作来处理图像。
请使用`plt.show()`显示图像。
'''
tools = ['my_image_gen', 'code_interpreter']
#`code_interpreter`是内置的代码执行工具。
#files = ['doc.pdf'] # 给机器人一个PDF文件来读取。
files = ['showImage.docx'] # 给机器人一个PDF文件来读取。
bot = Assistant(llm=llm_cfg,
system_message=system_instruction,
function_list=tools,
files=files
第4步:定义多轮对话机器人
将代理作为聊天机器人运行。
messages = [] # 这存储聊天记录。
while True:
# 例如,输入查询"画一只狗并将其旋转90度"。
query = input('用户查询:')
# 将用户查询添加到聊天记录中。
messages.append({'role': 'user', 'content': query})
response = []
for response in bot.run(messages=messages):
# 流式输出。
print('机器人响应:')
pprint.pprint(response, indent=2)
# 将机器人响应添加到聊天记录中。
messages.extend(response)
测试效果如下:
返回输出:
2024-07-02 10:13:31,961 - split_query.py - 82 - INFO - Extracted info from query: {"information": ["一只东北虎 2024-07-02 10:13:33,892 - memory.py - 113 - INFO - {"keywords_zh": ["东北虎", "一只"], "keywords_en": ["Siberian tiger", "one"], "text": "一只东北虎"} 2024-07-02 10:13:33,893 - simple_doc_parser.py - 326 - INFO - Start parsing showImage.docx... 2024-07-02 10:13:33,933 - simple_doc_parser.py - 365 - INFO - Finished parsing showImage.docx. Time spent: 0.03966975212097168 seconds. 2024-07-02 10:13:33,934 - doc_parser.py - 114 - INFO - Start chunking showImage.docx (showImage.docx)... 2024-07-02 10:13:33,934 - doc_parser.py - 132 - INFO - Finished chunking showImage.docx (showImage.docx). Time spent: 5.602836608886719e-05 seconds. 2024-07-02 10:13:33,935 - base_search.py - 55 - INFO - all tokens: 222 2024-07-02 10:13:33,936 - base_search.py - 58 - INFO - use full ref 机器人响应: [ { 'content': '', 'function_call': {'arguments': '', 'name': 'my_image_gen'}, 'role': 'assistant'}] 机器人响应: [ { 'content': '', 'function_call': {'arguments': '{"prompt":"一只', 'name': 'my_image_gen'}, 'role': 'assistant'}] 机器人响应: [ { 'content': '', 'function_call': { 'arguments': '{"prompt":"一只东北虎"}', 'name': 'my_image_gen'}, 'role': 'assistant'}] 。。。。。。 机器人响应: [ { 'content': '', 'function_call': { 'arguments': '{"prompt":"一只东北虎"}', 'name': 'my_image_gen'}, 'role': 'assistant'}, { 'content': '{image_url: ' '"https://image.pollinations.ai/prompt/%E4%B8%80%E5%8F%AA%E4%B8%9C%E5%8C%97%E8%99%8E"}', 'name': 'my_image_gen', 'role': 'function'}, { 'content': '', 'function_call': { 'arguments': '```py\n' 'import requests\n' 'from PIL import Image\n' 'import matplotlib.pyplot as plt\n' 'import io\n' '\n' '# 获取图像URL\n' 'image_url = ' '"https://image.pollinations.ai/prompt/%E4%B8%80%E5%8F%AA%E4%B8%9C%E5%8C%97%E8%99%8E"\n' '\n' '# 发送 GET 请求下载图片\n' 'response = requests.get(image_url)\n' '\n' '# 确保请求成功\n' 'if response.status_code == 200:\n' ' # 使用 BytesIO 来创建一个可读的字节流\n' ' image_stream = ' 'io.BytesIO(response.content)\n' ' # 打开图片\n' ' image = Image.open(image_stream)\n' ' # 显示图像\n' ' plt.imshow(image)\n' " plt.axis('off') # 关闭坐标轴显示\n" ' plt.show()\n' 'else:\n' ' print(f"Failed to download image, ' 'status code: {response.status_code}")\n' '```', 'name': 'code_interpreter'}, 'role': 'assistant'}, { 'content': '![fig-001](workspace/tools/code_interpreter/99b8207e-1423-4c22-b585-113ef1c2cb5e.png)', 'name': 'code_interpreter', 'role': 'function'}, {'content': '上图是一只东北虎的图像。', 'role': 'assistant'}]
|
可以看到图片已经成功保存到本地:workspace/tools/code_interpreter/99b8207e-1423-4c22-b585-113ef1c2cb5e.png
参考引用
Qwen-Agent 官方文档:https://qwen.readthedocs.io/
Qwen-Agent GitHub 仓库:https://github.com/QwenLM/Qwen-Agent
点亮“关注”,设为“星标”,精彩不迷路!我们携手探索AI的无限可能,精彩内容,持续为您更新!
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-12-22
MJ提示:希望
2024-12-22
剧本文字分镜的提示词
2024-12-20
写提示词要丢掉框架?跟"Prompt 之神"李继刚学习:AI 小白的 5 个进阶指南
2024-12-20
【全方位解析】企业如何通过提示词工程优化AI输出,提升市场竞争力—慢慢学AI045
2024-12-20
AI大厂Claude 官方深度解析:提示词工程的最佳实践
2024-12-19
PromptWizard:微软推出自家APE框架,主打“任务感知”,性能不错成本还低
2024-12-19
这个提示词自动优化器很好用,一句话就生成完美的提示词(prompt), 可以免费用
2024-12-19
大模型 Prompt 调戏:最佳提示词指南
2024-06-29
2024-08-20
2023-06-08
2024-06-27
2024-06-14
2024-07-09
2024-09-17
2024-07-12
2024-06-26
2024-09-06