C#学习:构建一个更真实的基于LLM的简历评估系统

笔记哥 / 05-29 / 42点赞 / 0评论 / 215阅读
## 前言 昨天的Demo以txt文件为例进行说明,并且评估标准写死了,跟真实的简历评估系统差别太大了。今天分享的是经过改进后更加真实的基于LLM的简历评估系统。 使用AI生成了5份不同的简历,如下所示: 程序员A: ![image-20250529150723475](https://cdn.res.knowhub.vip/c/2505/29/c01e5472.png?G1YAAMTydJz4d5x8u406fJsoEpoBiSyCSgnr9Z6z9i3y%2fQ5Fic9offr%2b8JfWp0uGGYoKFFQieFyJhBpQA5GQjJbjGg4%3d) 程序员B: ![image-20250529150852726](https://cdn.res.knowhub.vip/c/2505/29/17050cfb.png?G1cAAETn9LwUrJDBvtMdbIlTE20GLNIIKiWs13vO2jfR9wcYkp%2fR%2boz94Tetz6AKMwgTGMqKFOBFFWxQS8VNLxGG5zUC) 程序员C: ![image-20250529150944801](https://cdn.res.knowhub.vip/c/2505/29/3677db0b.png?G1cAAMTsdJxI8oS026hD2jvFHc2ARRpBpYT1es9Z%2byb6fgcjx2e0Pn1%2f%2bE3r0ynBDJkJDGVFCLhEFWxQCQJLtaBwjWs4) 程序员D: ![image-20250529151025846](https://cdn.res.knowhub.vip/c/2505/29/11400245.png?G1cAAMTydJz4%2b%2bMbuo06fJsoEpoBizSCSgnr9Z6z9i3y%2fU4wx2e0Pn1%2f%2bE3r0yWxFGYIQYMhBFY1IwppQS%2btWomMuIYD) 程序员E: ![image-20250529151113896](https://cdn.res.knowhub.vip/c/2505/29/0eb00824.png?G1cAAMTsdJxI8pGi26hD2jvFHc2ARRpBpYT1es9Z%2byb6fgcjxWe0Pn1%2f%2bE3r00lRChITGMaGEFDFDFxwSRBo1lwNFtdw) 输入要求: ```csharp shared["requirements"] = """ - 具备前端开发能力 - 使用过Vue """; ``` 效果: ![image-20250529151320596](https://cdn.res.knowhub.vip/c/2505/29/532fa85d.png?G1YAAER17rxgpTKcfice0wSBBJoBiSyCSgnr9e491y3y%2fU4wx6fXNnx9%2bEttw%2bWgGTOEoEIRPK%2bkShjVghVkFjtTnN0B) 更改要求: ```csharp shared["requirements"] = """ - 具备后端开发能力 - 熟悉go语言 """; ``` ![image-20250529151840530](https://cdn.res.knowhub.vip/c/2505/29/2b9c50f2.png?G1YAAMTW3Dgp9EJB22gDdWfqnTYDElkElRLW6917rpvo%2bwMMyU%2bvbcT68JfaRlCBGYQJDGVF8vBDFWy4SvKT1Vxc8uwB) 全部代码已上传至GitHub,地址:https://github.com/Ming-jiayou/PocketFlowSharp/tree/main/PocketFlowSharpSamples.Console/Real_Resume_Qualification_Demo ## C#读取PDF内容 本次更改主要涉及到C#读取PDF内容。 使用的是pdfpig,项目地址:https://github.com/UglyToad/PdfPig ![image-20250529152111462](https://cdn.res.knowhub.vip/c/2505/29/1874e955.png?G1YAAMS22TiVeipU29gP%2fkNfQTUDElkElRLW6713n0b0%2fQGG5Wf2seJ8%2bEsfK0hRCowJDGdH8qjiDi7QmsAmquqS9ww%3d) 项目简介:使用 C# 读取和提取 PDF 中的文本和其他内容(PDFBox 的移植) 修改Utils类,增加读取PDF内容功能: ```csharp public static string ExtractTextFromPdf(string pdfPath) { StringBuilder text = new StringBuilder(); using (PdfDocument document = PdfDocument.Open(pdfPath)) { foreach (Page page in document.GetPages()) { text.AppendLine(page.Text); } } return text.ToString(); } ``` 效果如下所示: ![image-20250529152359085](https://cdn.res.knowhub.vip/c/2505/29/c2c8b4a4.png?G1cAAMT0bJxoXTXKNvqh%2f4lHQjNgkUZQKWG93nv3aUTf72Dk%2bMw%2blp8Pv%2bljOQnMkJnAUFaEgJpUwQbUkIqKCudicU8H) ## 灵活更改简历要求 可以将要求存入共享内存,然后通过$插值字符串,插入到提示词中即可: ```csharp string prompt = $@" 评估以下简历并确定候选人是否符合职位的要求。 资格标准: {requirements} 简历内容: {content} 请以YAML格式返回您的评估: ```yaml candidate_name: [候选人姓名] qualifies: [true/false] reasons: - [资格认定/不认定的第一个原因] - [第二个原因(如果适用)] ``` "; ``` 运行时就会变成这样: ![image-20250529152810159](https://cdn.res.knowhub.vip/c/2505/29/497a2c7b.png?G1cAAMTsdJxI8oS026hD2jvFHc2ARRpBpYT1es9Z%2byb6fgcjx2e0Pn1%2f%2bE3r0ynBDJkJDGVFCLhEFWzQFERqKQXZLK7h) ## 与LLM交互 ```csharp public static string ModelName { get; set; } public static string EndPoint { get; set; } public static string ApiKey { get; set; } public static string CallLLM(string prompt) { ApiKeyCredential apiKeyCredential = new ApiKeyCredential(ApiKey); OpenAIClientOptions openAIClientOptions = new OpenAIClientOptions(); openAIClientOptions.Endpoint = new Uri(EndPoint); ChatClient client = new(model: ModelName, apiKeyCredential, openAIClientOptions); ChatCompletion completion = client.CompleteChat(prompt); return completion.Content[0].Text; } ``` 以上就是通过这个Demo可以学习到的一些内容。