亚马逊AWS官方博客

使用 Dify 集成 Bedrock Claude3 开启生成式 AI 之旅

关于 Dify

Dify 是一款开源的大语言模型(LLM)应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。它支持多种大型语言模型,如 Claude3、OpenAI,同时与多个模型供应商合作,确保开发者能根据需求选择最适合的模型。平台提供了强大的数据集管理功能,允许用户上传、管理文本和结构化数据,以及通过可视化工具简化 Prompt 编排和应用运营,大大降低了 AI 应用开发的复杂度。Dify.AI 的开放性和低门槛设计使得即使非技术人员也能轻松创建和运营 AI 应用。此外,它支持多种应用场景,如智能客服和文本生成,满足不同行业的需求。Dify.AI 的综合能力使其成为开发者快速构建和运营 AI 应用的理想选择。本文我们会带大家一起通过 Dify 集成 Bedrock Claude3 来开启生成式 AI 之旅。

技术架构

Dify.AI 的技术架构主要包括以下几个关键组成部分:

  1. 关键技术栈支持:Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG(Retrieval-Augmented Generation)引擎以及灵活的 Agent 框架。
  2. 可视化编排和运营:Dify 提供了可视化的 Prompt 编排、运营、数据集管理等功能,使得开发者能够在数天内完成 AI 应用的开发,或将 LLM 快速集成到现有应用中,并进行持续运营和改进。
  3. 技术栈:AI 的技术栈主要包括 Python 编程语言、TensorFlow 和 Keras 深度学习框架、以及 NLP 领域的常用库,如 NLTK 和 spaCy 等。这些技术栈的选择使得 Dify.AI 具有高度的灵活性和可扩展性。
  4. 开箱即用的应用模版和编排框架:Dify 为开发者提供了健全的应用模版和编排框架,使开发者可以基于它们快速构建大型语言模型驱动的生成式 AI 应用,并且可以随时按需无缝扩展,驱动业务增长。
  5. Dify Orchestration Studio:这是一个可视化编排生成式 AI 应用的专业工作站,提供了一个集成的环境,使开发者能够更加高效地构建和管理他们的 AI 应用。

通过这些技术架构的组成部分,Dify.AI 为开发者提供了一个全面、灵活且易于使用的平台,以支持生成式 AI 应用的快速开发和部署。

环境部署

目前 Dify 提供三种部署方式——Docker,本地,以及 K8s,用户可以结合自己的需求来进行选择,本文我们使用 Docker compose 的方式来进行部署。

  1. 环境准备
    • 一台 EC2,本文采用 c7a.xlarge,参考文档创建 EC2
    • Bedrock 开启 Claude3 模型访问权限,参考文档
  2. 通过 SSH 连接 EC2 后,安装 Docker 环境
    sudo yum install docker
    sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    sudo systemctl start docker
    sudo systemctl enable docker
    docker-compose version
    >> Docker Compose version v2.26.1
    
  3. 下载 Dify 代码,通过 docker compose 拉起环境
    git clone https://github.com/langgenius/dify.git
    cd dify/docker
    docker-compose up -d
    

    待几分钟后,环境被拉起来,可以看到类似下面的输出

  4. 查看进程信息
    sudo docker ps

    如上面的信息后,则环境已经部署完毕,通过查看 http://{public IP}/ 地址后,通过初始的配置账户后,登录后可以看到以下 Dashboard 信息。

对话型应用

  1. 创建应用
  2. 配置 LLM Provider
  3. 选择 Amazon Bedrock 作为 LLM provider
  4. 配置 AKSK,这个步骤需要注意:在配置 Bedrock 的 Model Access 时需要开启对 titan-text-express-v1 模型的访问,因为在验证时会验证对 amazon.titan-text-express-v1 的访问权限。
  5. 检验一下模型权限
  6. 配置应用 LLM,设置提示词如下
    我想让你担任{{jobName}}面试官。我将成为候选人,您将向我询问{{jobName}}开发工程师职位的面试问题。我希望你只作为面试官回答。不要一次写出所有的问题。我希望你只对我进行采访。问我问题,等待我的回答。不要写解释。像面试官一样一个一个问我,等我回答。

    同时配置开场白的功能,开场白如下

    你好,{{name}}。我是你的面试官,Bob。你准备好了吗?
  7. 开始测试,我们设置面试职位和姓名之后,就可以开始对话了,同时可以比较不同模型的回复是否符合咱们的需求

    如果结果不理想还可以调整相应模型参数

    然后点击右上方 Publish 即完成配置。

智能助手(Agent)

利用大语言模型的推理能力,能够自主对复杂的人类任务进行目标规划、任务拆解、工具调用、过程迭代,并在没有人类干预的情况下完成任务。

  1. 创建智能助手
  2. 修改助手配置
  3. 下图可以看到对应 Prompt 信息,如果我们想调整也可以随时调整其中的内容,因为目前 Bedrock Claude3 还不支持 function calling 的功能(on the way),所以在 Dify 中的 Agent Mode 为:ReAct
  4. 添加 Tool,本例中我们加入雅虎财经的新闻以及股票信息的工具
  5. 添加提示词来测试一下,提示词:根据用户的问题使用中文回答问题,如下所示我们可以看到 LLM 的思考过程,以及对应的 Action 信息

文本生成助手 – 翻译场景演示

本文中我们使用 Dify 来创建一个翻译助手,通过配置来完成文本翻译的功能。

  1. 创建应用
  2. 提示词使用
    将内容翻译成:{{language}},仅仅翻译内容,禁止添加其他的内容。内容如下:{{quey}}

知识库功能

LLM 训练使用的数据集是有一定的时效性的,并且对每次请求的上下文有长度限制。例如 GPT-3.5 是基于 2021 年的语料进行训练的,且有每次约 4K Token 的限制。这意味着开发者如果想让 AI 应用基于最新的、私有的上下文对话,必须使用类似嵌入(Embedding)之类的技术。

Dify 的数据集功能可以使开发者(甚至非技术人员)以简单的方式管理数据集,并自动集成至 AI 应用中。你只需准备文本内容做完向量化进行存储,目前支持的文档类型如下所示:

  • 长文本内容(TXT、Markdown、DOCX、HTML、JSONL 甚至是 PDF 文件)
  • 结构化数据(CSV、Excel 等)

本文我们采用本地上传的方式引入知识库。

  1. 导入知识库
  2. 选择向量化模型后进行向量化处理
  3. 等待一会后,向量化即可完成
  4. 在上下文中添加使用知识库
  5. 尝试跟 LLM 提问知识库相关的问题,可以看到根据我们的问题,LLM 通过知识库查找到一些相关的知识后,总结回复了客户的问题

站点发布和监控

在应用概览页中,我们可以找到关于 AI 站点(WebApp)的卡片。只需开启 WebApp 的访问,就可以得到一个可分享可分享给用户的链接了,目前提供了站点地址,Iframe 嵌入等方式给到客户自行选择。

  1. 页面集成
  2. API 集成,目前 Dify 也支持通过 API 的方式集成已经创建的 APP,这样我们可以通过 webhook 的方式集成到企业微信,飞书等,鉴权方式需要创建 API key 来访问。示例代码如下
    curl --location --request POST 'http://{IP}v1/chat-messages' \
    --header 'Authorization: Bearer app-xxxxx4X8n50Mh' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "inputs": {},
        "query": "中国游戏产业报告都讲了什么内容?",
        "response_mode": "streaming",
        "user": "admin"
    }'
    
  3. 监控信息,Dify 也提供了一个监控页面可以看到当前用户信息,以及使用 Token 相关的信息,如下图所示

总结

通过本文我们可以看到 Dify 通过对 LLM 访问流程的封装,为用户提供了一个比较友好的接入 LLM 途径,用户可以在比较短的时间内构建出一个准生产的应用,同时 Claude3 在文本生成以及聊天助手的表现也比较不错,Dify 通过集成 Amazon Bedrock 可以非常方便地集成 Claude3,大大降低了用户使用门槛。

本篇作者

郭俊龙

亚马逊云科技解决方案架构师,主要负责游戏行业客户解决方案设计,比较擅长云原生微服务以及大数据方案设计和实践。