intent.go 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package compapi
  2. import (
  3. "wechat-api/internal/types"
  4. )
  5. type IntentClient struct {
  6. MismatchClient
  7. }
  8. func (me *IntentClient) ResponseFormatSetting(req *types.CompApiReq) ResponseFormatConfig {
  9. //Message重构的配置
  10. me.ResformatConfig.SysmesArgs = []any{}
  11. me.ResformatConfig.SysmesTmpl = `# 任务
  12. 1. 首先,判断用户的第一句话是否说了:“你好,(任意内容)通话”,如果说了,则不用理会评级规则,直接强制分配为"语音助手"
  13. 2. 如果不属于“语音助手”,请根据评级规则,对聊天记录给出评级、置信度、评分依据(逐项分析不要遗漏)
  14. # 细节说明
  15. 置信度从0到1,0为置信度最低,1为置信度最高。`
  16. me.ResformatConfig.UsermesArgs = []any{req.Variables["chat_history"]}
  17. me.ResformatConfig.UsermesTmpl = `# 评级规则:
  18. [
  19. {
  20. 'rule': "用户表现出对产品有积极回应,询问有关产品的问题,或愿意进行后续操作,如确认微信号、询问发货地址或表达接受产品(例:'行'、'好'、'可以'、'是的')。",
  21. 'score': '有意向'},
  22. {
  23. 'rule': "用户虽然未积极回应或表示不需要,但却有相关需求、或着符合某项购买条件、又或着询问了机器人问题,即便后期疲软或持否定态度,可移交销售顾问进行进一步的需求分析,以便改善产品或定制符合客户要求的产品",
  24. 'score': '待进一步分析'},
  25. {
  26. 'rule': "用户表示自己在忙、在开会等,现在不太方便沟通。又或者对电话的真实性存疑,怀疑是诈骗电话,可后续让专业客服继续跟进",
  27. 'score': '暂时无法沟通'},
  28. {
  29. 'rule': "除上述规则外的其他用户,包括:用户未回复直接挂机、用户拒绝后直接挂机的情况。请注意客户资源珍贵,请尽量归类为'有意向'或'待进一步分析',后续再由销售专家定性。",
  30. 'score': '其他'}
  31. ]
  32. # 聊天记录
  33. %s
  34. `
  35. //ResponseFormat设置的配置
  36. me.ResformatConfig.ResformatDesc = "为通话记录进行评级"
  37. me.ResformatConfig.ResformatTxt = `{
  38. "score": str, #评分结果:有意向、待进一步分析、暂时无法沟通、其他
  39. "confidence_score": int, #置信度分数,范围从0.0到1.0
  40. "scoring_criteria": str, #请逐步介绍为何评为这个结果
  41. }`
  42. me.ResformatConfig.ResformatStruct = struct {
  43. Score string `json:"score" jsonschema_description:"评分结果:有意向、待进一步分析、暂时无法沟通、其他"`
  44. ConfidenceScore float32 `json:"confidence_score" jsonschema_description:"置信度分数,范围从0.0到1.0"`
  45. ScoringCriteria string `json:"scoring_criteria" jsonschema_description:"请逐步介绍为何评为这个结果"`
  46. }{}
  47. me.ResformatConfig.HaveSet = true
  48. return me.ResformatConfig
  49. }
  50. func (me *IntentClient) BuildRequest(req *types.CompApiReq) error {
  51. //设置相关个性化ResponseFormat配置信息
  52. if !me.ResformatConfig.HaveSet {
  53. me.ResponseFormatSetting(req)
  54. }
  55. return me.MismatchClient.BuildRequest(req)
  56. }
  57. // 向Client.getClientActFace工厂方法注册
  58. func init() {
  59. builder := func(c *Client) (clientActionFace, error) {
  60. return &IntentClient{MismatchClient{StdClient: StdClient{Client: c}}}, nil
  61. }
  62. err := RegisterClient("intent", builder)
  63. if err != nil {
  64. //panic(fmt.Sprintf("Failed to register client type 'mismatch': %v", err))
  65. }
  66. }