基于的Qwen模型的智能客服Discord机器人,使用🐫 CAMEL、SambaNova、Firecrawl和Qdrant实现RAG Agent

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
视觉智能开放平台,图像资源包5000点
简介: 基于Qwen模型的智能客服Discord机器人,使用CAMEL、SambaNova、Firecrawl和Qdrant实现RAG Agent。构建了一个能够处理复杂问题并能进行快速响应的强大聊天机器人。该机器人可在Discord平台上运行,支持实时对话和语义搜索,提供准确、全面的回答。项目包含详细的安装步骤、代码示例及集成指南,适合开发者快速上手。

🤝 基于的Qwen模型的智能客服Discord机器人,使用🐫 CAMEL、SambaNova、Firecrawl和Qdrant实现RAG Agent

本cookbook在线运行链接:https://colab.research.google.com/drive/1j7U-QN4MLckJoaUoprODGtD-jjPIQkLc?usp=sharing

download1.png

⭐ 为代码库点赞

如果你觉得 CAMEL 很有用或有趣,请考虑在我们的 CAMEL 仓库为我们点赞!你的点赞能帮助更多人发现这个项目,并激励我们持续改进。

安装和设置

首先,安装CAMEL包及其所有依赖项

!pip install "camel-ai[all]==0.2.15a0"
!pip install starlette
!pip install nest_asyncio`

接下来,设置Firecrawl和SambaNova的API密钥

如果你还没有FireCrawl API密钥,可以按照以下步骤获取:

  1. 访问FireCrawl API密钥页面 https://www.firecrawl.dev/app/api-keys

  2. 登录或注册FireCrawl账户

  3. 导航到'API密钥'部分

  4. 点击'创建API密钥'按钮生成新的API密钥

更多详情,你也可以查看Firecrawl文档:https://docs.firecrawl.dev/api-reference/introduction

import os
from getpass import getpass


firecrawl_api_key = getpass('请输入你的API密钥: ')
os.environ["FIRECRAWL_API_KEY"] = firecrawl_api_key
请输入你的API密钥: ··········

如果你还没有SambaNova Cloud API密钥,可以按照以下步骤获取:

  1. 访问SambaNova Cloud页面 https://cloud.sambanova.ai/apis

  2. 登录或注册SambaNova账户

  3. 导航到'API密钥'部分

  4. 点击'创建API密钥'按钮生成新的API密钥

更多详情,你也可以查看SambaNova文档:https://community.sambanova.ai/c/docs/

import os
from getpass import getpass

samba_api_key = getpass('请输入你的API密钥: ')
os.environ["SAMBA_API_KEY"] = samba_api_key
请输入你的API密钥: ··········

知识爬取和存储

使用Firecrawl爬取网站并获取markdown格式的外部知识:

import os
from camel.loaders import Firecrawl

firecrawl = Firecrawl()

knowledge = firecrawl.crawl(
    url="https://sambanova.ai/blog/qwen-2.5-32b-coder-available-on-sambanova-cloud"
)["data"][0]["markdown"]

将内容存储在markdown文件中:

os.makedirs('local_data', exist_ok=True)

with open('local_data/sambanova_announcement.md', 'w') as file:
     file.write(knowledge)

基础Agent设置

Qwen是由阿里巴巴开发的大型语言模型。它在海量的文本和代码数据集上进行训练,可以生成文本、翻译语言、创作各种创意内容,并以信息丰富的方式回答你的问题。

使用SambaNova Cloud的Qwen模型来设置CAMEL代理:

from camel.configs import SambaCloudAPIConfig
from camel.models import ModelFactory
from camel.types import ModelPlatformType, ModelType
from camel.agents import ChatAgent
from camel.messages import BaseMessage

#### 设置代理使用Qwen2.5-Coder-32B-Instruct #####
qwen_model = ModelFactory.create(
    model_platform=ModelPlatformType.SAMBA,
    model_type="Qwen2.5-Coder-32B-Instruct",
    model_config_dict=SambaCloudAPIConfig(max_tokens=4000).as_dict(),
)

# ##### 设置代理使用Qwen2.5-72B-Instruct #####
# qwen_model = ModelFactory.create(
#     model_platform=ModelPlatformType.SAMBA,
#     model_type="Qwen2.5-72B-Instruct",
#     model_config_dict=SambaCloudAPIConfig(max_tokens=4000).as_dict(),
# )

chat_agent = ChatAgent(
    system_message="你是一个有帮助的助手",
    message_window_size=20,
    model=qwen_model
)

将外部知识插入到代理中

knowledge_message = BaseMessage.make_user_message(
    role_name="User", content=f"基于以下知识:{knowledge}"
)
chat_agent.update_memory(knowledge_message, "user")

基础聊天机器人设置

让我们使用CAMEL代理设置基础聊天机器人并提出一些问题!

你可以问的示例问题:

SambaNova Cloud如何支持Qwen 2.5 Coder,它的速度如何?

print("开始聊天!输入'exit'结束对话。")
while True:
    user_input = input("User: ")

    if user_input.lower() == "exit":
        print("结束对话。")
        break

    assistant_response = chat_agent.step(user_input)
    print(f"Assistant: {assistant_response.msgs[0].content}")
开始聊天!输入'exit'结束对话。
User: SambaNova Cloud如何支持Qwen 2.5 Coder,它的速度如何?
Assistant: SambaNova Cloud支持Qwen 2.5 Coder通过提供一个平台,该平台利用SambaNova的RDU(可重构数据流单元)芯片的高效性和性能。这些芯片专门为处理最苛刻的AI工作负载而设计,包括像Qwen 2.5 Coder这样的生成式AI模型,与传统的GPU相比具有更好的性能。

### 关键点:

1. **性能**: 
   - **5倍于GPU**:Qwen 2.5 Coder模型在SambaNova Cloud上运行速度比领先的GPU提供商快5倍以上。这是由于RDU芯片的优化架构,它专门为AI工作负载而设计。
   - **高效推理**:RDU芯片提供快速的推理速度,这对于实时应用和无缝的用户体验至关重要。

2. **集成**:
   - **易于使用**:SambaNova Cloud使开发人员可以轻松地将Qwen 2.5 Coder模型集成到他们的应用程序中。你可以通过获取API密钥并将其集成到你的开发环境中开始使用。
   - **合作伙伴**:SambaNova Cloud与工具如Continue.dev合作简化集成过程并提供更好的开发者体验。这种合作使开发人员可以轻松地将Qwen 2.5 Coder模型集成到他们的IDE中。

3. **用例**:
   - **编码代理**:Qwen 2.5 Coder模型特别适合开发可以自主编写、编辑和优化代码的编码代理。SambaNova Cloud的高性能确保这些代理可以高效运行并提供快速响应。
   - **实时应用**:SambaNova Cloud提供的快速推理速度使其成为实时应用的理想选择,在这些应用中快速响应时间至关重要。

### 入门:

1. **访问SambaNova Cloud**:访问[SambaNova Cloud](https://cloud.sambanova.ai/)注册并获取你的API密钥。
2. **集成模型**:使用API密钥将Qwen 2.5 Coder模型集成到你的开发环境中。
3. **进一步探索**:查看资源,如[Continue的博客文章](https://blog.continue.dev/p/d0796190-6827-42d1-8d81-bd9ca31e1828/),了解如何有效地集成和使用模型。

通过利用SambaNova Cloud,开发人员可以利用Qwen 2.5 Coder模型的强大功能,并获得现代AI应用所需的速度和效率。
User: exit
结束对话.

基础Discord机器人集成

要构建discord机器人,需要一个discord机器人令牌。

如果你还没有机器人令牌,可以按照以下步骤获取:

  1. 访问Discord开发者门户:https://discord.com/developers/applications

  2. 使用你的Discord账户登录,如果没有账户则创建一个

  3. 点击'新建应用程序'来创建新的机器人

  4. 为你的应用程序命名并点击'创建'

  5. 导航到'机器人'选项卡并点击'添加机器人'

  6. 一旦机器人创建完成,你将在'令牌'部分找到令牌。点击'重置令牌'生成新的令牌。

  7. 复制生成的令牌并安全地保存。

要邀请机器人:

  1. 导航到'OAuth2'选项卡,然后到'URL生成器'

  2. 在'范围'下,选择'机器人'

  3. 在'机器人权限'下,选择你的机器人需要的权限(例如,'发送消息'、'读取消息')

  4. 复制生成的URL并粘贴到你的浏览器中邀请机器人加入你的服务器。

要授予机器人权限:

  1. 导航到'机器人'选项卡

  2. 在'特权网关意图'下,勾选'Server成员意图'和'消息内容意图'。

更多详情,你也可以查看官方的Discord机器人文档:https://discord.com/developers/docs/intro

import os
from getpass import getpass

discord_bot_token = getpass('请输入你的Discord机器人令牌: ')
os.environ["DISCORD_BOT_TOKEN"] = discord_bot_token
请输入你的Discord机器人令牌: ··········

本代码单元使用DiscordApp类从camel.bots库设置一个简单的Discord机器人。机器人监听任何它有访问权限的频道中的消息,并根据输入消息提供响应。

from camel.bots import DiscordApp
import nest_asyncio
import discord

nest_asyncio.apply()
discord_bot = DiscordApp(token=discord_bot_token)

@discord_bot.client.event
async def on_message(message: discord.Message):
    if message.author == discord_bot.client.user:
        return

    if message.type != discord.MessageType.default:
        return

    if message.author.bot:
        return

    user_input = message.content
    chat_agent.reset()
    chat_agent.update_memory(knowledge_message, "user")
    assistant_response = chat_agent.step(user_input)

    response_content = assistant_response.msgs[0].content

    if len(response_content) > 2000: # discord消息长度限制
        for chunk in [response_content[i:i+2000] for i in range(0, len(response_content), 2000)]:
            await message.channel.send(chunk)
    else:
        await message.channel.send(response_content)

discord_bot.run()

download2.png

将 Qdrant 集成以扩展更多文件,从而构建更强大的 Discord 机器人

Qdrant 是一个向量相似性搜索引擎和向量数据库。它旨在对大型向量数据集进行快速高效的相似性搜索。这使得聊天机器人能够访问和利用外部信息,从而提供更全面、准确的回答。通过将知识存储为向量,Qdrant 实现了高效的语义搜索,使聊天机器人能够根据用户查询的含义找到相关信息。

在本节中,我们将添加更多数据源,包括 Camel 的示例代码(如何使用 SambaNova Cloud),然后提出更复杂的问题。

为 Qdrant 设置嵌入模型和检索器
您可以使用 Tesla T4 Google Colab 实例运行支持 RAG 功能的开源嵌入模型,也可以切换到其他由 CAMEL 支持的嵌入模型。

from camel.embeddings import SentenceTransformerEncoder # CAMEL also support other embedding models
from camel.types import EmbeddingModelType

sentence_encoder = SentenceTransformerEncoder(model_name='intfloat/e5-large-v2')

设置 AutoRetriever 以从存储系统中检索相关信息。

from camel.retrievers import AutoRetriever
from camel.types import StorageType

assistant_sys_msg = """You are a helpful assistant to answer question,
         I will give you the Original Query and Retrieved Context,
        answer the Original Query based on the Retrieved Context,
        if you can't answer the question just say I don't know.
        Just give the answer to me directly, no more other words needed.
        """
auto_retriever = AutoRetriever(
              vector_storage_local_path="local_data2/",
              storage_type=StorageType.QDRANT,
              embedding_model=sentence_encoder
            )
chat_agent_with_rag = ChatAgent(system_message=assistant_sys_msg, model=qwen_model)

使用AutoRetriever进行检索,之后根据检索到的信息,使用CAMEL ChatAgent回答用户的问题。

from camel.bots import DiscordApp
import nest_asyncio
import discord

nest_asyncio.apply()
discord_q_bot = DiscordApp(token=discord_bot_token)

@discord_q_bot.client.event # triggers when a message is sent in the channel
async def on_message(message: discord.Message):
    if message.author == discord_q_bot.client.user:
        return

    if message.type != discord.MessageType.default:
        return

    if message.author.bot:
        return

    user_input = message.content

    query_and_retrieved_info = auto_retriever.run_vector_retriever(
        query=user_input,
        contents=[
            "local_data/sambanova_announcement.md", # SambaNova's anncouncement
            "https://github.com/camel-ai/camel/blob/master/examples/models/samba_model_example.py", # CAMEL's example code for SambaNova Usage
        ],
        top_k=3,
        return_detailed_info=False,
        similarity_threshold=0.5
    )

    user_msg = str(query_and_retrieved_info)
    assistant_response = chat_agent_with_rag.step(user_msg)
    response_content = assistant_response.msgs[0].content

    if len(response_content) > 2000: # discord message length limit
        for chunk in [response_content[i:i+2000] for i in range(0, len(response_content), 2000)]:
            await message.channel.send(chunk)
    else:
        await message.channel.send(response_content)

discord_q_bot.run()

从之前的query开始:

download3.png

既然我们已经将 CAMEL 的示例代码添加到 RAG Bot 中,让我们问一些与代码相关的问题:

download4.png

向 Bot 咨询如何设置 Qwen2.5-Coder-32B-Instruct。配备记忆功能的 CAMEL Bot 可以通过利用其回忆先前互动中相关信息的能力来提供有效的协助!

download5.png

相关文章
|
16天前
|
传感器 人工智能 自然语言处理
RDT:清华开源全球最大的双臂机器人操作任务扩散基础模型、代码与训练集,基于模仿能力机器人能够自主完成复杂任务
RDT(Robotics Diffusion Transformer)是由清华大学AI研究院TSAIL团队推出的全球最大的双臂机器人操作任务扩散基础模型。RDT具备十亿参数量,能够在无需人类操控的情况下自主完成复杂任务,如调酒和遛狗。
83 22
RDT:清华开源全球最大的双臂机器人操作任务扩散基础模型、代码与训练集,基于模仿能力机器人能够自主完成复杂任务
|
14天前
|
人工智能 算法 机器人
EMMA-X:新加坡科技设计大学推出具身多模态动作模型,使夹爪机器人具备空间推理和任务规划能力
EMMA-X是由新加坡科技设计大学推出的具身多模态动作模型,具备70亿参数,通过在链式思维推理数据上微调OpenVLA创建。该模型结合层次化的具身数据集,增强空间推理和任务规划能力。
60 3
EMMA-X:新加坡科技设计大学推出具身多模态动作模型,使夹爪机器人具备空间推理和任务规划能力
|
16天前
|
机器学习/深度学习 人工智能 机器人
NeurIPS 2024:机器人操纵世界模型来了,成功率超过谷歌RT-1 26.6%
PIVOT-R是一种新型世界模型,专注于预测与任务相关的路点,以提高语言引导的机器人操作的性能和效率。该模型由路点感知世界模型(WAWM)和轻量级动作预测模块组成,辅以异步分层执行器(AHE),在SeaWave基准测试中表现优异,平均相对改进达19.45%,执行效率提高28倍。
55 26
|
21天前
|
编解码 机器人 测试技术
技术实践 | 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型快速搭建专业领域知识问答机器人
Qwen2-VL是一款具备高级图像和视频理解能力的多模态模型,支持多种语言,适用于多模态应用开发。通过PAI和LLaMA Factory框架,用户可以轻松微调Qwen2-VL模型,快速构建文旅领域的知识问答机器人。本教程详细介绍了从模型部署、微调到对话测试的全过程,帮助开发者高效实现定制化多模态应用。
|
29天前
|
XML 算法 自动驾驶
使用URDF和Xacro构建差速轮式机器人模型
前言 本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。 差速轮式机器人:两轮差速底盘由两个动力轮位于底盘左右两侧,两轮独立控制速度,通过给定不同速度实现底盘转向控制。一般会配有一到两个辅助支撑的万向轮。 此次建模,不引入算法,只是把机器人模型的样子做出来,所以只使用 rivz 进行可视化显示。 机器人的定义和构成 机器人定义:机器人是一种自动化的机器,所不同的是这种机器具备一些与人或生物相似的智能能力,如感知能力、规划能力、动作能力和协同能力,是一种具有高级灵活性的自动化机器
67 15
|
24天前
|
机器学习/深度学习 人工智能 自然语言处理
盘点2024年最先进的智能客服机器人TOP10 #SaaS产品#
综合市场数据和用户口碑为大家盘点10大主流服务商
58 4
|
2月前
|
人工智能 自然语言处理 搜索推荐
年度排名 | 2024年最受市场欢迎的智能客服机器人有哪些?
本文分析了2024年智能客服机器人的发展现状,并介绍了国内五大主流服务商——合力亿捷等,并重点阐述了它们的核心功能和服务优势,如多渠道对接、大模型应用、个性化服务、AI自动生成小结等,旨在帮助企业根据自身需求选择合适的智能客服解决方案。
39 1
|
2月前
|
XML 算法 自动驾驶
ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
【11月更文挑战第7天】本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。
|
21天前
|
机器学习/深度学习 自然语言处理 搜索推荐
深度分析 | 2024主流的智能客服系统有哪些?他们是怎么实现的?
本文深入探讨了智能客服系统的使用方法和相关技术实现逻辑,涵盖前端交互、服务接入、逻辑处理、数据存储四大层面,以及自然语言处理、机器学习、语音识别与合成、数据分析与挖掘、知识库管理和智能推荐系统等核心技术,帮助企业更好地理解和应用智能客服系统,提升服务效率和客户满意度。
115 1
|
3月前
|
存储 自然语言处理 机器人
实战揭秘:当RAG遇上企业客服系统——从案例出发剖析Retrieval-Augmented Generation技术的真实表现与应用局限,带你深入了解背后的技术细节与解决方案
【10月更文挑战第3天】随着自然语言处理技术的进步,结合检索与生成能力的RAG技术被广泛应用于多个领域,通过访问外部知识源提升生成内容的准确性和上下文一致性。本文通过具体案例探讨RAG技术的优势与局限,并提供实用建议。例如,一家初创公司利用LangChain框架搭建基于RAG的聊天机器人,以自动化FAQ系统减轻客服团队工作负担。尽管该系统在处理简单问题时表现出色,但在面对复杂或多步骤问题时存在局限。此外,RAG系统的性能高度依赖于训练数据的质量和范围。因此,企业在采用RAG技术时需综合评估需求和技术局限性,合理规划技术栈,并辅以必要的人工干预和监督机制。
175 3