之前我的文章里写的是通过langchain来构建RAG应用,对于很多人来说。langchain作为一个框架上手难度大,代码不够直观。但是通过dify你将学会可视化搭建工作流。
什么是dify?
Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。
通俗点说,通过手机点击创建ai应用,而不用写代码了。
官网链接
阅读本文之前,假设读者已经了解llm、prompt、chatglm、git、github、docker、rag流程、向量数据(embedding)的相关知识,假如没有,可以先学习这些知识。
怎么使用dify?
安装dify
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
docker compose up -d  
检查
输入docker ps,出现以下服务就是正常的
 
 安装好之后,打开localhost:80(如果你安装在服务器或者wsl中),需要将localhost转换为对应的ip。
第一次登陆需要设置管理员账户

假设你已经完成了管理员的创建
创建一个llm应用
创建应用
 
 
 添加llm model
 
 这里我使用chat glm的在线model,读者可以根据自己的喜好添加model。
 输入完secret key选择相应的model之后就可以使用了。

 这样你就完成了dify的第一个应用!!!
是不是很简单!!!
进阶
接下来我们将使用dify搭建一个RAG聊天应用
再次创建应用
这一次我们选择工作流编排的方式创建聊天机器人
 
 进去之后我们会看到一个开始模块,然后会在左下角看见几个icon,点击
 
 创建完知识检索的块,之后上传你的pdf文件,然后向量化,检索的话可以使用多种方式,嫌麻烦可以默认。


 这里相当于之前使用langchain的时候进行的文档加载与向量化,具体可以看下我这篇文章,langchain入门系列之六 使用langchain构建PDF解析助手
具体作用相当于这一块的代码
# 解析pdf并保存到本地向量数据库中
def save_pdf(file_path, file_name):
    loader = PyPDFLoader(file_path)
    # 分割
    text_spliter = RecursiveCharacterTextSplitter(
        chunk_size=200,
        chunk_overlap=5,  # 每个块之间的重叠长度
        length_function=len,
    )
    pages = loader.load_and_split(text_spliter)
    persist_path = persist_directory + file_name
    # 持久化到本地
    Chroma.from_documents(
        documents=pages,
        embedding=embedding,
        persist_directory=persist_path
        )
# 加载向量索引
def load_index(file_name):
    persist_path = persist_directory + file_name
    print(persist_path)
    index = Chroma(persist_directory=persist_path, embedding_function=embedding)
    return index
在这里面需要注意的是查询变量,我们用的sys.query,这是最开始的输出。
 
 根据文章内容测试一下,发现有内容返回,那就没问题。
创建条件流

 json解析
 
 条件分支
 

 QA
 
 QA 答案
 
 duckduckgo搜索
 
 搜索答案提取

 搜索答案回复
 
小试牛刀

 当我输入拿破仑意识到了什么时?llm根据书中内容,回复了答案。
注意的事
配置duckduckgo貌似需要科学上网,否则会超时,这里可以替换成bing。



















