中文 | 英语
Qwen-Agent 是一个基于 Qwen 的指令遵循、工具使用、规划和记忆功能开发 LLM 应用程序的框架。它还附带示例应用程序,例如浏览器助手、代码解释器和自定义助手。
2024年9月18日:添加了Qwen2.5-Math演示,以展示Qwen2.5-Math的工具集成推理功能。注意:python 执行器没有沙箱化,仅用于本地测试,不适用于生产用途。
从 PyPI 安装稳定版本:
pip install -U "qwen-agent[gui,rag,code_interpreter,python_executor]"# 或者使用 `pip install -U qwen-agent` 来满足最低要求。# 可选要求,在双括号中指定,包括:# [gui ] 用于基于 Gradio 的 GUI 支持;# [rag] 用于 RAG 支持;# [code_interpreter] 用于代码解释器支持;# [python_executor] 用于工具集成推理Qwen2.5-数学。
或者,您可以从源安装最新的开发版本:
git 克隆 https://github.com/QwenLM/Qwen-Agent.gitcd Qwen-Agent pip install -e ./"[gui,rag,code_interpreter,python_executor]"# 或 `pip install -e ./` 以满足最低要求。
您可以使用阿里云DashScope提供的模型服务,也可以使用开源的Qwen模型部署并使用您自己的模型服务。
如果您选择使用 DashScope 提供的模型服务,请确保将环境变量DASHSCOPE_API_KEY
设置为您唯一的 DashScope API 密钥。
或者,如果您更愿意部署和使用自己的模型服务,请按照 Qwen2 README 中提供的说明来部署 OpenAI 兼容的 API 服务。具体而言,请参阅 vLLM 部分了解高吞吐量 GPU 部署,或参阅 Ollama 部分了解本地 CPU (+GPU) 部署。
Qwen-Agent 提供原子组件,例如 LLM(继承自class BaseChatModel
并带有函数调用)和工具(继承自class BaseTool
),以及高级组件,如 Agents(派生自class Agent
)。
以下示例说明了创建能够读取 PDF 文件并利用工具以及合并自定义工具的代理的过程:
import pprintimport urllib.parseimport json5from qwen_agent.agents import Assistantfrom qwen_agent.tools.base import BaseTool, register_tool# 第 1 步(可选):添加名为 `my_image_gen` 的自定义工具。@register_tool('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 生成的参数agent.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.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- Chat',# 'model_server': 'http://localhost:8000/v1', #base_url,也称为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` 是一个用于执行 code 的内置工具.files = ['./examples/resource/doc.pdf' ] # 给机器人一个 PDF 文件来读取.bot = Assistant(llm=llm_cfg,system_message=system_instruction,function_list=tools,files=files)# 步骤 4: 将代理作为聊天机器人运行.messages = [] # 这将存储聊天历史记录。 while True:# 例如,输入查询"画一只狗并将其旋转 90 度".query = input('用户查询: ')# 将用户查询附加到聊天中History.messages.append({'role': 'user', 'content': query})response = []for response in bot.run(messages=messages):# 流式输出.print('bot response:') pprint.pprint(response, indent=2)# 将机器人响应附加到聊天历史记录中。messages.extend(response)
除了使用内置代理实现(例如class Assistant
之外,您还可以通过继承class Agent
来开发自己的代理实现。更多使用示例请参阅示例目录。
是的。 LLM 类提供函数调用。另外,一些Agent类也建立在函数调用能力之上,例如FnCallAgent和ReActChat。
我们发布了快速的 RAG 解决方案,以及昂贵但有竞争力的代理,用于对超长文档进行问答。它们在两个具有挑战性的基准测试中成功地超越了原生长上下文模型,同时效率更高,并且在涉及 1M 代币上下文的单针“大海捞针”压力测试中表现完美。有关技术详细信息,请参阅博客。
BrowserQwen 是一个基于 Qwen-Agent 构建的浏览器助手。详细信息请参阅其文档。
代码解释器没有沙箱,它在您自己的环境中执行代码。请不要让Qwen执行危险任务,也不要直接将代码解释器用于生产目的。