Dify 业务核心流程关键代码-智能体对话流程

概述

智能体对话流程是 Dify 的核心能力,下面描述出核心流程及相关代码,查看方式为通过开发工具打开源码
根据关键流程的代码,搜索到对应的位置,查看相关逻辑。Dify 的代码逻辑相对嵌套比较多,使用了较多的python 语言特性
和设计模型。非常值得参考学习。

1. 主要流程:

发起对话 -> 检索知识库(如果配置的化)-> 知识库数据排序 -> 检索大模型 -> 返回结果

检索流程

2. 关键代码

1. 发起会话

网页端发起请求到 /apps/<uuid:app_id>/completion-messages 接口,uuid:app_id 是具体智能体的id
映射到的方法为 api/controllers/console/app/completion.py 文件中的
ChatMessageApi 类的 post 方法上面

class ChatMessageApi(Resource):
    @setup_required
    @login_required
    @account_initialization_required
    @get_app_model(mode=[AppMode.CHAT, AppMode.AGENT_CHAT])
    def post(self, app_model):
...
 try: # 这个方法向下调用
     response = AppGenerateService.generate(
     app_model=app_model, user=account, args=args, invoke_from=InvokeFrom.DEBUGGER, streaming=streaming)


2. 检索知识库

上面方法会匹配到对应的智能体方法来进行处理,下面的代码都是关键节点的请求代码
最终调用 DatasetRetrieval(application_generate_entity) 获取知识库的数据

class AppGenerateService:
# 调用生成方法
CompletionAppGenerator().generate()
# 内部连续调用
def _generate_worker(
CompletionAppRunner()
CompletionAppRunner 的 run 方法内部进行知识库获取
runner.run(
dataset_retrieval = DatasetRetrieval(application_generate_entity)

3. 重排序

重排序在 DatasetRetrieval(application_generate_entity) 方法中进行
在它的 retrieve 方法中

# 关键代码
all_documents = self.multiple_retrieve

4. 搜索大模型

# 传入查询关键参数
invoke_result = model_instance.invoke_llm(
            prompt_messages=prompt_messages,
            model_parameters=application_generate_entity.model_conf.parameters,
            stop=stop,
            stream=application_generate_entity.stream,
            user=application_generate_entity.user_id,
        )

5. 返回结果

# 处理返回结果
        self._handle_invoke_result(
            invoke_result=invoke_result, queue_manager=queue_manager, stream=application_generate_entity.stream
        )
posted @ 2025-05-27 21:12  vwa  阅读(196)  评论(0)    收藏  举报