??Qwen-Agent是一個(gè)開發(fā)框架。開發(fā)者可基于該框架開發(fā)Agent應(yīng)用,充分利用基于通義千問模型(Qwen)的指令遵循、工具使用、規(guī)劃、記憶能力。該項(xiàng)目也提供了瀏覽器助手、代碼解釋器、自定義助手等示例應(yīng)用。
Hello,大家好,我是Aitrainee,
阿里巴巴最近發(fā)布了新的 Qwen 2 大型語言模型和升級后的 Qwen Agent 框架,這個(gè)框架集成了 Qwen 2 模型,支持函數(shù)調(diào)用、代碼解釋、RAG(檢索增強(qiáng)生成)等功能,還包含了 Chrome 擴(kuò)展。Qwen Agent 能處理從 8K 到 100 萬 tokens 的文檔,性能超越了RAG 和原生長上下文模型,并用于生成訓(xùn)練新長上下文模型的數(shù)據(jù)。
Qwen Agent 框架可用于創(chuàng)建復(fù)雜的 AI 代理,展示了其強(qiáng)大的任務(wù)處理能力。新框架采用四步法開發(fā):初始模型開發(fā)、代理開發(fā)、數(shù)據(jù)綜合和模型微調(diào)。通過 RAG 算法處理長文檔,將文檔分成小塊,保留最相關(guān)的部分,從而提升上下文處理能力。
具體步驟包括檢索增強(qiáng)生成、逐塊閱讀和逐步推理等三層復(fù)雜性,使用 RAG 算法處理并優(yōu)化文檔片段,以便提供準(zhǔn)確的上下文理解和生成能力。實(shí)驗(yàn)表明,Qwen Agent 能顯著提升模型的上下文長度和性能。
建議觀看之前的視頻以獲取更多實(shí)用示例,Qwen 2 是目前最強(qiáng)大的開源語言模型之一,推薦嘗試使用??蚣懿僮骱啽悖性敿?xì)教程幫助用戶快速上手。
這一框架的目標(biāo)是創(chuàng)建復(fù)雜的AI代理,其表現(xiàn)優(yōu)于其他代理框架。下面視頻展示了如何利用Qwen-2模型及其8K上下文窗口理解包含百萬級詞匯的文檔,這比RAG和原生長上下文模型表現(xiàn)更好。
Qwen-Agent 開發(fā)步驟
1. 初始模型:從8K上下文聊天模型開始。
2. 代理開發(fā):使用模型開發(fā)強(qiáng)大的代理,處理百萬上下文。
3. 數(shù)據(jù)合成:合成細(xì)化數(shù)據(jù),進(jìn)行自動(dòng)過濾確保質(zhì)量。
4. 模型微調(diào):利用合成數(shù)據(jù)微調(diào)預(yù)訓(xùn)練模型,最終得到強(qiáng)大的聊天機(jī)器人。
Qwen-Agent在構(gòu)建過程中分為三層復(fù)雜性,每層在前一層基礎(chǔ)上構(gòu)建:
1. 增強(qiáng)型信息檢索生成(RAG):使用RAG算法將上下文分成不超過512詞的塊,僅保留最相關(guān)的內(nèi)容。
2. 逐塊閱讀:采用暴力策略,每512詞塊檢查相關(guān)性,保留最相關(guān)的內(nèi)容生成答案。
3. 逐步推理:使用多跳推理回答復(fù)雜問題,采用工具調(diào)用代理解決復(fù)雜查詢。
下面提供官方的文檔介紹、相關(guān)資源、部署教程等,進(jìn)一步支撐你的行動(dòng),以提升本文的幫助力。
· 安裝穩(wěn)定的版本:
pip install -U qwen-agent
· 或者,直接從源代碼安裝最新的版本:
git clone https://github.com/QwenLM/Qwen-Agent.git
cd Qwen-Agent
pip install -e ./
如需使用內(nèi)置GUI支持,請安裝以下可選依賴項(xiàng):
pip install -U 'gradio>=4.0' 'modelscope-studio>=0.2.1'
Qwen-Agent支持接入阿里云DashScope服務(wù)提供的Qwen模型服務(wù),也支持通過OpenAI API方式接入開源的Qwen模型服務(wù)。
· 如果希望接入DashScope提供的模型服務(wù),只需配置相應(yīng)的環(huán)境變量DASHSCOPE_API_KEY
為您的DashScope API Key。
· 或者,如果您希望部署并使用您自己的模型服務(wù),請按照Qwen2的README中提供的指導(dǎo)進(jìn)行操作,以部署一個(gè)兼容OpenAI接口協(xié)議的API服務(wù)。具體來說,請參閱vLLM一節(jié)了解高并發(fā)的GPU部署方式,或者查看Ollama一節(jié)了解本地CPU(+GPU)部署。
框架提供了大模型(LLM,繼承自class BaseChatModel
,并提供了Function Calling功能)和工具(Tool,繼承自class BaseTool
)等原子組件,也提供了智能體(Agent)等高級抽象組件(繼承自class Agent
)。
以下示例演示了如何增加自定義工具,并快速開發(fā)一個(gè)帶有設(shè)定、知識庫和工具使用能力的智能體:
import pprint
import urllib.parse
import json5
from qwen_agent.agents import Assistant
from qwen_agent.tools.base import BaseTool, register_tool
# 步驟 1(可選):添加一個(gè)名為 `my_image_gen` 的自定義工具。
@register_tool('my_image_gen')
class MyImageGen(BaseTool):
# `description` 用于告訴智能體該工具的功能。
description = 'AI 繪畫(圖像生成)服務(wù),輸入文本描述,返回基于文本信息繪制的圖像 URL。'
# `parameters` 告訴智能體該工具有哪些輸入?yún)?shù)。
parameters = [{
'name': 'prompt',
'type': 'string',
'description': '期望的圖像內(nèi)容的詳細(xì)描述',
'required': True
}]
def call(self, params: str, **kwargs) -> str:
# `params` 是由 LLM 智能體生成的參數(shù)。
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 提供的模型服務(wù):
'model': 'qwen-max',
'model_server': 'dashscope',
# 'api_key': 'YOUR_DASHSCOPE_API_KEY',
# 如果這里沒有設(shè)置 'api_key',它將讀取 `DASHSCOPE_API_KEY` 環(huán)境變量。
# 使用與 OpenAI API 兼容的模型服務(wù),例如 vLLM 或 Ollama:
# 'model': 'Qwen2-7B-Chat',
# 'model_server': 'http://localhost:8000/v1', # base_url,也稱為 api_base
# 'api_key': 'EMPTY',
# (可選) LLM 的超參數(shù):
'generate_cfg': {
'top_p': 0.8
}
}
# 步驟 3:創(chuàng)建一個(gè)智能體。這里我們以 `Assistant` 智能體為例,它能夠使用工具并讀取文件。
system_instruction = '''你是一個(gè)樂于助人的AI助手。
在收到用戶的請求后,你應(yīng)該:
- 首先繪制一幅圖像,得到圖像的url,
- 然后運(yùn)行代碼`request.get`以下載該圖像的url,
- 最后從給定的文檔中選擇一個(gè)圖像操作進(jìn)行圖像處理。
用 `plt.show()` 展示圖像。
你總是用中文回復(fù)用戶。'''
tools = ['my_image_gen', 'code_interpreter'] # `code_interpreter` 是框架自帶的工具,用于執(zhí)行代碼。
files = ['./examples/resource/doc.pdf'] # 給智能體一個(gè) PDF 文件閱讀。
bot = Assistant(llm=llm_cfg,
system_message=system_instruction,
function_list=tools,
files=files)
# 步驟 4:作為聊天機(jī)器人運(yùn)行智能體。
messages = [] # 這里儲存聊天歷史。
while True:
# 例如,輸入請求 '繪制一只狗并將其旋轉(zhuǎn) 90 度'。
query = input('用戶請求: ')
# 將用戶請求添加到聊天歷史。
messages.append({'role': 'user', 'content': query})
response = []
for response in bot.run(messages=messages):
# 流式輸出。
print('機(jī)器人回應(yīng):')
pprint.pprint(response, indent=2)
# 將機(jī)器人的回應(yīng)添加到聊天歷史。
messages.extend(response)
除了使用框架自帶的智能體實(shí)現(xiàn)(如class Assistant
),您也可以通過繼承class Agent
來自行開發(fā)您的智能體實(shí)現(xiàn)。更多使用示例,請參閱examples目錄。
支持,LLM類提供了函數(shù)調(diào)用的支持。此外,一些Agent類如FnCallAgent和ReActChat也是基于函數(shù)調(diào)用功能構(gòu)建的。
我們已發(fā)布了一個(gè)快速的RAG解決方案,以及一個(gè)雖運(yùn)行成本較高但準(zhǔn)確度較高的智能體,用于在超長文檔中進(jìn)行問答。它們在兩個(gè)具有挑戰(zhàn)性的基準(zhǔn)測試中表現(xiàn)出色,超越了原生的長上下文模型,同時(shí)更加高效,并在涉及100萬字詞上下文的“大海撈針”式單針查詢壓力測試中表現(xiàn)完美。欲了解技術(shù)細(xì)節(jié),請參閱博客。
BrowserQwen 是一款基于 Qwen-Agent 構(gòu)建的瀏覽器助手。如需了解詳情,請參閱其文檔。
文檔:https://pypi.org/project/qwen-agent/
博客:https://qwenlm.github.io/blog/qwen-agent
知音難求,自我修煉亦艱
抓住前沿技術(shù)的機(jī)遇,與我們一起成為創(chuàng)新的超級個(gè)體
(把握AIGC時(shí)代的個(gè)人力量)