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

LLM驱动的自动化购车顾问及评测系统

项目名称:LLM驱动的自动化购车顾问及评测系统 (V2.0)

项目目标: 搭建一个自动化程序,该程序可以与两个大语言模型(LLM)进行交互,模拟完整的购车咨询流程。然后,利用一个独立的、多步骤的“裁判LLM”流程,对咨询过程中的关键环节进行细粒度的自动化评测。

技术栈建议:

  • 编程语言: Python 3.8+
  • 关键库: requests, python-dotenv, pandas, json, logging
  • 大模型API: 准备好您选择的两个大模型API的访问凭证(API Key)。

阶段零:项目初始化与环境配置 (预估时间: 2小时)

此阶段保持不变,是所有工作的基础。

  • 任务 0.1:创建项目目录结构

    • 创建一个主文件夹,例如 llm_car_advisor_v2
    • 在主文件夹内创建以下文件和子文件夹:
      llm_car_advisor_v2/
      ├── main.py                 # 主程序入口,负责编排对话和评测
      ├── llm_api_handler.py        # 封装与LLM API交互的通用逻辑
      ├── conversation_prompts.py   # 存放所有【购车对话】的提示词模板
      ├── evaluation_prompts.py     # 存放所有【评测环节】的提示词模板
      ├── evaluator.py              # 负责执行多步评测的模块
      ├── results/                  # 存放每次运行的详细对话和评测结果
      ├── config.py                 # 存放配置信息,如模型名称
      └── requirements.txt          # 项目依赖库列表
      
  • 任务 0.2:设置Python虚拟环境

    1. 在项目根目录下运行 python -m venv venv
    2. 激活虚拟环境 (Windows: .\venv\Scripts\activate | macOS/Linux: source venv/bin/activate)。
  • 任务 0.3:安装必要的库

    1. requirements.txt 文件中添加 requests, python-dotenv, pandas
    2. 运行 pip install -r requirements.txt
  • 任务 0.4:安全地配置API密钥

    1. 在项目根目录下创建 .env 文件。
    2. 在文件中添加API密钥,例如 QWEN_API_KEY="sk-..."CHATGLM_API_KEY="..."

阶段一:实现核心的LLM API交互模块 (预估时间: 3小时)

此阶段保持不变,是系统的通信中枢。

  • 任务 1.1:在 config.py 中定义模型

    • 定义你要测试的模型以及作为“裁判”的模型。
      # config.py
      MODELS_TO_TEST = {"qwen": "qwen-turbo","chatglm": "chatglm_turbo"
      }
      # 可以选择一个能力较强的模型作为裁判
      JUDGE_MODEL = "qwen-max"
      
  • 任务 1.2:在 llm_api_handler.py 中封装统一的API调用函数

    • 创建一个函数 query_llm(model_name, conversation_history, temperature=0.7)
    • 该函数负责根据 model_name 读取对应的API密钥和端点,发送请求,并返回模型的文本回复。
    • 实现健壮的错误处理机制。

阶段二:实现购车对话流程 (预估时间: 6小时)

这是项目的主体部分,关键在于不仅要完成对话,还要精心记录用于后续评测的关键对话片段。

  • 任务 2.1:在 conversation_prompts.py 中定义所有对话的提示词

    • 将所有用于生成购车建议的Prompt集中管理。
    • 特别注意: 为了方便后续提取,关键步骤的Prompt应要求模型以特定格式输出。
      # conversation_prompts.py# 步骤2: 提出购车意图 (要求JSON输出)
      PROMPT_INITIAL_INTENT = """
      我最近打算买车,预算大约20万元左右,主要用于城市通勤,希望空间舒适、安全性高。
      请你根据我的需求,初步推荐3-4款车型。
      请严格按照以下JSON格式输出你的回答,不要有任何多余的文字说明:
      {"recommendations": [{"car_name": "车型A"},{"car_name": "车型B"},{"car_name": "车型C"}],"summary": "这里是你对推荐的简要总结说明。"
      }
      """# 步骤4: 追问具体要点
      PROMPT_DEEPEN_REQUIREMENT = "基于我们之前讨论的候选车型,请重点分析一下 '{requirement_point}' 这个方面。"# 步骤5: 性能参数表格化对比 (要求Markdown输出)
      PROMPT_GENERATE_TABLE = """
      请将以下几款候选车型的主要性能参数,以Markdown表格的形式进行对比总结。
      候选车型: {candidate_cars}
      必须包含以下列:车型名称, 动力系统, 官方油耗/电耗, 轴距(mm), 主要安全配置。
      请确保格式严格为Markdown表格,不要在表格前后添加多余的解释。
      """# 步骤7: 最终推荐
      PROMPT_FINAL_RECOMMENDATION = """
      综合我们以上所有的讨论,请为我推荐最终的一款车型。
      你的推荐需要包含两部分:1. **最终推荐**: 明确写出车型名称。2. **推荐理由**: 详细说明为什么这款车最符合我所有的需求。
      """
      
  • 任务 2.2:在 main.py 中编排对话流程并结构化地保存日志

    1. 创建一个主函数 run_car_advisor_session(model_name)
    2. 核心数据结构: 在函数开始时,初始化一个 session_data 字典,用于精细地存储整个流程的数据。
      session_data = {"model_name": model_name,"full_conversation_history": [], # 存储完整对话历史"key_moments": {"initial_user_prompt": None,"first_assistant_response": None,"table_request_prompt": None,"assistant_table_response": None,"final_recommendation_response": None},"parsed_data": {"candidate_cars": [],"comparison_table_df": None},"evaluation_results": {} # 用于存放阶段三的评测结果
      }
      
    3. 分步执行对话:
      • 步骤 2 & 3 (意图与初步推荐):
        • 记录用户的初始Prompt到 session_data['key_moments']['initial_user_prompt']
        • 调用LLM,将其回复记录到 session_data['key_moments']['first_assistant_response']
        • 解析回复中的JSON,将车型列表存入 session_data['parsed_data']['candidate_cars']
      • 步骤 4 (追问要点):
        • 循环追问动力、油耗等要点,并将每一次的问答都追加到 session_data['full_conversation_history']
      • 步骤 5 & 6 (表格对比):
        • 记录生成表格的Prompt到 session_data['key_moments']['table_request_prompt']
        • 调用LLM,将其包含Markdown表格的回复记录到 session_data['key_moments']['assistant_table_response']
        • 使用Pandas解析表格,将DataFrame存入 session_data['parsed_data']['comparison_table_df'] (如果解析失败则存为None)。
      • 步骤 7 (最终推荐):
        • 调用LLM获取最终推荐,将其回复记录到 session_data['key_moments']['final_recommendation_response']
    4. 保存会话数据: 在函数结束时,将 session_data 这个完整的字典保存为JSON文件到 results/ 目录下。这个文件是下一阶段评测的唯一输入。

阶段三:实现多步自动化评测 (预估时间: 7小时)

这是根据您的建议重写的核心部分,将评测分解为三个独立的、有针对性的任务。

  • 任务 3.1:在 evaluation_prompts.py 中定义所有评测提示词

    • 将您提供的三个高质量Prompt放入此文件。
    • 评测Prompt 1: 初步推荐质量
      # evaluation_prompts.py
      EVAL_PROMPT_1_INITIAL = """
      你是一个专业的汽车导购评测员...
      【背景】
      一个用户提出了以下的购车需求:
      <user_request>
      {initial_user_prompt}
      </user_request>
      一个AI助手给出了如下的初步推荐:
      <assistant_response>
      {first_assistant_response}
      </assistant_response>
      【任务】
      请根据以下标准对AI助手的回答进行评分,并以严格的JSON格式输出,不要有任何多余的解释。
      1. **需求匹配度 (relevance_score)**: 推荐的车型是否符合用户约20万预算、城市通勤、空间舒适、安全性高的核心要求?(1-5分)
      2.  **有效性 (effectiveness_score)**: 回答是否明确列出了至少2个具体的车型名称以便后续讨论?(1-5分)
      3.  **评分理由 (justification)**: 简要说明你打分的原因。
      【输出格式】
      {"relevance_score": <int>,"effectiveness_score": <int>,"justification": "<string>"
      }
      """
      
    • 评测Prompt 2: 参数对比表生成质量
      EVAL_PROMPT_2_TABLE = """
      你是一个严格的数据格式审查员...
      【背景】
      AI助手的回应如下,其中包含了Markdown表格:
      <assistant_response_with_table>
      {assistant_table_response}
      </assistant_response_with_table>
      【任务】...
      1.  **格式规范性 (format_score)**: 回答中是否包含一个结构正确、易于解析的Markdown表格?(1-5分)
      2.  **信息完整度 (completeness_score)**: 表格是否至少包含了“动力”、“价格”、“尺寸”、“安全配置”这些核心信息中的三项或以上?(1-5分)
      3.  **评分理由 (justification)**: 简要说明理由。
      【输出格式】
      {"format_score": <int>,"completeness_score": <int>,"justification": "<string>"
      }
      """
      
    • 评测Prompt 3: 最终推荐的逻辑与说服力
      EVAL_PROMPT_3_FINAL = """
      你是一位顶级的决策分析师和逻辑学家...
      【背景】
      以下是用户与AI购车顾问的完整对话历史:
      <full_conversation_history>
      {entire_conversation_log_string}
      </full_conversation_history>
      【任务】...
      请深入分析整个对话,特别是最后的推荐部分,根据以下标准进行评分,并以严格的JSON格式输出。
      1.  **逻辑一致性 (consistency_score)**: 最终推荐的车型是否与对话过程中讨论的要点(如动力、安全、油耗等)和对比表格的结论保持一致?(1-10分)
      2.  **理由充分性 (reasoning_score)**: 推荐理由是否详细、有说服力,并且能有效引用前面讨论过的信息来支持其结论?(1-10分)
      3.  **评分理由 (justification)**: 详细阐述你的评分依据,指出逻辑链条的优点或缺陷。
      【输出格式】
      {"consistency_score": <int>,"reasoning_score": <int>,"justification": "<string>"
      }
      """
      
  • 任务 3.2:在 evaluator.py 中实现分步评测逻辑

    1. 创建一个主函数 run_evaluation(session_data),它接收阶段二保存的 session_data 字典作为输入。
    2. 评测环节一 (调用Prompt 1):
      • session_data 中提取 initial_user_promptfirst_assistant_response
      • 格式化 EVAL_PROMPT_1_INITIAL
      • 使用 JUDGE_MODEL 调用 llm_api_handler.query_llm()
      • 解析返回的JSON,将结果保存到 eval_results['initial_recommendation_eval']
    3. 评测环节二 (调用Prompt 2):
      • session_data 中提取 assistant_table_response
      • 格式化 EVAL_PROMPT_2_TABLE
      • 调用裁判LLM,解析JSON,将结果保存到 eval_results['table_quality_eval']
    4. 评测环节三 (调用Prompt 3):
      • session_data 中提取 full_conversation_history,并将其格式化为一个易读的字符串。
      • 格式化 EVAL_PROMPT_3_FINAL
      • 调用裁判LLM,解析JSON,将结果保存到 eval_results['final_recommendation_eval']
    5. 返回总结果: 函数最终返回一个包含所有评测结果的 eval_results 字典。
  • 任务 3.3:在 main.py 中集成评测流程

    • 修改 main.py 的主程序循环。
    • run_car_advisor_session 成功执行并保存了 session_data 后:
      1. 加载刚刚保存的 session_data
      2. 调用 evaluator.run_evaluation(session_data) 得到评测结果。
      3. 将返回的评测结果更新到 session_data['evaluation_results'] 中。
      4. 将更新后的 session_data 重新写回到原来的JSON文件中,使其包含完整的对话和评测数据。

阶段四:结果分析与展示 (预估时间: 2小时)

此阶段因评测数据的丰富而变得更有价值。

  • 任务 4.1:创建 report_generator.py 脚本
    • 此脚本的目标是读取 results/ 目录下的所有JSON文件。
  • 任务 4.2:解析并汇总数据
    • 遍历每个文件,使用 pandasjson_normalize 功能可以轻松地将嵌套的JSON评测分数展平。
    • 创建一个DataFrame,每行代表一个模型的测试会话,列包括:model_name, relevance_score, effectiveness_score, format_score, completeness_score, consistency_score, reasoning_score
  • 任务 4.3:生成对比报告
    • 计算每个模型各项得分的平均值。
    • 将最终的汇总DataFrame打印到控制台。
    • (可选)将DataFrame保存为CSV文件 (df.to_csv('evaluation_report.csv')),方便用Excel等工具进行可视化分析。

通过这次重构,整个系统的逻辑更加清晰,特别是评测环节被分解为独立的、可管理的单元,使得评测结果更具说服力和洞察力。

http://www.dtcms.com/a/528591.html

相关文章:

  • 现代软件工程课程 个人博客作业2-结对编程项目总结
  • Elasticsearch8.4.1升级Elasticsearch9.1.5
  • 中国中小企业网站大学生招聘就业网
  • 深度学习(3)神经网络
  • FastAPI之 SQLAIchemy
  • [人工智能-大模型-70]:模型层技术 - 从数据中自动学习一个有用的数学函数的全过程,AI函数计算三大件:神经网络、损失函数、优化器
  • 网站开发最适合的浏览器wordpress下载页插件下载
  • EN 300-2006 欧松板(OSB)检测
  • 智能优化神经网络预测
  • 【Docker】镜像仓库
  • 2.Linux指令(三)
  • 【C++】哈希表:除留余散法和哈希桶的实现
  • 沧州网站运营自己做网站需要什么材料
  • PostgreSQL查不动?分区表+覆盖索引+物化视图的优化魔法了解下?
  • 多相CFD中的模型转换:Ansys Fluent中的从DPM到VOF和欧拉壁膜
  • 关于学校的网站模板免费下载高端网站建设磐石网络好
  • 在半导体制造中如何选择最佳的刻蚀方法?
  • 构建Django的Web镜像
  • 历史数据分析——锦江酒店
  • 做网站站怎么赚钱吗企业网站推广的收获与启示
  • 大厂硬件岗位笔试题库-卷11
  • 【操作系统】408操作系统核心考点精讲:第二章——进程的概念、组成与特征​
  • 基于脉冲神经网络的语音识别系统实现:识别“将榴弹从位置幺搬到位置两“命令
  • 破茧成蝶:全方位解析Java学习难点与征服之路
  • 江门网页建站模板aws 搭建wordpress
  • C语言:使用顺序表实现通讯录
  • 手机网站与app免费的网站平台有哪些
  • SQL186 对试卷得分做min-max归一化
  • 哪家开发app好有南昌网站优化公司
  • vue3 npm run dev局域网可以访问,vue启动设置局域网访问,