【AI大模型Agent探索】Qwen-Agent之RAG智能助手实践

系列篇章💥

No. 文章
1 【Qwen部署实战】探索Qwen-7B-Chat:阿里云大型语言模型的对话实践
2 【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人
3 【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用
4 【Qwen2部署实战】Ollama上的Qwen2-7B:一键部署大型语言模型指南
5 【Qwen2部署实战】llama.cpp:一键部署高效运行Qwen2-7B模型
6 【Qwen2部署实战】部署高效AI模型:使用vLLM进行Qwen2-7B模型推理
7 【AI大模型Agent探索】Qwen-Agent:基于Qwen的LLM应用开发框架
8 【AI大模型Agent探索】深入探索实践 Qwen-Agent 的 Function Calling
9 【AI大模型Agent探索】Qwen-Agent之RAG智能助手实践

目录


引言

在人工智能的不断演进中,大模型如雨后春笋般涌现,它们在处理语言、生成内容、辅助决策等方面展现出令人瞩目的能力。Qwen-Agent,作为这一领域的新星,以其独特的架构和功能,为开发者提供了与这些强大模型互动的新途径。特别是其RAG(Retrieval-Augmented Generation)能力,它允许模型在生成回答前检索相关信息,极大地增强了AI助手的智能性和实用性。本文将深入探讨Qwen-Agent的RAG智能助手实践,揭示其如何通过结合AI大模型与外部工具,实现更深层次的自动化服务。

一、概述

本文专注于探索 Qwen-Agent 框架中的 RAG(Retrieval-Augmented Generation)功能,这一技术通过增强 AI 模型的检索能力,显著提升了智能助手的性能和应用范围。

RAG 技术概览

RAG 技术通过整合检索机制,允许 AI 模型在生成回答之前访问和分析大量外部数据。这种能力使得智能助手能够提供更加准确和详细的信息,尤其是在处理需要广泛背景知识的问题时。

Qwen-Agent 与 RAG

Qwen-Agent 框架通过其 RAG 实现,为开发者提供了构建智能助手的工具。本文将详细介绍如何在 Qwen-Agent 中部署和使用 RAG 功能,以及如何通过它来增强 AI 助手的信息检索和生成能力。

通过一系列实践案例,本文将展示 RAG 智能助手在处理文档检索和问答任务中的实际应用。这些案例将涵盖从技术配置到功能实现的完整流程,为开发者提供宝贵的参考和指导。

二、安装实操

Qwen-Agent 的安装部署过程简单明了,可以通过以下步骤快速开始:

bash 复制代码
   pip install -U qwen-agent

从 GitHub 安装最新版本

bash 复制代码
   git clone https://github.com/QwenLM/Qwen-Agent.git
   cd Qwen-Agent
   pip install -e ./

安装可选依赖(如果需要内置 GUI 支持):

bash 复制代码
 pip install -U qwen-agent[gui]
# 或,从源代码安装最新版本: pip install -e ./[gui]

三、本地模型部署

先采用vLLM进行Qwen2-7B模型部署,启用OpenAI风格的API接口,

下载Qwen2-7B-Instruct 到本地/root/autodl-tmp/qwen目录,执行下面命令,启动OpenAI风格的API接口

bash 复制代码
python -m vllm.entrypoints.openai.api_server --model /root/autodl-tmp/qwen/Qwen2-7B-Instruct  --served-model-name Qwen2-7B-Instruct --max-model-len=2048

具体参考文章:《部署高效AI模型:使用vLLM进行Qwen2-7B模型推理》

四、RAG智能助手

1、导入依赖库

python 复制代码
from qwen_agent.agents import Assistant

# 从qwen_agent.llm模块导入get_chat_model函数
from qwen_agent.llm import get_chat_model

2、定义一个Agent

python 复制代码
# Define the agent
bot = Assistant(llm={'model': 'Qwen2-7B-Instruct','model_server': 'http://localhost:8000/v1'},
                name='Assistant',
                description='使用RAG检索并回答,支持文件类型:PDF/Word/PPT/TXT/HTML。')

3、机器人对话调用1

python 复制代码
messages = [{'role': 'user', 'content': [{'text': '文章标题是什么?'}, {'file': '谜语问答游戏.docx'}]}]
for rsp in bot.run(messages):
    print(rsp)
python 复制代码
2024-07-02 09:13:01,156 - split_query.py - 82 - INFO - Extracted info from query: {"information": ["文章标题
2024-07-02 09:13:01,598 - memory.py - 113 - INFO - {"keywords_zh": ["文章标题"], "keywords_en": ["Article Title"], "text": "文章标题"}
2024-07-02 09:13:01,599 - simple_doc_parser.py - 326 - INFO - Start parsing 谜语问答游戏.docx...
2024-07-02 09:13:01,656 - simple_doc_parser.py - 365 - INFO - Finished parsing 谜语问答游戏.docx. Time spent: 0.05669236183166504 seconds.
2024-07-02 09:13:01,658 - doc_parser.py - 114 - INFO - Start chunking 谜语问答游戏.docx (谜语问答游戏.docx)...
2024-07-02 09:13:01,658 - doc_parser.py - 132 - INFO - Finished chunking 谜语问答游戏.docx (谜语问答游戏.docx). Time spent: 5.7220458984375e-05 seconds.
2024-07-02 09:13:01,659 - base_search.py - 55 - INFO - all tokens: 311
2024-07-02 09:13:01,660 - base_search.py - 58 - INFO - use full ref
[{'role': 'assistant', 'content': '文章', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '文章标题', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '文章标题是', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '文章标题是"', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '文章标题是"谜', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '文章标题是"谜语', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '文章标题是"谜语问答', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '文章标题是"谜语问答游戏', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '文章标题是"谜语问答游戏"。', 'name': 'Assistant'}]

4、机器人对话调用2

python 复制代码
messages = [{'role': 'user', 'content': [{'text': '什么东西会上升但不会下降?'}, {'file': '谜语问答游戏.docx'}]}]
for rsp in bot.run(messages):
print(rsp)

输出:

python 复制代码
2024-07-02 09:17:03,950 - split_query.py - 82 - INFO - Extracted info from query: {"information": ["什么东西会上升但不会下降?
2024-07-02 09:17:04,488 - memory.py - 113 - INFO - {"keywords_zh": ["上升", "下降"], "keywords_en": ["increase", "decrease"], "text": "什么东西会上升但不会下降?"}
2024-07-02 09:17:04,515 - simple_doc_parser.py - 324 - INFO - Read parsed 谜语问答游戏.docx from cache.
2024-07-02 09:17:04,516 - doc_parser.py - 114 - INFO - Start chunking 谜语问答游戏.docx (谜语问答游戏.docx)...
2024-07-02 09:17:04,516 - doc_parser.py - 132 - INFO - Finished chunking 谜语问答游戏.docx (谜语问答游戏.docx). Time spent: 3.743171691894531e-05 seconds.
2024-07-02 09:17:04,517 - base_search.py - 55 - INFO - all tokens: 311
2024-07-02 09:17:04,517 - base_search.py - 58 - INFO - use full ref
[{'role': 'assistant', 'content': '你的', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '你的年龄', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '你的年龄会上', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '你的年龄会上升', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '你的年龄会上升但', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '你的年龄会上升但不会', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '你的年龄会上升但不会下降', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '你的年龄会上升但不会下降。', 'name': 'Assistant'}]

5、机器人对话调用3

python 复制代码
messages = [{'role': 'user', 'content': [{'text': '什么是属于你的,但其他人比你使用它更多?'}, {'file': '谜语问答游戏.docx'}]}]
for rsp in bot.run(messages):
print(rsp)

输出:

python 复制代码
2024-07-02 09:16:37,530 - split_query.py - 82 - INFO - Extracted info from query: {"information": ["属于你的,但其他人比你使用它更多
2024-07-02 09:16:38,446 - simple_doc_parser.py - 324 - INFO - Read parsed 谜语问答游戏.docx from cache.
2024-07-02 09:16:38,447 - doc_parser.py - 114 - INFO - Start chunking 谜语问答游戏.docx (谜语问答游戏.docx)...
2024-07-02 09:16:38,448 - doc_parser.py - 132 - INFO - Finished chunking 谜语问答游戏.docx (谜语问答游戏.docx). Time spent: 5.7220458984375e-05 seconds.
2024-07-02 09:16:38,449 - base_search.py - 55 - INFO - all tokens: 311
2024-07-02 09:16:38,449 - base_search.py - 58 - INFO - use full ref
[{'role': 'assistant', 'content': '这个问题', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在各种', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在各种社交', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在各种社交场合', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在各种社交场合、', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在各种社交场合、日常', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在各种社交场合、日常交流', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在各种社交场合、日常交流中', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在各种社交场合、日常交流中,', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在各种社交场合、日常交流中,以及其他', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在各种社交场合、日常交流中,以及其他人的', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在各种社交场合、日常交流中,以及其他人的文件', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在各种社交场合、日常交流中,以及其他人的文件、', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在各种社交场合、日常交流中,以及其他人的文件、记录', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在各种社交场合、日常交流中,以及其他人的文件、记录中', 'name': 'Assistant'}]
[{'role': 'assistant', 'content': '这个问题的答案是:"你的名字。"因为你的名字是属于你的,但其他人可以更多地使用它,比如在各种社交场合、日常交流中,以及其他人的文件、记录中。', 'name': 'Assistant'}]

本地知识库文档:谜语问答游戏.docx

谜语问答游戏

1、问题: 什么东西会上升但不会下降?

答: 你的年龄

2、问题: 每天早晨开始时,您通常会采取什么行动?

答: 睁开你的眼睛。

3、问题: 我有钥匙,但打不开锁。 我是什么?

答: 钢琴。

4、问题: 当贝克汉姆主罚点球时,他会击中哪里?

答: 球

5、问题: 什么东西一分钟一次,一瞬间两次,一千年都没有?

答: 字母"M"。

6、问题: 在跑步比赛中,如果你超过了第二个人,你会发现自己处于哪个位置?

答: 第二名。

7、问题: 没有翅膀我也能飞翔。 没有眼睛我也能哭。 每当我走的时候,黑暗就跟着我。 我是什么?

答: 一朵云。

8、问题: 什么东西无骨却难断?

答: 一个鸡蛋

9、问题: 路的左边有一座绿房子,路的右边有一座红房子。 那么,白宫在哪里?

答: 在美国华盛顿。

10 、问题: 我有城市,但没有房屋;有森林,但没有树木;有河流,但没有水。 我是什么?

答: 一张地图。

11 、问题: 什么是属于你的,但其他人比你使用它更多?

答: 你的名字。

结语

本文的探索之旅让我们深入了解了 Qwen-Agent 的 RAG(Retrieval-Augmented Generation)能力,这是一种结合了检索和生成的先进 AI 技术。通过实践案例,我们展示了如何利用 Qwen-Agent 构建一个能够理解和回应复杂查询的智能助手,这不仅增强了 AI 的交互性,也极大地提升了用户体验。

RAG 智能助手通过访问和分析外部文档,为用户的问题提供了精准的答案。这项技术的应用前景广阔,无论是在企业知识管理、客户服务还是教育领域,都能发挥重要作用。随着技术的不断进步和优化,我们有理由相信 RAG 智能助手将在 AI 领域扮演越来越重要的角色。

项目地址

Qwen-Agent GitHub

🎯🔖更多专栏系列文章:AI大模型提示工程完全指南AI大模型探索之路(零基础入门)AI大模型预训练微调进阶AI大模型开源精选实践AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

😎 作者介绍 :我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。

📖 技术交流 :欢迎关注【小兵的AI视界 】公众号或扫描下方👇二维码,加入技术交流群,开启编程探索之旅。

💘精心准备📚500 本编程经典书籍、💎AI专业教程,以及高效AI工具。等你加入,与我们一同成长,共铸辉煌未来。
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏**!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!**

相关推荐
tangjunjun-owen7 分钟前
第四节:GLM-4v-9b模型的tokenizer源码解读
人工智能·glm-4v-9b·多模态大模型教程
冰蓝蓝12 分钟前
深度学习中的注意力机制:解锁智能模型的新视角
人工智能·深度学习
橙子小哥的代码世界20 分钟前
【计算机视觉基础CV-图像分类】01- 从历史源头到深度时代:一文读懂计算机视觉的进化脉络、核心任务与产业蓝图
人工智能·计算机视觉
新加坡内哥谈技术1 小时前
苏黎世联邦理工学院与加州大学伯克利分校推出MaxInfoRL:平衡内在与外在探索的全新强化学习框架
大数据·人工智能·语言模型
fanstuck2 小时前
Prompt提示工程上手指南(七)Prompt编写实战-基于智能客服问答系统下的Prompt编写
人工智能·数据挖掘·openai
lovelin+v175030409662 小时前
安全性升级:API接口在零信任架构下的安全防护策略
大数据·数据库·人工智能·爬虫·数据分析
唐小旭2 小时前
python3.6搭建pytorch环境
人工智能·pytorch·python
洛阳泰山2 小时前
MaxKB基于大语言模型和 RAG的开源知识库问答系统的快速部署教程
人工智能·语言模型·开源·rag·maxkb
程序猿阿伟2 小时前
《Java 优化秘籍:计算密集型 AI 任务加速指南》
java·开发语言·人工智能
说私域2 小时前
社交媒体形象打造中的“号设化”与开源AI智能名片商城小程序的应用
人工智能·小程序·媒体