写在前面
相信Ai大模型进步,每个程序员都有目共睹。本人也是通过Ai实现全栈开发,目前一直也在专注于探索Ai的应用场景落地。目标100个应用小场景(哈哈哈,有点吹牛啦),希望有志同道合之人一起探索进步吧!
接下来分享的是【AI实战篇-01】利用Deepseek Api方案实现企业微信客户服务合规监控系统案例,后续也会持续输出AI实战开发案例,希望对大家有启发。废话不多说,直接开干。
准备条件
- Deepseek 的api key
- 企业微信开启会话存档(还需要同步存档数据自己数据库中,后续提供输出Api接口)
- Ai提示词(合规监控提示词)
调用流程
第一步:申请Api密钥
首次创建,保存好创建的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编程干货知识