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

avatar
作者
猴君
阅读量:0

系列篇章💥

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 的安装部署过程简单明了,可以通过以下步骤快速开始:

   pip install -U qwen-agent 

从 GitHub 安装最新版本

   git clone https://github.com/QwenLM/Qwen-Agent.git    cd Qwen-Agent    pip install -e ./ 

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

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

三、本地模型部署

先采用vLLM进行Qwen2-7B模型部署,启用OpenAI风格的API接口,
下载Qwen2-7B-Instruct 到本地/root/autodl-tmp/qwen目录,执行下面命令,启动OpenAI风格的API接口

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、导入依赖库

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

2、定义一个Agent

# 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

messages = [{'role': 'user', 'content': [{'text': '文章标题是什么?'}, {'file': '谜语问答游戏.docx'}]}] for rsp in bot.run(messages):     print(rsp) 
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

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

输出:

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

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

输出:

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的探索之旅,一起开启智能时代的大门!

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!