知识树创建更新与保存

创建更新与保存

import networkx as nx
import json
import requests

# 示例对话内容
dialogue = """
客户:你好,我想了解一下产品的保修政策。
坐席:您好!我们的产品保修期为一年,从购买之日起计算。
客户:如果产品在保修期内出现故障,我该怎么办?
坐席:您可以在保修期内将产品送到我们指定的维修点进行免费维修。
客户:维修点在哪里?
坐席:您可以在我们的官方网站上查询最近的维修点地址。
"""

# 手动解析对话内容
def parse_dialogue(dialogue):
    lines = dialogue.strip().split("\n")
    questions = []
    answers = []
    for i in range(0, len(lines), 2):
        question = lines[i].replace("客户:", "").strip()
        answer = lines[i + 1].replace("坐席:", "").strip()
        questions.append(question)
        answers.append(answer)
    return questions, answers

questions, answers = parse_dialogue(dialogue)
print("问题:", questions)
print("答案:", answers)

# 生成需要补充的问题
def generate_supplement_questions(questions, answers):
    prompt = "基于以上对话内容,您认为还需要补充哪些问题?请以问题的形式列出。\n"
    for q, a in zip(questions, answers):
        prompt += f"问题:{q}\n答案:{a}\n"
    prompt += "需要补充的问题:"

    # 调用 Ollama API 生成补充问题
    data = {
        "model": "qwen2.5:14b",
        "prompt": prompt,
        "stream": False,
        "temperature": 0.7,
        "max_tokens": 200
    }
    response = requests.post("http://127.0.0.1:11434/api/generate", json=data)
    if response.status_code == 200:
        return response.json().get("response", "")
    else:
        return f"API 请求失败,状态码:{response.status_code}"

# 生成需要补充的问题
supplement_questions = generate_supplement_questions(questions, answers)
print("需要补充的问题:", supplement_questions)

# 专家回答
def expert_answers(supplement_questions):
    print("专家,请回答以下问题:")
    print(supplement_questions)
    answers = []
    for q in supplement_questions.split("\n"):
        if q.strip():
            print(f"问题:{q}")
            answer = input("专家回答:")
            answers.append(answer)
    return answers

# 专家回答
expert_answers_list = expert_answers(supplement_questions)
print("专家的回答:", expert_answers_list)

# 构建知识树
def build_knowledge_tree(questions, answers, supplement_questions, expert_answers):
    tree = nx.DiGraph()
    root = "产品保修"
    tree.add_node(root)
    
    for q, a in zip(questions, answers):
        tree.add_node(q)
        tree.add_edge(root, q)
        tree.add_node(a)
        tree.add_edge(q, a)
    
    for q, a in zip(supplement_questions.split("\n"), expert_answers):
        if q.strip():
            tree.add_node(q)
            tree.add_edge(root, q)
            tree.add_node(a)
            tree.add_edge(q, a)
    
    return tree

# 构建知识树
knowledge_tree = build_knowledge_tree(questions, answers, supplement_questions, expert_answers_list)

# 保存知识树为JSON格式
def save_knowledge_tree(tree, filename):
    tree_data = nx.node_link_data(tree)
    with open(filename, 'w', encoding='utf-8') as f:
        json.dump(tree_data, f, ensure_ascii=False, indent=4)

# 保存知识树
save_knowledge_tree(knowledge_tree, 'knowledge_tree.json')

显示知识树

import networkx as nx
import json
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

# 加载JSON格式的知识树
def load_knowledge_tree(filename):
    with open(filename, 'r', encoding='utf-8') as f:
        tree_data = json.load(f)
    return nx.node_link_graph(tree_data)

# 设置字体路径
font_path = "/System/Library/Fonts/STHeiti Light.ttc"  # macOS系统自带的黑体字体路径
font_prop = FontProperties(fname=font_path)

# 可视化知识树
def visualize_tree(tree):
    pos = nx.spring_layout(tree, k=0.5, iterations=20)  # 节点布局
    nx.draw(tree, pos, with_labels=True, node_size=500, node_color="skyblue", font_size=8, font_weight='bold', font_family=font_prop.get_name())
    plt.title("知识树", fontproperties=font_prop)
    plt.axis('off')  # 关闭坐标轴
    plt.show()

# 加载知识树
knowledge_tree = load_knowledge_tree('knowledge_tree.json')

# 可视化知识树
visualize_tree(knowledge_tree)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jacky_wxl(微信同号)

喜欢作者

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值