当前位置: 首页 > news >正文

微软GraphRAG +本地模型+Gradio 简单测试笔记

安装

pip install graphragmkdir -p ./ragtest/input#将文档拷贝至  ./ragtest/input/  下python -m graphrag.index --init --root ./ragtest

修改settings.yaml


encoding_model: cl100k_base
skip_workflows: []
llm:api_key: ${GRAPHRAG_API_KEY}type: openai_chat # or azure_openai_chatmodel: qwen2-instructmodel_supports_json: true # recommended if this is available for your model.# max_tokens: 4000# request_timeout: 180.0api_base: http://192.168.2.2:9997/v1/# api_version: 2024-02-15-preview# organization: <organization_id># deployment_name: <azure_model_deployment_name># tokens_per_minute: 150_000 # set a leaky bucket throttle# requests_per_minute: 10_000 # set a leaky bucket throttle# max_retries: 10# max_retry_wait: 10.0# sleep_on_rate_limit_recommendation: true # whether to sleep when azure suggests wait-timesconcurrent_requests: 5 # the number of parallel inflight requests that may be madeparallelization:stagger: 0.3# num_threads: 50 # the number of threads to use for parallel processingasync_mode: threaded # or asyncioembeddings:## parallelization: override the global parallelization settings for embeddingsasync_mode: threaded # or asynciollm:api_key: ${GRAPHRAG_API_KEY}type: openai_embedding # or azure_openai_embeddingmodel: bge-large-zh-v1.5api_base: http://127.0.0.1:9997/v1/# api_version: 2024-02-15-preview# organization: <organization_id># deployment_name: <azure_model_deployment_name># tokens_per_minute: 150_000 # set a leaky bucket throttle# requests_per_minute: 10_000 # set a leaky bucket throttle# max_retries: 10# max_retry_wait: 10.0# sleep_on_rate_limit_recommendation: true # whether to sleep when azure suggests wait-times# concurrent_requests: 25 # the number of parallel inflight requests that may be made# batch_size: 16 # the number of documents to send in a single request# batch_max_tokens: 8191 # the maximum number of tokens to send in a single request# target: required # or optionalchunks:size: 300overlap: 100group_by_columns: [id] # by default, we don't allow chunks to cross documentsinput:type: file # or blobfile_type: text # or csvbase_dir: "input"file_encoding: utf-8file_pattern: ".*\\.txt$"cache:type: file # or blobbase_dir: "cache"# connection_string: <azure_blob_storage_connection_string># container_name: <azure_blob_storage_container_name>storage:type: file # or blobbase_dir: "output/${timestamp}/artifacts"# connection_string: <azure_blob_storage_connection_string># container_name: <azure_blob_storage_container_name>reporting:type: file # or console, blobbase_dir: "output/${timestamp}/reports"# connection_string: <azure_blob_storage_connection_string># container_name: <azure_blob_storage_container_name>entity_extraction:## llm: override the global llm settings for this task## parallelization: override the global parallelization settings for this task## async_mode: override the global async_mode settings for this taskprompt: "prompts/entity_extraction.txt"entity_types: [organization,person,geo,event]max_gleanings: 0summarize_descriptions:## llm: override the global llm settings for this task## parallelization: override the global parallelization settings for this task## async_mode: override the global async_mode settings for this taskprompt: "prompts/summarize_descriptions.txt"max_length: 500claim_extraction:## llm: override the global llm settings for this task## parallelization: override the global parallelization settings for this task## async_mode: override the global async_mode settings for this task# enabled: trueprompt: "prompts/claim_extraction.txt"description: "Any claims or facts that could be relevant to information discovery."max_gleanings: 0community_report:## llm: override the global llm settings for this task## parallelization: override the global parallelization settings for this task## async_mode: override the global async_mode settings for this taskprompt: "prompts/community_report.txt"max_length: 2000max_input_length: 8000cluster_graph:max_cluster_size: 10embed_graph:enabled: false # if true, will generate node2vec embeddings for nodes# num_walks: 10# walk_length: 40# window_size: 2# iterations: 3# random_seed: 597832umap:enabled: false # if true, will generate UMAP embeddings for nodessnapshots:graphml: falseraw_entities: falsetop_level_nodes: falselocal_search:# text_unit_prop: 0.5# community_prop: 0.1# conversation_history_max_turns: 5# top_k_mapped_entities: 10# top_k_relationships: 10# max_tokens: 12000global_search:# max_tokens: 12000# data_max_tokens: 12000# map_max_tokens: 1000# reduce_max_tokens: 2000# concurrency: 32

LLM模型 :Qwen2-72B-Instruct
EMBEDDING模型:  bge-large-zh-v1.5

本地部署模型使用的Xinference

生成索引 图谱

python -m graphrag.index --root ./ragtest

成功界面

全局查询和本地查询

python -m graphrag.query \
--root ./ragtest \
--method global \
"你的问题"python -m graphrag.query \
--root ./ragtest \
--method local \
"你的问题"

gradio 代码

import sys
import shleximport gradio as gr
import subprocessdef parse_text(text):lines = text.split("\n")lines = [line for line in lines if line != ""]count = 0for i, line in enumerate(lines):if "```" in line:count += 1items = line.split('`')if count % 2 == 1:lines[i] = f'<pre><code class="language-{items[-1]}">'else:lines[i] = f'<br></code></pre>'else:if i > 0:if count % 2 == 1:line = line.replace("`", "\`")line = line.replace("<", "&lt;")line = line.replace(">", "&gt;")line = line.replace(" ", "&nbsp;")line = line.replace("*", "&ast;")line = line.replace("_", "&lowbar;")line = line.replace("-", "&#45;")line = line.replace(".", "&#46;")line = line.replace("!", "&#33;")line = line.replace("(", "&#40;")line = line.replace(")", "&#41;")line = line.replace("$", "&#36;")lines[i] = "<br>" + linetext = "".join(lines)return textdef predict(history):messages = []for idx, (user_msg, model_msg) in enumerate(history):if idx == len(history) - 1 and not model_msg:messages.append({"role": "user", "content": user_msg})breakif user_msg:messages.append({"role": "user", "content": user_msg})if model_msg:messages.append({"role": "assistant", "content": model_msg})messages = messages[len(messages) - 1]["content"]print("\n\n====conversation====\n", messages)python_path = sys.executable# 构建命令cmd = [python_path, "-m", "graphrag.query","--root", "./ragtest","--method", "local",]# 安全地添加查询到命令中cmd.append(shlex.quote(messages))try:result = subprocess.run(cmd, capture_output=True, text=True, check=True, encoding='utf-8')output = result.stdoutif output:# 提取 "SUCCESS: Local Search Response:" 之后的内容response = output.split("SUCCESS: Local Search Response:", 1)[-1]history[-1][1] += response.strip()yield historyelse:history[-1][1] += "None"yield historyexcept subprocess.CalledProcessError as e:print(e)with gr.Blocks() as demo:gr.HTML("""<h1 align="center">GraphRAG 测试</h1>""")chatbot = gr.Chatbot(height=600)with gr.Row():with gr.Column(scale=4):with gr.Column(scale=12):user_input = gr.Textbox(show_label=False, placeholder="Input...", lines=10, container=False)with gr.Column(min_width=32, scale=1):submitBtn = gr.Button("Submit")def user(query, history):return "", history + [[parse_text(query), ""]]submitBtn.click(user, [user_input, chatbot], [user_input, chatbot], queue=False).then(predict, [chatbot], chatbot)demo.queue()
demo.launch(server_name="0.0.0.0", server_port=9901, inbrowser=True, share=False)

不知道是不是受限于模型能力 还是自己操作问题,个人感觉效果一般 

http://www.lryc.cn/news/401932.html

相关文章:

  • 数学建模-Topsis(优劣解距离法)
  • 嵌入式linux相机 转换模块
  • 【自学安全防御】二、防火墙NAT智能选路综合实验
  • 【Android】传给后端的Url地址被转码问题处理
  • 1.厦门面试
  • 设计模式使用场景实现示例及优缺点(行为型模式——状态模式)
  • 抖音短视频seo矩阵系统源码(搭建技术开发分享)
  • 基于 asp.net家庭财务管理系统设计与实现
  • allure_pytest:AttributeError: ‘str‘ object has no attribute ‘iter_parents‘
  • C语言 反转链表
  • MFC CRectTracker 类用法详解
  • 好玩的调度技术-场景编辑器
  • 提高自动化测试脚本编写效率 5大关键注意事项
  • 护眼落地灯哪个更护眼?2024年度最值得入手的5款护眼大路灯推荐
  • DP讨论——适配器、桥接、代理、装饰器模式通用理解
  • Apache AGE的MATCH子句
  • Netty Websocket
  • 用户注册业务逻辑、接口设计和实现、前端逻辑
  • ubuntu搭建harbor私仓
  • 深层神经网络示例
  • vue中获取剪切板中的内容
  • 十五、【机器学习】【监督学习】- 神经网络回归
  • 知识图谱和 LLM:利用Neo4j驾驭大型语言模型(探索真实用例)
  • 目标检测入门:4.目标检测中的一阶段模型和两阶段模型
  • zookeeper+kafka消息队列群集部署
  • [K8S]一、Flink on K8S
  • 系统架构设计师教程 第3章 信息系统基础知识-3.1 信息系统概述
  • Gemma的简单理解;Vertex AI的简单理解,与chatGpt区别
  • Lua 数组
  • 游戏中的敏感词算法初探