使用Dify免费白嫖GitHub Models里的各大模型

前言

       本文档记录了将一个 Python 脚本(调用外部 AI API)完整迁移到 Dify 工作流,并实现动态交互和数据处理的全过程。测试使用gpt-4.1

初始目标:在 Dify 中实现以下 Python 代码的功能

  • from azure.ai.inference import ChatCompletionsClient
  • from azure.ai.inference.models import SystemMessage, UserMessage
  • from azure.core.credentials import AzureKeyCredential

API 信息

完整Python代码

from azure.ai.inference import ChatCompletionsClient
from azure.ai.inference.models import SystemMessage
from azure.core.credentials import AzureKeyCredential

# 设置推理服务的终端地址
endpoint = "https://models.github.ai/inference"
# 使用的模型名称
model = "openai/gpt-4.1"
# 从环境变量获取 Github Token, 用于鉴权
token = "xxxxxxxxxxxxxxxxxxx"

# 初始化聊天补全客户端
client = ChatCompletionsClient(
    endpoint=endpoint,  # 终端地址
    credential=AzureKeyCredential(token),  # 鉴权凭证
)

# 发起一次聊天补全请求
response = client.complete(
    messages=[
        SystemMessage("你是一个全能助手,使用中文回复。"),   # 系统消息,设定助手角色
        UserMessage("请自我介绍一下"),   # 用户消息,提出的问题
    ],
    temperature=1.0,  # 温度参数,控制回答的创造性
    top_p=1.0,        # Top-p 参数,控制回答的多样性
    model=model       # 指定使用的模型
)

# 打印生成的回答内容
print(response.choices[0].message.content)

实施详细步骤

创建dify工作流基础HTTP请求并添加 HTTP 节点

在 Dify 中,进入 “工作室” -> “应用”,选择或创建一个工作流。我们将其命名为 http_1。

配置请求方法和 URL
配置请求头 (Headers),在 Headers 区域,添加两个键值对
  • Key: Authorization
    Value: Bearer YOUR_GITHUB_API_TOKEN

  • Key: Content-Type
    Value: application/json

    请求头

    注意: 强烈建议使用 Dify 的凭据管理功能。在【 “工具” -> “凭据” 】或者【在HTTP节点的上方有个“凭证”】中创建一个 HTTP Header 类型的凭据,然后在该字段中直接选择凭据,避免明文暴露密钥。

配置请求体 (Body) 类型: 选择 JSON,在下方的文本框中,粘贴 API 所需的 JSON 数据:
{
  "model": "openai/gpt-4.1",
  "messages": [
    {
      "role": "system",
      "content": "你是一个全能助手,使用中文回复。"
    },
    {
      "role": "user",
      "content": "{{user_query}}"
    }
  ],
  "temperature": 1.0,
  "top_p": 1.0
}
在开始节点创建变量【user_query】,使其将用户输入的文本内容,传入HTTP节点的Body请求体中。

处理 API 响应并提取有效信息

API 返回的是一个复杂的 JSON 对象,我们需要从中提取出 AI 的纯文本回复。我们使用“代码节点”来完成这个任务。

添加并连接“代码执行”节点。
import json
def main(http_1: str) -> dict:
  response_body_str = http_1
  data = json.loads(response_body_str)
  ai_reply_text = data['choices'][0]['message']['content']
  # 将提取出的纯文本作为结果返回。'result' 将成为这个代码节点的输出变量名。
  return {
    'result': ai_reply_text
  }

代码执行节点

完成并测试工作流

将“代码执行”节点连接到“结束”节点,将解析的结果【result】传入到“结束”节点输出。至此,整个工作流已经完美搭建成功!

附录:常见错误与解决方案

错误信息/现象 原因 解决方案

  • 404 Resource not found Content-Type 被错误地配置在了 URL Params 中,而不是 Headers 中。 在 HTTP 节点配置中,删除 URL Params 里的 Content-Type,确保它只在 Headers 中定义。
  • TypeError: string indices must be integers 在代码节点中,错误地尝试对一个字符串变量使用字典方式访问(如 http_1[‘body’])。 这是因为输入变量 http_1 本身就是所需的字符串了。直接使用 http_1,而不是 http_1[‘body’]。
  • TypeError: main() got an unexpected keyword argument ‘… 代码节点的 main 函数定义与 Dify 的传参方式不匹配。 将 def main(args: dict) 修改为 def main(http_1: dict),让函数直接接收以变量名为参数的输入。
  • 无论问什么,都得到相同的回复 动态变量 {{user_query}} 未能成功传递。 检查并确保:1. Start 节点已定义 user_query 变量。 2. HTTP 节点 Body 中的 {{user_query}} 拼写和格式完全正确。