【AI实战篇-01】利用Deepseek Api方案实现企业微信客户服务合规监控系统案例

写在前面

相信Ai大模型进步,每个程序员都有目共睹。本人也是通过Ai实现全栈开发,目前一直也在专注于探索Ai的应用场景落地。目标100个应用小场景(哈哈哈,有点吹牛啦),希望有志同道合之人一起探索进步吧!
接下来分享的是【AI实战篇-01】利用Deepseek Api方案实现企业微信客户服务合规监控系统案例,后续也会持续输出AI实战开发案例,希望对大家有启发。废话不多说,直接开干。

准备条件

  • Deepseek 的api key
  • 企业微信开启会话存档(还需要同步存档数据自己数据库中,后续提供输出Api接口)
  • Ai提示词(合规监控提示词)

调用流程

第一步:申请Api密钥

image.png

首次创建,保存好创建的key,因为不支持修改。

第二步:根据您的应用场景准备好你的提示词

以我的应用场景:话术合规监测

提示词如下:

你是一名资深的证劵从业合规审核专家,专门负责检查金融对话内容是否涉及违规承诺或误导性信息。你的职责是严格按照以下审核规则,对给定的对话内容进行审核,并仅关注这些范围,忽略其他内容。  
  
## **审核规则**  
- **违规承诺**:查找是否包含类似“保证收益”“稳赚不赔”“绝对不会亏”“市场下跌仍能盈利”等表述。这些表述可能构成非法承诺收益或变相承诺收益。  
- **误导性信息**:甄别是否存在夸大收益或错误描述市场风险的内容,例如“无视市场波动”“个股不受行情影响”“持续暴涨”等。  
  
- ## **输出要求**  
- 你需要逐条检查 JSON 数据中的 `content`,如果发现符合上述违规规则的内容,则返回该条消息的以下字段:  
- `msgid`  
- 新增字段审核反馈字段`violation_points`,记录违规的关键词触发点  
- 新增字段审核反馈字段`violation_rules`,记录违反的具体相关法规  
- 新增整改建议字段`correction_suggestions`,记录整改的建议  
- 新增风险级别字段`level`,1代表低风险,2代表中风险, 3代表高风险  
- 新增风险等级说明字段`level_mark`(即使说明level含义)  
- 新增违规类别字段`category_desc`,简要的总结描述违规的类别(如:内幕交易、市场操纵、保证承诺收益、夸大收益、隐瞒风险)  
- 返回结果必须是 JSON 数组格式,  

例如: 
[ {"msgid":xxxxxxxxx,  
"violation_points":xxxxxx,  
"violation_rules":xxxxxx,  
"correction_suggestions":xxxxxx,  
"level":1,  
"level_mark":"低风险",  
"category_desc":xxxxx,  
} ]  

- 如果没有发现违规内容,则返回空的 JSON 数组 []

第三步:开始封装请求(PHP示例代码)

$url = 'https://api.deepseek.com/chat/completions';  
$api_key = "你创建的key";  
$user_prompt = json_encode($simpleMessageArr, JSON_UNESCAPED_UNICODE);;  
$system_prompt = <<<TEXT  
你是一名资深的证劵从业合规审核专家,专门负责检查金融对话内容是否涉及违规承诺或误导性信息。你的职责是严格按照以下审核规则,对给定的对话内容进行审核,并仅关注这些范围,忽略其他内容。  
  
## **审核规则**  
- **违规承诺**:查找是否包含类似“保证收益”“稳赚不赔”“绝对不会亏”“市场下跌仍能盈利”等表述。这些表述可能构成非法承诺收益或变相承诺收益。  
- **误导性信息**:甄别是否存在夸大收益或错误描述市场风险的内容,例如“无视市场波动”“个股不受行情影响”“持续暴涨”等。  
  
- ## **输出要求**  
- 你需要逐条检查 JSON 数据中的 `content`,如果发现符合上述违规规则的内容,则返回该条消息的以下字段:  
- `msgid`  
- 新增字段审核反馈字段`violation_points`,记录违规的关键词触发点  
- 新增字段审核反馈字段`violation_rules`,记录违反的具体相关法规  
- 新增整改建议字段`correction_suggestions`,记录整改的建议  
- 新增风险级别字段`level`,1代表低风险,2代表中风险, 3代表高风险  
- 新增风险等级说明字段`level_mark`(即使说明level含义)  
- 新增违规类别字段`category_desc`,简要的总结描述违规的类别(如:内幕交易、市场操纵、保证承诺收益、夸大收益、隐瞒风险)  
- 返回结果必须是 JSON 数组格式,  
例如: [ {"msgid":xxxxxxxxx,  
"violation_points":xxxxxx,  
"violation_rules":xxxxxx,  
"correction_suggestions":xxxxxx,  
"level":1,  
"level_mark":"低风险",  
"category_desc":xxxxx,  
} ]  
- 如果没有发现违规内容,则返回空的 JSON 数组 []  
TEXT;  
  
// 请求数据  
$payload = [  
    'model' => 'deepseek-chat',  
    'messages' => [  
    ['role' => 'system',  
    'content' => $system_prompt],  
    ['role' => 'user', 'content' => $user_prompt]  
    ]  
];  
// 调用 curl_post 方法  
$response = $this->curl_post($url,$api_key,$payload);   
// 检查响应并处理错误  
if (!empty($response)) {  
    if (isset($response['choices'][0]['message']['content'])) {  
        //取值deepseek的回复答案
        $parseContent = $response['choices'][0]['message']['content'];  
        try {
            //解析deepseek的回复答案(根据你自己的业务逻辑处理)  
            $msgIds = self::extractMsgIds($parseContent);  
            Log::debug('获取到的msgIds的内容',$msgIds);  
            
        }catch (\RuntimeException $e) {  
        // 处理异常  
            return '解析出错: ' . $e->getMessage();  
        }  
      
    } else {  
        // 如果响应格式错误,返回详细错误信息  
        return 'API 响应格式错误: ' . json_encode($response);  
    }  
}  else {  
    // 如果没有返回响应,返回 cURL 错误信息  
    return 'API 调用失败,cURL 错误: ' . $response['error'];  
}

基本上就上面几步搞定。

说明:为了减少token消耗和数据安全,你需要对你的数据进行过滤清洗和脱敏处理,这个就需要你自己根据自己的需求调整啦,大体流程上就是这三步可以搞定啦。


DeepSeek 接口响应字段说明(顶层结构)

{
  "id": "a9c6dd94-cddf-4227-xxxxxxxxx7",
  "object": "chat.completion",
  "created": 1745909869,
  "model": "deepseek-chat",
  "choices": [...],
  "usage": {...},
  "system_fingerprint": "fp_88xxxx9eaa_pxxxxx42xxp8"
}
字段名 类型 含义
id string 唯一请求 ID,方便追踪或调试
object string 返回对象类型,这里是 "chat.completion",表示是聊天补全结果
created int 时间戳(Unix 时间,单位秒),表示生成响应的时间
model string 使用的模型名称,例如 deepseek-chat
choices array 模型生成的答案列表(通常只有一条)
usage object 当前调用所消耗的 token 数量等统计信息
system_fingerprint string 系统级模型版本指纹,用于追踪生成环境(如模型版本、服务版本等)

choices 字段结构说明

"choices": [
  {
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "```json ... ```"
    },
    "logprobs": null,
    "finish_reason": "stop"
  }
]
字段名 类型 含义
index int 多轮回答中的第几条(一般只有 0)
message.role string 响应角色,通常是 "assistant"
message.content string 模型生成的主要内容(一般是 Markdown 格式包裹的文本或 JSON)
logprobs null / object 生成时的词概率(如未开启调试一般为 null)
finish_reason string 生成终止原因,如 "stop" 表示自然结束,其他还有 "length"(达到最大 token 数)等

usage 字段说明

"usage": {
  "prompt_tokens": 1998,
  "completion_tokens": 755,
  "total_tokens": 2753,
  "prompt_tokens_details": {
    "cached_tokens": 1984
  },
  "prompt_cache_hit_tokens": 1984,
  "prompt_cache_miss_tokens": 14
}
字段名 含义
prompt_tokens 提示词部分使用的 token 数(即你发给模型的内容)
completion_tokens 模型生成的回复所用的 token 数
total_tokens 本次请求总共消耗的 token
prompt_tokens_details.cached_tokens 来自缓存的 token 数,表示是历史缓存的提示
prompt_cache_hit_tokens 命中缓存的 token 数
prompt_cache_miss_tokens 未命中缓存的新 token 数(有效的费用计算依据)

小贴士:

  • token 是模型计费和限制单位,约为 1 个英文单词或 1.3~1.5 个汉字;
  • prompt_cache_hit_tokens 代表已缓存的部分,通常不收费或低费用;
  • system_fingerprint 可用于确认后台模型版本是否发生变化。

🙌 感谢你耐心看到这儿~ ,动动你发财的小手点个赞吧! 你的一赞,是我持续输出干货的最大动力!后续会持续分享Ai编程干货知识

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容