package com.xmkjsoft.xmkjsoft.ai;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
import java.util.Scanner;

/**
 * AIstart 类是一个简单的命令行交互程序,用于教授基础知识给AI,并允许用户通过输入问题来检索答案。
 */
public class AIstart {
    // 存储学到的知识点的列表
    private ArrayList<String> knowledgeList = new ArrayList<>();
    // 存储学到的知识点特征的列表
    private ArrayList<String> knowledgeFeatureList = new ArrayList<>();

    // 使用HashMap存储知识点和其特征的映射关系
    private HashMap<String, String> knowledgeMap = new HashMap<>();

    /**
     * teachAI 方法用于循环教授知识点给AI,并接受用户提问。
     */
    public void teachAI() {
        Scanner scanner = new Scanner(System.in);

        // 循环进行知识教授和提问
        while (true) {
            System.out.print("请输入知识点名称(输入 'exit' 退出),(输入 '提问' 进行提问):");
            String knowledgePoint = scanner.nextLine();

            if (knowledgePoint.equalsIgnoreCase("提问")) {
                System.out.print("请输入问题:");
                String question = scanner.nextLine();

                // 从知识库中检索问题的答案
                String answer = retrieveAnswer(question);
                System.out.println("AI的回答:" + answer);
            }

            // 结束教学循环
            if (knowledgePoint.equalsIgnoreCase("exit")) {
                System.out.println("学习结束,退出循环。");
                break;
            }

            // 将知识点名称存入ArrayList
            knowledgeList.add(knowledgePoint);

            // 继续学习知识点特征
            System.out.print("请输入知识点特征(输入 'exit' 退出):");
            String knowledgeFeaturePoint = scanner.nextLine();

            // 将知识点特征存入ArrayList
            knowledgeFeatureList.add(knowledgeFeaturePoint);

            // 将知识点名称和特征存入HashMap
            knowledgeMap.put(knowledgePoint, knowledgeFeaturePoint);
        }

        // 打印学到的知识
        printLearnedKnowledge();
    }

    // 在类的开头声明一个随机数生成器
    private Random random = new Random();

    /**
     * retrieveAnswer 方法用于从知识库中检索问题的答案。
     * @param question 用户提问的问题
     * @return 答案字符串
     */
    private String retrieveAnswer(String question) {
        // 用于存储匹配的知识点的列表
        ArrayList<String> matchingQuestions = new ArrayList<>();

        // 遍历知识库,寻找包含或被包含于提问中的知识点
        for (String knownQuestion : knowledgeMap.keySet()) {
            if (knownQuestion.contains(question) || question.contains(knownQuestion)) {
                matchingQuestions.add(knownQuestion);
            }
        }

        // 如果有匹配的知识点,则随机选择一个返回其特征
        if (!matchingQuestions.isEmpty()) {
            String randomMatchingQuestion = matchingQuestions.get(random.nextInt(matchingQuestions.size()));
            return knowledgeMap.get(randomMatchingQuestion);
        }

        // 如果没有匹配的知识点,则返回默认提示
        return "抱歉,我不知道答案。";
    }

    /**
     * printLearnedKnowledge 方法用于打印学到的知识点和特征。
     */
    private void printLearnedKnowledge() {
        System.out.println("学到的知识:");
        for (int i = 0; i < knowledgeList.size(); i++) {
            System.out.println("知识点:" + knowledgeList.get(i) + ", 特征:" + knowledgeFeatureList.get(i));
        }
    }

    /**
     * 主程序入口,创建 AIstart 对象并调用 teachAI 方法。
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        AIstart ai = new AIstart();

        // 调用 teachAI() 方法进入循环教授知识
        ai.teachAI();
    }
}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐