系列篇章💥
目录
引言
在人工智能的不断演进中,大模型如雨后春笋般涌现,它们在处理语言、生成内容、辅助决策等方面展现出令人瞩目的能力。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 领域扮演越来越重要的角色。
项目地址
🎯🔖更多专栏系列文章:AI大模型提示工程完全指南、AI大模型探索之路(零基础入门)、AI大模型预训练微调进阶、AI大模型开源精选实践、AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑
😎 作者介绍 :我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流 :欢迎关注【小兵的AI视界 】公众号或扫描下方👇二维码,加入技术交流群,开启编程探索之旅。
💘精心准备📚500 本编程经典书籍、💎AI专业教程,以及高效AI工具。等你加入,与我们一同成长,共铸辉煌未来。
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏**!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!**