【AI大模型】基于的Qwen模型的智能客服Discord机器人

发布于:2025-07-02 ⋅ 阅读:(21) ⋅ 点赞:(0)

安装和设置

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

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

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

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

  1. 访问FireCrawl API密钥页面 

  2. 登录或注册FireCrawl账户

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

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

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页面 

  2. 登录或注册SambaNova账户

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

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

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开发者门户

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

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

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

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

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

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

要邀请机器人:

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

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

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

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

要授予机器人权限:

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

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

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


网站公告

今日签到

点亮在社区的每一天
去签到