热门搜索:和平精英 原神 街篮2 

您的位置:首页 > > 教程攻略 > ai资讯 >用Dash开发基于Dify的Agent Chain(1)

用Dash开发基于Dify的Agent Chain(1)

来源:互联网 更新时间:2026-07-21 14:02

如果想把Dify平台上开发的多个AI Agent无缝集成到一个Dash应用中,还要让它们之间能互相调用、协同工作,这事靠不靠谱?答案是肯定的。先说个核心判断:基于Dify搭建的多个Agent,不仅可以在Dash中实现流畅集成,还能通过构建Agent Chain来完成复杂的综合任务。当然,真正的完全自动化调度还有距离,但在现阶段,实现Agent之间的相互调用已经非常实用了。

这篇文章会从实战出发,带你具体了解Dify平台上的四个AI Agent如何配置,以及如何在Dash应用中把它们拧成一股绳。项目代码会直接拆开来讲,逻辑和实现路径都摆在明面上。

基于Dify搭建智能体

目前,这个项目里配置了4个智能体,分别是意图识别、制度专家、智能助手和创作大师。整个工作流程是这样的:用户抛出的问题,先交给意图识别Agent来判断究竟属于哪一类,然后由它决定下一步该调用哪个智能体来接手——这就好比安排任务时,先找个懂行的来“分流”,再把活派给最对口的人。

特别说明一下,这篇文章不会把智能体的提示词全部铺开讲,篇幅有限,后面会单独开一个专题来详细聊提示词的设计思路。这里先把Agent的基本概况列出来。

意图识别Agent

这个Agent是整个链条的“总闸”,用来判断用户的意图,并根据识别结果调用相应的智能体。

制度专家

一个基于RAG技术实现的公司制度助手,专门用来解答员工关于公司制度的问题,答案来源是内部知识库。

创作大师

顾名思义,这是一位专攻小红书文案的创作助手。你给个主题,它就帮你产出风格地道的文案。

智能助手

一个通用的聊天助手。当用户的问题既不属于制度范畴,也不适合创作文案时,就由这个Agent来兜底。

基于Dash构建智能体链

这个项目是在之前《用Dash搭建Dify多智能体应用》的基础上做了改进,最大的变化在于:由

意图识别Agent

自主决定调用哪个智能体,不再依赖手动切换。

项目结构保持得比较清晰:

AgentChain/
├── asserts/
│ ├── ├── imgs/
│ ├── callback.js
│ ├── style.css
├── apis/
│ ├── dify_api.py
├── views/
│ ├── commom.py
├── app.py
├── config.py
├── requirements.txt

Dify接口封装

dify_api.py中,我们封装了Dify的chat-messages接口。Dify其实还提供上传文件、获取会话历史等接口,但目前这个阶段没用到,所以没做多余封装。保持干净,够用就行。

class difyServer():
def __init__(self, dify_service_url):
self.dify_service_url = dify_service_url

def chat(self, query, api_key, conversation_id="", user="", stream=True):
headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json',
}

json_data = {
'inputs': {},
'query': query,
'response_mode': 'streaming',
'conversation_id': f"{conversation_id}",
'user': user,
'auto_generate_name':True
}

return requests.post(f'{dify_service_url}/v1/chat-messages', headers=headers, json=json_data, stream=stream)

智能体配置

config.py中,把前面提到的四个Agent以及Dify接口地址统一做了配置。每个Agent都有独立API Key和标题,还配了个颜色标识,方便Dash端做UI区分。

dify_service_url = "your_dify_api_host"

DifyAppGroup = {
"Router": {
"apikey":"app-your-dify-app-api-key",
"title":"SpaceAI",
"type":"Chatflow",
"color": "#357f37",
},
"RuleQA":{
"apikey":"app-your-dify-app-api-key",
"title":"制度专家",
"type":"Chatflow",
"color": "#DB7093",
},
"GenealQA":{
"apikey":"app-your-dify-app-api-key",
"title":"智能助手",
"type":"Agent",
"color": "#87CEFA",
},
"RedBookQA":{
"apikey":"app-your-dify-app-api-key",
"title":"创作大师",
"type":"Agent",
"color": "#FF4981",
},
}

处理Agent链

实现Agent链的关键在于:Dify在

直接回复

节点中以约定好的格式输出参数,而Dash端则截取这部分参数,解析出下一步要调用的Agent,然后自动调用对应接口。

在Dash中获取约定参数的过程,是通过一个routerParams标识来实现的:

// 提取工作流传出参数,并保存到session中
let paramsContent = '';
const paramsRegex = /```routerParamsn([sS]*?)n```/g;
let match;
while ((match = paramsRegex.exec(newCache)) !== null) {
paramsContent += match[1] + 'n';
newCache = newCache.replace(match[0], '');
}
window.dash_clientside.set_props(
"app-router-store",
{
"data": paramsContent.trim()
}
)

拿到Agent编号之后,根据配置信息去调用对应的智能体即可。值得留意的是,这里的回调逻辑并不复杂——检查是否已完成路由判断,然后从配置中取出目标Agent信息,再构造出对应的UI展示。

@app.callback(
[
Output("agent-call-container", "children"),
Output("is-finished-answer-store", "data", allow_duplicate=True),
Output("consume-agent-store", 'data', allow_duplicate=True),
],
[
Input("app-router-store", "data"),
Input("is-finished-answer-store", "data"),
],
State("consume-agent-store", "data"),
prevent_initial_call=True,
)
def call_router_agent(app, is_finish, consume_info):
'''根据路由结果调用agent '''
if all([app, is_finish]):
agent = json.loads(app).get("agent")
consume_info.update({
"is_consume":False,
"app":agent,
})
agent_config = DifyAppGroup.get(agent)

return [
fac.AntdSpace([
fac.AntdText(
"智能体",
strong=True,
style={'fontSize': 16}
),
fac.AntdTag(
color=agent_config.get("color", "#5846ff"),
content=f'@ {agent_config.get("title", "")}'),
fac.AntdText(
"为您解答!",
strong=True,
style={'fontSize': 16}
),
],
size=2,
style={"marginTop":"8px"}
),
False,
consume_info
]

return [dash.no_update, dash.no_update, dash.no_update]

说白了,这套机制的本质就是:意图识别Agent作为调度中枢,根据用户意图输出结构化的调度指令,然后Dash应用负责解析指令、切换目标Agent。整个过程对用户是透明的,用户只看到最终结果,底层的跳转和调度完全由链条自动完成。

这才是Agent链的核心逻辑——不是简单的串联,而是有判断、有分工的协作。当然,目前只是初步实现了自动调用,更复杂的任务拆分和多轮协作,还有不少优化空间,后续会继续迭代。

关于宇宙的好的网名有哪些
关于宇宙的好的网名有哪些

类型:角色扮演

大小:1

语言:简体中文

平台:互联网

游戏下载

热门手游

手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc