手把手教你Langchain-chatchat 接入Dify

一、Dify介绍

Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 [LLMOps]的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。

由于 Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎以及灵活的 Agent 框架,并同时提供了一套易用的界面和 API。这为开发者节省了许多重复造轮子的时间,使其可以专注在创新和业务需求上。

二、为什么接入Dify

Dify 可以方面的管理多个大模型,方面用户快速使用和切换多个大模型,此外,Dify可以很方便的查看应用的使用数据:

Dify.PNG

以及可以方便查看历史对话记录等:

【一一AGI大模型学习 所有资源获取处一一】

①人工智能/大模型学习路线

②AI产品经理入门指南

③大模型方向必读书籍PDF版

④超详细海量大模型实战项目

⑤LLM大模型系统学习教程

⑥640套-AI大模型报告合集

⑦从0-1入门大模型教程视频

⑧AGI大模型技术公开课名额

三、接入流程

1、新增model_config配置
LLM_MODELS = ["qianfan-api","dify-api"]  # "Qwen-1_8B-Chat",
​
​
ONLINE_LLM_MODEL = {
   "dify-api": {
        # "version": "SkyChat-MegaVerse",
        "api_key": Dify应用的apiKey,
        "secret_key": "",
        "provider": "DifyWorker", #对应 __init__.py中的名称},
}


2、server_config新增dify应用的启动端口
   "dify-api": {
        "port": 21010,
    },


3、新增Dify应用的model_work
#自定义Dify的model_work,这里文件名为dify.pyfrom fastchat.conversation import Conversation
from server.model_workers.base import *
from server.utils import get_httpx_client
from fastchat import conversation as conv
import json
import sys
from typing import List, Dict
import uvicorn
from streamlit_javascript import st_javascript
​
​
​
class DifyWorker(ApiModelWorker):
    conversation_id = ""def __init__(
            self,
            *,
            controller_addr: str = None,
            worker_addr: str = None,
            model_names: List[str] = ["dify-api"],
            # version: Literal["SkyChat-MegaVerse"] = "SkyChat-MegaVerse",
            **kwargs,
    ):
        kwargs.update(model_names=model_names, controller_addr=controller_addr, worker_addr=worker_addr)
        kwargs.setdefault("context_len", 16384)
        super().__init__(**kwargs)
        # self.version = version
​
​
    def do_chat(self, params: ApiChatParams) -> Dict:
        params.load_config(self.model_names[0])
​
        url = 'https://api.dify.ai/v1/chat-messages'
​
        data = {
            "inputs": {},
            "query": params.messages[-1].get("content"),
            "response_mode": "streaming",
            "conversation_id": self.conversation_id,
            "user": "testUser",
            "files": []
        }
​
        headers = {
            'Authorization': f'Bearer {params.api_key}',
            'Content-Type': 'application/json'
        }
​
        text = ""
        with get_httpx_client() as client:
            with client.stream("POST", url, headers=headers, json=data) as response:
                for line in response.iter_lines():
                    #如果该行为空,则跳过
                    if not line.strip():
                        continue
                    if line.startswith("data: "):
                        line = line[6:]if line == 'event: ping':
                        continue
                    resp = json.loads(line)
                    self.conversation_id = resp["conversation_id"]if "answer" in resp.keys():
                        text += resp["answer"]
                        yield {
                            "error_code": 0,
                            "text": text
                        }
                    else:
                        data = {
                            "error_code": resp["code"],
                            "text": resp["code_msg"]
                        }
​
                        self.logger.error(f"请求Dify-API 时发生错误:{data}")
                        yield data
​
​
​
    def get_embeddings(self, params):
        # TODO: 支持embeddings
        print("embedding")
        print(params)def make_conv_template(self, conv_template: str = None, model_path: str = None) -> Conversation:
        # TODO: 确认模板是否需要修改
        return conv.Conversation(
            name=self.model_names[0],
            system_message="",
            messages=[],
            roles=["user", "system"],
            sep="\n### ",
            stop_str="###",
        )
​
​
if __name__ == "__main__":from server.utils import MakeFastAPIOffline
    from fastchat.serve.model_worker import app
​
    worker = DifyWorker(
        controller_addr="http://127.0.0.1:20001",
        worker_addr="http://127.0.0.1:21010"     #对应Dify的应用端口
    )
    sys.modules["fastchat.serve.model_worker"].worker = worker
    MakeFastAPIOffline(app)
    uvicorn.run(app, port=21010)   


然后在model_woeks目录下的init.py文件中把自己定义的dify.py导入:

from .dify import DifyWorker


需要注意的是,Dify创建的应用分为文本生成应用类型和对话类型,这两种应用的post请求参数不相同,详情可以参考Dify应用的访问API说明即可。

DifyApi.PNG

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值