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
)
坚持做好每件事,然后再做下一件。

浙公网安备 33010602011771号