使用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 信息
- endpoint = “https://models.github.ai/inference“
- model = “openai/gpt-4.1”
- token = “YOUR_GITHUB_API_TOKEN” # 你的 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
- 方法 (Method): 选择 POST
- URL: https://models.github.ai/inference/chat/completions
配置请求头 (Headers),在 Headers 区域,添加两个键值对
Key: Authorization
Value: Bearer YOUR_GITHUB_API_TOKENKey: 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}} 拼写和格式完全正确。