上两篇把 Harness 的"成本"和"优化"讲透了;本文落到最后一个关键问题——怎么把它变成全员可用的 AI 助手。答案:把 Harness 暴露成 HTTP 服务,再用企业微信"自建应用"包一层。
数据口径:DeepSeek Harness 官方文档(deepseek-harness.github.io,2026-08 版本);企业微信自建应用接入规范(developer.work.weixin.qq.com,2026-08 修订版)。
一、为什么要把 Harness 接到企微
本机跑 dsh web 只能你自己用,研发同事想用,得逐个开端口、装客户端。把 Harness 接到企微有三个直接收益:
| 收益 | 含义 |
|---|---|
| 入口统一 | 员工在企微客户端里 @机器人 即可提问,不必装新软件、不必记端口 |
| 权限可控 | 复用企微通讯录与组织架构,AI 调用范围与可见范围按部门/角色控制 |
| 可审计 | 所有问答经企微后台留痕,合规与排障都有据可查 |
但要把 Harness "搬进"企微,链路并不直连——Harness 默认只听 127.0.0.1:3080,而企微回调需要公网 HTTPS。所以需要一层桥:一个轻量回调服务,同时连企微和 Harness。

二、整体架构:一层桥接,三段链路
[员工手机 / 企微]
│ ① 提问(加密 XML)
▼
[企业微信服务器] ──HTTPS──▶ [Bridge 回调服务]
│ ② 鉴权后调 Harness
▼
[DeepSeek Harness]
(dsh web / OpenAI 兼容端点)
│ ③ 返回回答
▼
[企业微信服务器] ──加密回包──▶ [员工手机 / 企微]
三段链路的关键点:
- ①回调可达:Bridge 必须暴露在公网 HTTPS(企微强制),且 URL 已在自建应用后台登记。
- ②鉴权 + 协议:Bridge 用企微签名校验验真身份,再把"用户原文"塞给 Harness。
- ③时延与 5 秒红线:企微5 秒内必须收到响应,否则重试最多 3 次——长任务必须异步化(见第五节)。
三、第一步:建一个企微"自建应用"
去 work.weixin.qq.com/wework_admin/ → "应用管理" → "自建" → 创建一个应用,记下三个值:
| 字段 | 在哪里 | 用途 |
|---|---|---|
| CorpID | 我的企业 → 企业信息 | 标识企业,全局唯一 |
| CorpSecret | 自建应用详情页 | 换 access_token,保密 |
| AgentID | 自建应用详情页 | 标识"哪一个机器人" |
再用这三个值换 token(7200 秒有效,必须缓存,不要每次重取):
curl -s "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=YOUR_CORP_ID&corpsecret=YOUR_CORP_SECRET"
# 返回 {"errcode":0,"access_token":"...","expires_in":7200}
接着配"接收消息"回调:
| 项 | 要求 |
|---|---|
| URL | HTTPS,公网可访问,GET 验签通过 + POST 收消息 |
| Token | 自定义字符串,Bridge 侧需一致 |
| EncodingAESKey | 43 位,企微用其派生 AES-256-CBC 密钥 |
四、第二步:把 Harness 暴露成可调用服务
Harness 默认只听 127.0.0.1:3080,对外有三种"调用姿势":
4.1 直接用 Web UI(自用 / 调试)
npx @deepseek-ai/dsh web # 默认 http://127.0.0.1:3080
npx @deepseek-ai/dsh web --port 8080
只适合本人调试;Bridge 需要 API 接口,不推荐这种姿势。
4.2 走 OpenAI 兼容端点(推荐)
Harness 内置 OpenAI 兼容服务,配置在 $DSH_HOME/settings.yaml(Windows:%USERPROFILE%\.dsh\settings.yaml):
# ~/.dsh/settings.yaml —— 启用 OpenAI 兼容端点(字段名以你本机版本文档为准)
server:
host: 127.0.0.1
port: 3080
openaiCompat:
enabled: true # 启用 OpenAI 兼容端点
basePath: /v1 # POST {basePath}/chat/completions
字段名以官方文档为准:
dsh --help或deepseek-harness.github.io的 server 章节会列出你版本的实际键名。配置后重启dsh web(Ctrl+C 后重跑)才生效。
启用后用标准 OpenAI 协议调:
curl -s http://127.0.0.1:3080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"你好"}]}'
Bridge 用这种方式最干净——鉴权、消息格式、超时都能复用 OpenAI 生态的成熟库。
4.3 headless 模式(一次性任务)
npx @deepseek-ai/dsh --profile headless "总结当前目录的代码"
适合 CI / 定时任务;不适合交互式问答。

五、第三步:写一个"会说话"的回调 Bridge
Bridge 干三件事:验签 → 调 Harness → 回消息。下面是一个最简 Python 实现(仅示意,生产请加重试 / 幂等 / 日志脱敏):
# bridge.py —— 企业微信 ↔ DeepSeek Harness 最小桥接
import hashlib, time, xmltodict, requests
from flask import Flask, request
CORP_ID = "wx..." # CorpID
AGENT_ID = "1000002" # AgentID
TOKEN = "yourToken" # 自定义 Token(与企微后台一致)
AES_KEY = "43-chars..." # EncodingAESKey(43 位)
HARNESS_URL = "http://127.0.0.1:3080/v1/chat/completions"
HARNESS_MODEL = "deepseek-v4-flash"
app = Flask(__name__)
def verify_url() -> bool:
"""GET 验签:企微用 SHA1(token, timestamp, nonce, echostr) 校验"""
params = request.args
sig = sorted([TOKEN, params["timestamp"], params["nonce"], params["echostr"]])
return hashlib.sha1("".join(sig).encode()).hexdigest() == params["msg_signature"]
@app.route("/wecom", methods=["GET", "POST"])
def wecom():
if request.method == "GET":
# 企微首次配置回调时验证 URL
return request.args["echostr"] if verify_url() else "fail"
# POST:解密 XML → 调 Harness → 被动回复(5 秒内!)
data = xmltodict.parse(request.data)["xml"]
user_msg = data["Content"]
# 真实环境需用 AES-256-CBC 解密;这里跳过明文示例
r = requests.post(HARNESS_URL, json={
"model": HARNESS_MODEL,
"messages": [{"role": "user", "content": user_msg}],
}, timeout=4).json() # ← 留 1 秒给企微回包
reply = r["choices"][0]["message"]["content"]
return f"""<xml>
<ToUserName>{data['FromUserName']}</ToUserName>
<FromUserName>{CORP_ID}</FromUserName>
<CreateTime>{int(time.time())}</CreateTime>
<MsgType>text</MsgType>
<Content>{reply}</Content>
</xml>"""
if __name__ == "__main__":
# 公网 HTTPS:生产用 Nginx + 正式证书;adhoc 仅用于本机自测
app.run(host="0.0.0.0", port=8443, ssl_context="adhoc")
5 秒红线:上面
timeout=4是关键——Harness 思考 / 检索可能 10 秒+,超时就让企微重试,结果可能错位。生产做法:先 ACK 一句"正在处理…",把任务丢进队列,5 秒内回包"";任务跑完用POST /cgi-bin/message/send主动推送(异步模板消息 / 文本卡片)。异步化的取舍:简单问答走同步(5 秒内回完);长任务(写报告、查代码)走异步(先回"处理中" + 任务 ID,跑完推送卡片消息)。两种都保留,体验最好。
六、第四步:部署拓扑怎么选
| 部署方式 | 优点 | 缺点 | 适用 |
|---|---|---|---|
| Harness + Bridge 同机内网 | 简单、低延迟、零暴露 | Bridge 需反向代理到公网 | 中小团队首选 |
| Harness 内网 + Bridge 公网 | 隔离更好 | Bridge 调 Harness 要走内网穿透或专线 | 合规要求高 |
| Harness + Bridge 都上云 | 易扩缩容 | 模型费用 + 云费用双计 | 大规模 / 多分支 |
选哪种,关键看安全要求与费用敏感度。弱电类项目通常数据敏感,Harness 一定留内网,只把 Bridge 暴露到公网。
七、两个安全红线

- Harness 不直连公网:只让 Bridge 在内网调它;
dsh web监听127.0.0.1(默认就是)。baseURL与apiKey走环境变量,绝不写进代码或 Git。 - Bridge 校验每条入站:企微签名 + AES-256-CBC 解密 + 白名单 CorpID / AgentID 缺一不可。别图省事关掉验签——那是唯一的信任锚点。
八、落地检查清单
- [ ] 企微后台建好自建应用,记下 CorpID / CorpSecret / AgentID
- [ ]
gettoken已实现并缓存(7200s),不要每次重取 - [ ] Harness 启用 OpenAI 兼容端点(
openaiCompat.enabled: true字段名以官方文档为准) - [ ] Bridge 公网 HTTPS + 域名证书 + GET 验签通过
- [ ] AES-256-CBC 解密逻辑 + 被动回复加密回包
- [ ] 同步路径
timeout ≤ 4s;长任务改异步 +message/send主动推送 - [ ] 全部密钥走环境变量 / 密钥管理服务,不进代码与 Git
- [ ] 日志脱敏(不打印用户原文、token、corpid)
九、下一步:从"能聊天"到"能办事"
能把 Harness 接到企微,只是"全员能用 AI 助手"的起点。下一步是让它能办事:接企业内部知识库(让答案带出处)、接工单系统(让 AI 自动开单)、接审批(让 AI 拟稿、人审)。这些我们后面一篇一篇拆。
莱驰云AI实战课堂。让 AI 从"开发者玩具"变成"全员工具",第一步是把入口放到每个人都已经打开的 App 里。数据以 DeepSeek Harness 与企业微信官方文档与你本人控制台为准。





