1.注册,登录,配置模型
2.创建知识库
3.创建聊天助手
查看文档切片(图片也会被解析出来)
4.创建知识库
import os.path
# 导入依赖
from ragflow_sdk import RAGFlow #链接rag服务的客户端
from deep_search_pro.ragflow.rag_config import _load_ragflow_env
# 创建一个ragflow的客户端
api_key,base_url =_load_ragflow_env()
ragflow_client = RAGFlow(api_key=api_key,base_url=base_url)
# RAGFlow 文档:https://ragflow.io/docs/python_api_reference#create-dataset
# 代码创建知识库
def create_knowledge_base(knowledge_base_name, description):
"""
创建知识库,有个名字和描述!
名字和描述一定要准确的写!agent调用哪个聊天助手看聊天助手的描述和他对应知识库的描述!
:param knowledge_base_name: 名字
:param description: 描述
:return:
"""
ds = ragflow_client.create_dataset(name=knowledge_base_name, description=description,embedding_model="text-embedding-v3@Tongyi-Qianwen")
# ds = ragflow_client.create_dataset(name=knowledge_base_name, description=description,embedding_model="BAAI/bge-large-zh-v1.5@BAAI")
print(f"创建知识库成功:{ds},{ds.id}")
# 使用上传文件到知识库
def upload_file_to_knowledge_base(kb_id, file_paths):
"""
向知识库上传文件! 文件可以是多个!!
"""
# 1.链接ragflow的客户端
# 2.获取传入文件的知识库对象
datasets = ragflow_client.list_datasets(id=kb_id,page=1,page_size=10)
dataset = datasets[0]
# 3.文件包装成对应的上传dict格式
document_list = [] # 存储上传文件的列表
for file_path in file_paths:
# file_path 文件的地址
file_name = os.path.basename(file_path) # 获取文件名
with open(file_path, 'rb') as f:
blob = f.read()
document_list.append({
"display_name": file_name,
"name": file_name,
"blob": blob
})
# 4.进行文件上传了
dataset.upload_documents(document_list)
if __name__ == '__main__':
# 创建知识库
create_knowledge_base("代码创建的知识库222", "今晚打老虎,啦啦啦啦!!",)
RAGFlow可视化界面查看:
5.代码获取聊天列表,通过聊天助手名字和聊天助手聊天
# 导入依赖
from ragflow_sdk import RAGFlow, Chat # 链接rag服务的客户端
from ragflow.rag_config import _load_ragflow_env
# 创建一个ragflow的客户端
api_key , base_url =_load_ragflow_env()
ragflow_client = RAGFlow(api_key=api_key,base_url=base_url)
# 1. 查询现在知识库中有哪些聊天助手和对应知识库的信息 (方便我们知道rag可以给我们提供哪些数据)
def get_assistant_list():
# 1. 创建ragflow客户端
# 2. ragflow客户端查询所有的聊天助手 page: int = 1, page_size: int = 30
chat_list:list[Chat] = ragflow_client.list_chats()
# 3. 查询聊天助手的知识库信息
count_chat_info = "" #存储所有会话信息
for chat in chat_list:
dataset_names = []
dataset_list = chat.datasets #当前聊天助手关联的知识库
if dataset_list and isinstance(dataset_list,list):
# 知识库的name
for dataset in dataset_list:
print(dataset)
print("="*150)
dataset_names.append(dataset['name']) # 将一个助手的知识库的名字加入到列表中
# 拼接下当前助手的信息 + 知识库信息
# 法律资源小助手 xxxxxx 关联知识库:xx、xxx、xxx
count_chat_info += f"助手名称:{chat.name};功能介绍:{chat.description}; 关联的知识库:{'、'.join(dataset_names)} \n"
# 4. 拼接助手和知识库信息,返回供模型参考(lm知道你哪个助手干啥事,可以调用对应的助手)
return count_chat_info
# 2. 对某个助手进行提问(创建会话 -》 提问 -》 删除会话)
def ask_question(chat_name,question):
"""
向某个助手发起提问: 1. 创建一个会话 2.提问 3.关闭会话!
:param chat_name: 助手的名字!上一个工具get_assistant_list告诉大模型的只有名字
:param question: 本次提问的问题
:return: 返回提问的结果
"""
"""
---> dataset
agent 我们 ----》 session --》 chat(助手) ---> dataset
---> dataset
"""
# 1. 创建ragflow客户端
# 2. 查询对应name的chat
chats = ragflow_client.list_chats(name=chat_name) #chat_name=法律援助助手
use_chat = chats[0] #选中我们要使用的助手
# 3. chat上创建一个会话
session = use_chat.create_session(name="temp_session_ask")
# 4. 使用会话进行提问
# 返回的提问结果是流式
response = session.ask(question = question,stream=True) #question=法律援助助手
# 接收总结果
result = ""
# 流的每一部分的对象 part
for part in response:
# 数据存在对象中content上!!
print(part.content)
result = part.content
# 5. 关闭提问的会话
# chat -> 关闭 -》 session
# use_chat.delete_sessions(ids=[session.id])# '21c0cd7a63b611f19d4f9218bd828f96'
# 6. 返回结果
return result
if __name__ == '__main__':
#print(get_assistant_list())
print(ask_question("空调维修指南助手", "空调漏水怎么修呢????"))
返回数据:(##4$$是引用的图片)
根据知识库中的内容,空调漏水的可能原因和修理方法如下:
1. **冷凝水管安装不当**
- 排水软管不得有瘪管或强扭现象,否则会导致排水不畅 ##0$$。
- 软管两端需用卡箍卡紧密封,禁止使用胶水 ##0$$。
- 冷凝水管坡度需满足设计要求(机组接管处≥1%,水平干管≥3‰),避免低坡积水 ##0$$。
- 汇流时禁止冷凝水相向对流,且支管需从主管上方接入 ##0$$。
2. **过滤器堵塞**
- 过滤网积尘过多会堵塞出风,导致冷凝水积聚 ##4$$。需每两周清洁一次:拆下过滤网用清水冲洗(脏污时可用中性洗涤剂),彻底干燥后装回 ##2$$ ##4$$。
3. **冷凝水系统漏气或堵塞**
- 排水管安装后需进行通水试验:向接水盘注水,确认排水顺畅 ##6$$。
- 满水试验:堵住末端排水口后注水,检查接口是否漏水 ##6$$。
- 排水管保温需无间隙且密封;埋墙管道需保温,接口需涂胶水粘贴 ##3$$。
4. **室外机冷凝水排放问题**
- 热泵室外机挂墙安装时须设专用排水管,避免高空落水引发投诉 ##6$$。
**修理步骤建议**
1. 清洁过滤网 ##4$$;
2. 检查排水软管是否扭曲或密封失效 ##0$$;
3. 测量管道坡度是否达标 ##0$$;
4. 对冷凝水管进行通水/满水试验排查泄漏或堵塞 ##6$$。