deepseek harness实现AI问答助手智能体

因外包项目即将解散,准备面临找工作了,所以突然想到使用deepseek harness构建一个AI面试问答助手!
想法是打造一款专注于AI测试工程师面试备考的智能体产品。通过导入XLSX题库,实现“题目推送-回答评估-智能打分-记忆强化-错题追踪”的闭环学习路径,帮助用户在真实面试前最大化掌握核心知识点,增强面试通过率!
想到了就做!
第一次使用dsh研发智能体,遇到了很多困难,他不像dify和扣子空间那么简单,有一定的门槛,对于我来说有一定的难度;
首先从prd文档开始入手(AI生成)

1. 文档信息
属性     内容
文档名称	AI面试问答助手产品需求文档
版本号	V1.2
作者	AI产品经理
日期	2026-11-02
状态	待评审
2. 产品概述
2.1 产品背景
在AI测试工程师及中高级测试岗位的求职过程中,候选人面临知识点繁杂、面试场景模拟困难、缺乏即时反馈等痛点。传统的死记硬背效率低下,且难以应对面试官的追问。市场亟需一款能够基于自定义题库、提供沉浸式模拟面试体验并具备智能评分与记忆辅助功能的工具。
2.2 产品目标
打造一款专注于AI测试工程师面试备考的智能体产品。通过导入XLSX题库,实现“题目推送-回答评估-智能打分-记忆强化-错题追踪”的闭环学习路径,帮助用户在真实面试前最大化掌握核心知识点。
2.3 目标用户
•核心用户:准备跳槽或校招的AI测试工程师、软件测试中高级工程师。
•特征:有一定技术基础,需要针对性查漏补缺,渴望获得类似真实面试的压迫感与反馈。
2.4 产品价值
•对用户:提供个性化的模拟面试环境,通过科学的错题间隔重复算法(类似Anki)提升记忆留存率,增强面试信心。
•对平台:通过垂直领域的AI应用,积累测试领域的面试数据与交互模型,构建行业壁垒。
......

然后是构建AI智能体,配置知识库,开发定制插件(需要匹配题库格式),然后对接API,最后实现问答!

image

其中也是遇到了很多的问题,如:dsh默认知识库只能识别md格式的文档,无法解析xlsx格式的文档,版本冲突问题,配置问题......
整体弄下来,dsh方方面面都需要自己配置,可塑造性更强,但是门槛更高,难度更大!
项目文档(0到1)
image

以下是AI生成的总结文档:

AI 面试问答助手智能体 - 开发归档与架构文档

文档版本:V1.0
当前状态:MVP 基础链路已跑通(LLM + 知识库检索 + 自研工具调用 + API 扩展)
运行环境:DeepSeek Harness (DSH) v0.2.1-rc.2 / Windows / Node.js >= 24.9.0


一、 整体架构设计 (LLM + Plan + RAG + Tool)

本智能体基于 DeepSeek Harness 的“一切皆插件”理念构建,整体架构分为四层:

  1. LLM 层(大脑):使用 DeepSeek API 提供核心推理和语义理解能力。
  2. Plan 层(工作流调度):当前采用轻量级方案,通过系统提示词(System Prompt)+ Agent Loop 推进流程(导入 → 解析 → 抽题 → 回答 → 评分 → 结论)。未来若需严格门禁,可引入 DSH 的 dsh-orchestrator 调度插件。
  3. RAG 层(知识库):使用社区插件 @domitor-syh/dsh-knowbase。将 PRD 文档与结构化题库导入知识库,在 API 调用或 Web 会话中通过 /kb use <库名> 开启检索。
  4. Tool 层(核心业务插件):
    • 已实现:dsh-bank-parser(负责 XLSX 文件的纯 IO 解析)。
    • 待开发:mistake_manager(错题状态机控制)、score_answer(结构化评分工具)。
  5. API 层(外部集成):使用社区插件 dsh-api-expand,通过 HTTP 接口对外暴露智能体能力,供外部业务系统(如 Spring Boot)调用。

二、 当前项目目录与结构

1. 自研插件目录 (dsh-bank-parser)

dsh-bank-parser/
├── package.json          # 声明 xlsx 依赖,及 peerDependencies(锁定 dsh-tools 版本)
├── cordis.patch.yml      # 插件注册文件(--patch 模式下使用绝对路径)
├── tsconfig.json         # TypeScript 编译配置
└── src/
    └── index.ts          # parse_xlsx_bank 工具核心代码

2. 全局 Profile 配置

  • 位置:C:\Users\<用户名>\.dsh\profiles\web\
  • 核心文件:package.json(记录插件依赖及 bundle 清单)。

三、 开发排坑指南(血泪教训归档)

在 Windows 环境下开发 DSH 插件,我们遇到了以下关键阻碍,其解决思路对后续开发具有极高参考价值:

1. 依赖版本冲突引发 CallId 导出错误

  • 现象:插件启动报错 SyntaxError: The requested module '@deepseek-ai/dsh-llm' does not provide an export named 'CallId'。
  • 原因:DSH 核心包版本迭代极快(当前为 0.2.1-rc.2),旧版 dsh-tools 的内部实现与宿主环境不兼容。
  • 解决:严禁在插件的 dependencies 中安装 @deepseek-ai/* 核心包。应将其移入 peerDependencies 并锁定与宿主一致的精确版本:
    npm install --save-peer @deepseek-ai/dsh-tools@0.2.1-rc.2
    

2. 模块找不到 (ERR_MODULE_NOT_FOUND)

  • 现象:移除本地 node_modules 后,报错 Cannot find package '@deepseek-ai/dsh-tools'。
  • 原因:--patch 模式不会自动向插件注入宿主环境的模块解析上下文。
  • 解决:确保使用 npm 安装依赖(pnpm 易导致软链接路径混乱),且必须保留精确版本的 peerDependencies 和本地 devDependencies。

3. --patch 模式与 plugin add 模式混淆

  • 踩坑点:cordis.patch.yml 中的 name 字段路径要求不同。
  • 解决:
    • 使用 dsh plugin add 正式安装时:name: dsh-bank-parser(使用裸包名)。
    • 使用 dsh web --patch <path> 调试时:name: 'D:/绝对路径/src/index.ts'。

4. 端口占用导致启动失败 (EADDRINUSE)

  • 原因:之前运行的 DSH 进程未彻底退出,占用了 3080 端口。
  • 解决:执行 netstat -ano | findstr :3080 找到 PID,然后用 taskkill /PID <PID> /F 强制结束进程,或更换启动端口 dsh web --port 8080。

5. Excel 解析逻辑冲突

  • 现象:bank_parser 提取的题干变成了“题目类型”列。
  • 原因:直接使用 .includes() 进行模糊匹配,导致“题目”命中了“题目类型”的表头。
  • 解决:优化正则与匹配策略,优先精确匹配,其次进行包含匹配但排除含有“类型、分类、序号”的干扰表头。

四、 关键接口定义与现状

1. 题库解析工具 (parse_xlsx_bank)

  • 入参:file_path (String, 绝对路径)
  • 出参:{ questions: Array, total_parsed: Int, skipped: Int, headers: Array }
  • 状态:✅ 已跑通,并修复了列匹配逻辑。

2. 知识库 (dsh-knowbase)

  • 开启方式:API 调用时,在 prompt 中前置 /kb use 面试题库。
  • 状态:✅ 已配置并生效(已加载 2 份资料)。

3. API 访问 (dsh-api-expand)

  • 自检接口:GET /api-expand/inspect
  • 驱动接口:POST /api-expand/run
  • 鉴权:需携带 Authorization: Bearer <Token>。
  • 状态:✅ 可通过 curl 或外部代码驱动 Agent 对话。

五、 下一步迭代计划 (Action Items)

  1. 开发 mistake_manager 插件(纯状态逻辑,无模型调用):
    • 定义 record_answer 工具:接受题目 ID 与得分,更新 mistake.json 状态。
    • 定义 get_next_question 工具:实现错题 <8分 入池、>=8分 移出、以及“至少间隔 3 题”和“4:6 混合抽取”算法。
  2. 开发 score_answer 工具(涉及模型调用):
    • 对传入的 question、user_answer、standard_answer,严格对照 PRD 中的 0-10 分 SOP 进行语义评分。
    • 约束模型输出严格 JSON 格式(包含 score、passed、strengths、weaknesses、suggestions)。
  3. 引入 Skill 体系:
    • 将面试开场白、鼓励式话术、追问机制等“软规范”写成 SKILL.md 文件,替代冗长的系统提示词。
  4. 接入本地模型(可选测试):
    • 尝试接入 Ollama 运行 Qwen2.5-3B,仅用于处理轻量工具调用,评估成本节约与响应速度。

文档生成时间:2026-11-02

posted @ 2026-11-02 17:46  园中小蚊子  阅读(7)  评论(0)    收藏  举报