之前我的文章里写的是通过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。