private static final String API_SECRET_KEY = "此处替换为你的API key"; private static final ClientV4 client = new ClientV4.Builder(API_SECRET_KEY) .networkConfig(60, 60, 60, 60, TimeUnit.SECONDS) .build();
private static final String AI_INTERVIEWER_SYSTEM_PROMPT = "从知识库中找属于{{用户给出的公司名称}}的后端开发面试题,用于向面试者提问,找不到就用自身知识提问并且告诉用户该信息不是来自文档。\n" + "如果用户没有给出公司名称,请从知识库中随机找面试问题。\n" + "要求:(1)只需要提出问题,绝对不要回答给出的问题。(2)至少给出5个问题 (3)不要直接照搬知识库内容,请将找到的内容润色成面试问题(4)按照{序号}.{面试题}的格式输出"; private static final String AI_APPLICANT_SYSTEM_PROMPT = "你是一位求职者,你要结合知识库,清晰准确地回答面试官提出的问题。\n" + "要求:(1)优先搜索知识库答案 (2)找到答案后,润色成口语化表达 (3)使用第一人称进行回答,回答不超过200字。";
public static String invoke(String systemMessage, String userMessage) { // 1. 这里的作用是收集上下文,让AI根据我们给出的上下文继续推导,也可以把入参直接改为List<ChatMessage> context List<ChatMessage> messages = Arrays.asList( new ChatMessage(ChatMessageRole.SYSTEM.value(), systemMessage), new ChatMessage(ChatMessageRole.USER.value(), userMessage) ); // 2. 配置知识库工具 List<ChatTool> tools = Collections.singletonList(createKnowledgeChatTool()); // 3. 构建请求 ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder() .model("glm-4-long") // 使用最新的大模型 .stream(false) // 不使用流式输出 .invokeMethod(Constants.invokeMethod) .messages(messages) // 已知上下文 .tools(tools) // 其他工具:网络搜索、知识库、自定义函数等 .build(); try { // 4. 发起请求,如果想到达到GPT那种“打字”效果,可以转换为流式输出(SSE、Websocket) ModelApiResponse invokeModelApiResp = client.invokeModelApi(chatCompletionRequest); return (String) Optional.ofNullable(invokeModelApiResp) .map(ModelApiResponse::getData) .map(data -> data.getChoices().get(0).getMessage().getContent()) .orElse(""); } catch (Exception e) { System.err.println("调用AI失败: " + e.getMessage()); return ""; } } private static ChatTool createKnowledgeChatTool() { ChatTool tool = new ChatTool(); tool.setType(ChatToolType.RETRIEVAL.value()); // 规定工具类型为搜索知识库 Retrieval retrieval = new Retrieval(); retrieval.setKnowledge_id(KNOWLEDGE_ID); // 指定知识库ID tool.setRetrieval(retrieval); return tool; }
public static void main(String[] args) { String company = "字节"; //选择你需要面试的公司 String aiInterviewerReply = invoke(AI_INTERVIEWER_SYSTEM_PROMPT, company); if (StringUtils.isEmpty(aiInterviewerReply)) { return; } // 切分字符串为问题数组 List<String> questions = Arrays.asList(aiInterviewerReply.split("\n")); // 按需保存问题和答案 Map<String, String> questionAnswerMap = new LinkedHashMap<>(); questions.forEach(question -> { String userPrompt = String.format("---公司名---\n%s\n---面试问题---\n%s", company, question); String aiApplicantReply = invoke(AI_APPLICANT_SYSTEM_PROMPT, userPrompt); questionAnswerMap.put(question, aiApplicantReply); }); // 打印结果 printResults(company, questionAnswerMap); } private static void printResults(String company, Map<String, String> questionAnswerMap) { System.out.println("****** " + company + " ******"); questionAnswerMap.forEach((question, answer) -> { System.out.println("============================"); System.out.println(question); System.out.println(answer); }); }
Was this page helpful?