AGI 之 【Dify】 之 Dify 在 Windows 端本地部署调用 Ollama 本地下载的大模型,实现 API 形式进行聊天对话

AGI 之 【Dify】 之 Dify 在 Windows 端本地部署调用 Ollama 本地下载的大模型,实现 API 形式进行聊天对话

目录

[AGI 之 【Dify】 之 Dify 在 Windows 端本地部署调用 Ollama 本地下载的大模型,实现 API 形式进行聊天对话](#AGI 之 【Dify】 之 Dify 在 Windows 端本地部署调用 Ollama 本地下载的大模型,实现 API 形式进行聊天对话)

一、简单介绍

二、创建一个聊天应用

[三、使用 postman 进行 API 接口测试](#三、使用 postman 进行 API 接口测试)

附录:

[一、Dify 访问 API 接口的一些说明](#一、Dify 访问 API 接口的一些说明)

[1、基础 URL](#1、基础 URL)

2、鉴权

3、发起对话消息

4、消息反馈(点赞)

5、获取会话历史信息


一、简单介绍

AGI,即通用人工智能(Artificial General Intelligence),是一种具备人类智能水平的人工智能系统。它不仅能够执行特定的任务,而且能够理解、学习和应用知识于广泛的问题解决中,具有较高的自主性和适应性。AGI的能力包括但不限于自我学习、自我改进、自我调整,并能在没有人为干预的情况下解决各种复杂问题。


本节使用,Dify 调用 Ollama 部署的本地模型,创建一个聊天应用,然后使用 API 的方式发起聊天,这样方便前端自行布置自己需要的聊天形式,即可在web上展示,也可在应用段接入 API 发请聊天对话。

Dify 采用"后端即服务"(Backend as a Service, BaaS)的理念,为 AI 应用开发者提供了强大的支持。这种模式允许开发者通过 API 直接访问后端服务,从而简化了开发流程,并使得开发者能够专注于前端应用的创新和用户体验的优化。

使用 Dify API 的好处

  • 直接集成 LLM 能力:前端应用可以直接且安全地调用大型语言模型(LLM)的能力,无需投入资源开发和维护后端服务,从而节省时间和成本。

  • 可视化应用设计:Dify 提供了一个直观的可视化界面,允许开发者设计和配置应用。一旦设计完成,更改可以即时在所有客户端生效,无需复杂的部署流程。

  • 封装 LLM 供应商能力:Dify 对不同 LLM 供应商的基础能力进行了良好的封装,使得开发者无需深入了解每个供应商的API细节,即可轻松集成和使用。

  • 灵活切换 LLM 供应商:开发者可以随时切换 LLM 供应商,而无需修改前端代码。Dify 提供了集中管理 LLM 密钥的功能,简化了供应商切换过程。

  • 简化模型更换流程:每个大型模型,如 GPT-4、Claude3.5 等,都提供了 API。虽然开发者可以利用这些 API 构建应用,但更换模型可能需要更改代码,增加开发成本。Dify 通过统一的接口抽象,减少了这种成本。

  • 可视化应用运营:在 Dify 的可视化界面中,开发者可以轻松运营应用,包括分析日志、标注数据以及观察用户活跃度,从而更好地理解用户行为并优化应用性能。

  • 持续集成新工具和插件:Dify 持续为应用提供新的工具能力、插件能力和数据集,帮助开发者扩展应用功能,保持应用的竞争力和创新性。

通过这些优势,Dify API 为开发者提供了一个高效、灵活的开发环境,使得构建、部署和管理基于 LLM 的应用变得更加简单和高效。


Ollama 是一个开源的本地大型语言模型(LLM)运行框架,它旨在简化在本地运行大型语言模型的过程。Ollama 提供了一个简洁易用的命令行界面和服务器,让你能够轻松下载、运行和管理各种开源大型语言模型,如 Llama 3、Mistral、Qwen2 等。

二、创建一个聊天应用

1、运行docker ,登陆 dify ,在工作室创建一个空白应用

2、创建一个工作流编排的聊天助手

3、设置自己部署的合适的大模型LLM,进行聊天

4、在预览中进行,测试一下聊天功能

三、使用 postman 进行 API 接口测试

1、在发布中点击 "访问 API "

2、进入该聊天应用的 API 界面

3、根据访问要求,需要创建一个 API-Key ,即是 API 秘钥,拷贝一下以备用

4、然后,打开 postman ,测试一下是否可以访问

Get 请求,输入访问网址,添加 Headers 授权,Response 200 OK ,访问成功

5、使用 Post , 发起聊天请求

5.1 Post 请求,输入访问网址 ,添加 Headers 授权和内容类型

网址:http://localhost/v1/chat-messages

5.2 Body 中添加 raw json 数据,query 提问,response_mode 流式返回等

5.3 send 发起请求,流式返回数据,Response 200 OK ,访问成功

6、同理,在试试 消息反馈点赞功能

6.1 Post 请求,输入访问网址 ,添加 Headers 授权和内容类型

注意messgae_id 替换为对应消息 id ,这里使用上次返回内容的消息id ,更新网址

6.2 Body 中添加 raw json 数据,rating 反馈,user 用户

6.3 send 发起请求,Response 200 OK ,访问成功

6.4 同时在应用的"日志与标注"中查看到用户反馈

7、同理,在试试 获取会话历史消息功能

7.1 Get 请求,输入访问网址 ,添加 Headers 授权和内容类型

注意 user 对应用户名,和 conversation_id 替换为对应对话 id ,这里使用上次返回内容的对话id ,添加Get 请求参数

6.2 Body 中无参数

6.3 send 发起请求,Response 200 OK ,访问成功

8、其他功能 API 可参见 文档进行测试

附录:

一、Dify 访问 API 接口的一些说明

工作流编排对话型应用 API,对话应用支持会话持久化,可将之前的聊天记录作为上下进行回答,可适用于聊天/客服 AI 等。

1、基础 URL

http://localhost/v1

2、鉴权

Service API 使用 API-Key 进行鉴权。 强烈建议开发者把 API-Key 放在后端存储,而非分享或者放在客户端存储,以免 API-Key 泄露,导致财产损失。 所有 API 请求都应在 Authorization HTTP Header 中包含您的 API-Key,如下所示:

Authorization: Bearer {API_KEY}

3、发起对话消息

POST/chat-messages

创建会话消息。

Request Body

  • Name

    query

    Type

    string

    Description

    用户输入/提问内容。

  • Name

    inputs

    Type

    object

    Description

    允许传入 App 定义的各变量值。 inputs 参数包含了多组键值对(Key/Value pairs),每组的键对应一个特定变量,每组的值则是该变量的具体值。 默认 {}

  • Name

    response_mode

    Type

    string

    Description

    • streaming 流式模式(推荐)。基于 SSE(Server-Sent Events)实现类似打字机输出方式的流式返回。
    • blocking 阻塞模式,等待执行完毕后返回结果。(请求若流程较长可能会被中断)。 由于 Cloudflare 限制,请求会在 100 秒超时无返回后中断。
  • Name

    user

    Type

    string

    Description

    用户标识,用于定义终端用户的身份,方便检索、统计。 由开发者定义规则,需保证用户标识在应用内唯一。

  • Name

    conversation_id

    Type

    string

    Description

    (选填)会话 ID,需要基于之前的聊天记录继续对话,必须传之前消息的 conversation_id。

  • Name

    files

    Type

    array[object]

    Description

    上传的文件。

    • type (string) 支持类型:图片 image(目前仅支持图片格式) 。
    • transfer_method (string) 传递方式:
      • remote_url: 图片地址。
      • local_file: 上传文件。
    • url 图片地址。(仅当传递方式为 remote_url 时)。
    • upload_file_id 上传文件 ID。(仅当传递方式为 local_file 时)。
  • Name

    auto_generate_name

    Type

    bool

    Description

    (选填)自动生成标题,默认 true。 若设置为 false,则可通过调用会话重命名接口并设置 auto_generatetrue 实现异步生成标题。
    Response

response_modeblocking 时,返回 ChatCompletionResponse object。 当 response_modestreaming时,返回 ChunkChatCompletionResponse object 流式序列。

ChatCompletionResponse

返回完整的 App 结果,Content-Typeapplication/json

ChunkChatCompletionResponse

返回 App 输出的流式块,Content-Typetext/event-stream。 每个流式块均为 data: 开头,块之间以 \n\n 即两个换行符分隔,如下所示:

复制代码
data: {"event": "message", "task_id": "900bbd43-dc0b-4383-a372-aa6e6c414227", "id": "663c5084-a254-4040-8ad3-51f2a3c1a77c", "answer": "Hi", "created_at": 1705398420}\n\n 

CopyCopied!

流式块中根据 event 不同,结构也不同:
Errors

    • message_id (string) 消息唯一 ID
    • conversation_id (string) 会话 ID
    • mode (string) App 模式,固定为 chat
    • answer (string) 完整回复内容
    • metadata (object) 元数据
      • usage (Usage) 模型用量信息
      • retriever_resources (array[RetrieverResource]) 引用和归属分段列表
    • created_at (int) 消息创建时间戳,如:1705395332
    • event: message LLM 返回文本块事件,即:完整的文本以分块的方式输出。
      • task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口
      • message_id (string) 消息唯一 ID
      • conversation_id (string) 会话 ID
      • answer (string) LLM 返回文本块内容
      • created_at (int) 创建时间戳,如:1705395332
    • event: message_file 文件事件,表示有新文件需要展示
      • id (string) 文件唯一ID
      • type (string) 文件类型,目前仅为image
      • belongs_to (string) 文件归属,user或assistant,该接口返回仅为 assistant
      • url (string) 文件访问地址
      • conversation_id (string) 会话ID
    • event: message_end 消息结束事件,收到此事件则代表流式返回结束。
      • task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口
      • message_id (string) 消息唯一 ID
      • conversation_id (string) 会话 ID
      • metadata (object) 元数据
        • usage (Usage) 模型用量信息
        • retriever_resources (array[RetrieverResource]) 引用和归属分段列表
    • event: tts_message TTS 音频流事件,即:语音合成输出。内容是Mp3格式的音频块,使用 base64 编码后的字符串,播放的时候直接解码即可。(开启自动播放才有此消息)
      • task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口
      • message_id (string) 消息唯一 ID
      • audio (string) 语音合成之后的音频块使用 Base64 编码之后的文本内容,播放的时候直接 base64 解码送入播放器即可
      • created_at (int) 创建时间戳,如:1705395332
    • event: tts_message_end TTS 音频流结束事件,收到这个事件表示音频流返回结束。
      • task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口
      • message_id (string) 消息唯一 ID
      • audio (string) 结束事件是没有音频的,所以这里是空字符串
      • created_at (int) 创建时间戳,如:1705395332
    • event: message_replace 消息内容替换事件。 开启内容审查和审查输出内容时,若命中了审查条件,则会通过此事件替换消息内容为预设回复。
      • task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口
      • message_id (string) 消息唯一 ID
      • conversation_id (string) 会话 ID
      • answer (string) 替换内容(直接替换 LLM 所有回复文本)
      • created_at (int) 创建时间戳,如:1705395332
    • event: workflow_started workflow 开始执行
      • task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口
      • workflow_run_id (string) workflow 执行 ID
      • event (string) 固定为 workflow_started
      • data (object) 详细内容
        • id (string) workflow 执行 ID
        • workflow_id (string) 关联 Workflow ID
        • sequence_number (int) 自增序号,App 内自增,从 1 开始
        • created_at (timestamp) 开始时间
    • event: node_started node 开始执行
      • task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口
      • workflow_run_id (string) workflow 执行 ID
      • event (string) 固定为 node_started
      • data (object) 详细内容
        • id (string) workflow 执行 ID
        • node_id (string) 节点 ID
        • node_type (string) 节点类型
        • title (string) 节点名称
        • index (int) 执行序号,用于展示 Tracing Node 顺序
        • predecessor_node_id (string) 前置节点 ID,用于画布展示执行路径
        • inputs (array[object]) 节点中所有使用到的前置节点变量内容
        • created_at (timestamp) 开始时间
    • event: node_finished node 执行结束,成功失败同一事件中不同状态
      • task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口
      • workflow_run_id (string) workflow 执行 ID
      • event (string) 固定为 node_finished
      • data (object) 详细内容
        • id (string) node 执行 ID
        • node_id (string) 节点 ID
        • index (int) 执行序号,用于展示 Tracing Node 顺序
        • predecessor_node_id (string) optional 前置节点 ID,用于画布展示执行路径
        • inputs (array[object]) 节点中所有使用到的前置节点变量内容
        • process_data (json) Optional 节点过程数据
        • outputs (json) Optional 输出内容
        • status (string) 执行状态 running / succeeded / failed / stopped
        • error (string) Optional 错误原因
        • elapsed_time (float) Optional 耗时(s)
        • execution_metadata (json) 元数据
          • total_tokens (int) optional 总使用 tokens
          • total_price (decimal) optional 总费用
          • currency (string) optional 货币,如 USD / RMB
        • created_at (timestamp) 开始时间
    • event: workflow_finished workflow 执行结束,成功失败同一事件中不同状态
      • task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口
      • workflow_run_id (string) workflow 执行 ID
      • event (string) 固定为 workflow_finished
      • data (object) 详细内容
        • id (string) workflow 执行 ID
        • workflow_id (string) 关联 Workflow ID
        • status (string) 执行状态 running / succeeded / failed / stopped
        • outputs (json) Optional 输出内容
        • error (string) Optional 错误原因
        • elapsed_time (float) Optional 耗时(s)
        • total_tokens (int) Optional 总使用 tokens
        • total_steps (int) 总步数(冗余),默认 0
        • created_at (timestamp) 开始时间
        • finished_at (timestamp) 结束时间
    • event: error 流式输出过程中出现的异常会以 stream event 形式输出,收到异常事件后即结束。
      • task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口
      • message_id (string) 消息唯一 ID
      • status (int) HTTP 状态码
      • code (string) 错误码
      • message (string) 错误消息
    • event: ping 每 10s 一次的 ping 事件,保持连接存活。
    • 404,对话不存在
    • 400,invalid_param,传入参数异常
    • 400,app_unavailable,App 配置不可用
    • 400,provider_not_initialize,无可用模型凭据配置
    • 400,provider_quota_exceeded,模型调用额度不足
    • 400,model_currently_not_support,当前模型不可用
    • 400,completion_request_error,文本生成失败
    • 500,服务内部异常

4、消息反馈(点赞)

POST/messages/:message_id/feedbacks

消息终端用户反馈、点赞,方便应用开发者优化输出预期。

Path Params

  • Name

    message_id

    Type

    string

    Description

    消息 ID
    Request Body

  • Name

    rating

    Type

    string

    Description

    点赞 like, 点踩 dislike, 撤销点赞 null

  • Name

    user

    Type

    string

    Description

    用户标识,由开发者定义规则,需保证用户标识在应用内唯一。
    Response

  • result (string) 固定返回 success

5、获取会话历史信息

GET/messages

滚动加载形式返回历史聊天记录,第一页返回最新 limit 条,即:倒序返回。

Query

  • Name

    conversation_id

    Type

    string

    Description

    会话 ID

  • Name

    user

    Type

    string

    Description

    用户标识,由开发者定义规则,需保证用户标识在应用内唯一。

  • Name

    first_id

    Type

    string

    Description

    当前页第一条聊天记录的 ID,默认 null

  • Name

    limit

    Type

    int

    Description

    一次请求返回多少条聊天记录,默认 20 条。
    Response

  • data (array[object]) 消息列表

  • id (string) 消息 ID

  • conversation_id (string) 会话 ID

  • inputs (array[object]) 用户输入参数。

  • query (string) 用户输入 / 提问内容。

  • message_files (array[object]) 消息文件

    • id (string) ID
    • type (string) 文件类型,image 图片
    • url (string) 预览图片地址
    • belongs_to (string) 文件归属方,user 或 assistant
  • answer (string) 回答消息内容

  • created_at (timestamp) 创建时间

  • feedback (object) 反馈信息

    • rating (string) 点赞 like / 点踩 dislike
  • retriever_resources (array[RetrieverResource]) 引用和归属分段列表

  • has_more (bool) 是否存在下一页

  • limit (int) 返回条数,若传入超过系统限制,返回系统限制数量

相关推荐
长潇若雪11 分钟前
结构体(C 语言)
c语言·开发语言·经验分享·1024程序员节
DARLING Zero two♡1 小时前
关于我、重生到500年前凭借C语言改变世界科技vlog.12——深入理解指针(2)
c语言·开发语言·科技·1024程序员节
独行soc1 小时前
#渗透测试#SRC漏洞挖掘# 信息收集-Shodan进阶之Jenkins组件
安全·jenkins·安全威胁分析·1024程序员节·shodan
dawn1912282 小时前
Java 中的正则表达式详解
java·开发语言·算法·正则表达式·1024程序员节
黑不拉几的小白兔2 小时前
PTA L1系列题解(C语言)(L1_097 -- L1_104)
数据结构·算法·1024程序员节
小言从不摸鱼2 小时前
【Python】元组、字典与集合详解:数据容器的实战应用
人工智能·python·1024程序员节
魔法自动机3 小时前
Unity3D学习FPS游戏(3)玩家第一人称视角转动和移动
unity·1024程序员节·fps
Ylucius3 小时前
14天速成前端 ------学习日志(已完结)------ 后端程序员学习了解前端
java·开发语言·前端·vue.js·学习·状态模式·1024程序员节
清酒伴风(面试准备中......)3 小时前
计算机网络——开放系统互连参考模型
网络·计算机网络·1024程序员节