tune: enforce shorter and more colloquial outbound replies
Some checks failed
Pre-commit / run (ubuntu-latest) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_en (ubuntu-latest, 3.10) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_zh (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.12) (push) Has been cancelled
Some checks failed
Pre-commit / run (ubuntu-latest) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_en (ubuntu-latest, 3.10) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_zh (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.12) (push) Has been cancelled
This commit is contained in:
@@ -91,6 +91,7 @@ class QingjianClient:
|
|||||||
def _shorten_reply(self, text: str) -> str:
|
def _shorten_reply(self, text: str) -> str:
|
||||||
max_len = max(8, int(SHORT_REPLY_MAX_CHARS))
|
max_len = max(8, int(SHORT_REPLY_MAX_CHARS))
|
||||||
t = str(text or "").strip()
|
t = str(text or "").strip()
|
||||||
|
t = self._humanize_reply(t)
|
||||||
if len(t) <= max_len:
|
if len(t) <= max_len:
|
||||||
return t
|
return t
|
||||||
parts = re.split(r"[。!?!?]", t)
|
parts = re.split(r"[。!?!?]", t)
|
||||||
@@ -99,6 +100,27 @@ class QingjianClient:
|
|||||||
head = head[:max_len].rstrip(",,;;:: ")
|
head = head[:max_len].rstrip(",,;;:: ")
|
||||||
return head or t[:max_len]
|
return head or t[:max_len]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _humanize_reply(text: str) -> str:
|
||||||
|
t = str(text or "").strip()
|
||||||
|
replacements = {
|
||||||
|
"您好呀": "在的",
|
||||||
|
"您好,": "在的,",
|
||||||
|
"您好": "在的",
|
||||||
|
"很高兴为您服务": "我在呢",
|
||||||
|
"请问您有什么需求": "你要做啥图",
|
||||||
|
"请问有什么可以帮您": "你要做啥",
|
||||||
|
"可以把要做的图发我": "图发我就行",
|
||||||
|
"请您先完成订单付款": "先拍下付款哈",
|
||||||
|
"麻烦您先完成付款": "先拍下付款哈",
|
||||||
|
"我们马上为您处理": "我马上处理",
|
||||||
|
"我这边": "我这",
|
||||||
|
}
|
||||||
|
for k, v in replacements.items():
|
||||||
|
t = t.replace(k, v)
|
||||||
|
t = t.replace("~~", "~")
|
||||||
|
return t
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _is_invalid_ai_reply(text: str) -> bool:
|
def _is_invalid_ai_reply(text: str) -> bool:
|
||||||
t = str(text or "").strip().lower()
|
t = str(text or "").strip().lower()
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ MESSAGE_DEBOUNCE_SECONDS = int(os.getenv("MESSAGE_DEBOUNCE_SECONDS", "6"))
|
|||||||
AUTO_QUOTE_WAIT_SECONDS = int(os.getenv("AUTO_QUOTE_WAIT_SECONDS", "18"))
|
AUTO_QUOTE_WAIT_SECONDS = int(os.getenv("AUTO_QUOTE_WAIT_SECONDS", "18"))
|
||||||
AGENT_MAX_ITERS = int(os.getenv("AGENT_MAX_ITERS", "3"))
|
AGENT_MAX_ITERS = int(os.getenv("AGENT_MAX_ITERS", "3"))
|
||||||
FAST_ROUTE_ENABLED = os.getenv("FAST_ROUTE_ENABLED", "1").strip() in {"1", "true", "True", "yes", "on"}
|
FAST_ROUTE_ENABLED = os.getenv("FAST_ROUTE_ENABLED", "1").strip() in {"1", "true", "True", "yes", "on"}
|
||||||
SHORT_REPLY_MAX_CHARS = int(os.getenv("SHORT_REPLY_MAX_CHARS", "28"))
|
SHORT_REPLY_MAX_CHARS = int(os.getenv("SHORT_REPLY_MAX_CHARS", "20"))
|
||||||
|
|
||||||
STORE_BACKEND = os.getenv("STORE_BACKEND", "sqlite").strip().lower()
|
STORE_BACKEND = os.getenv("STORE_BACKEND", "sqlite").strip().lower()
|
||||||
STORE_SQLITE_PATH = os.getenv("STORE_SQLITE_PATH", "").strip()
|
STORE_SQLITE_PATH = os.getenv("STORE_SQLITE_PATH", "").strip()
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ def rules_prompt() -> str:
|
|||||||
"10) 尺寸明显超大(如>=2m*2m): 提示需补图/重做边缘, 不要直接承诺一模一样。\n"
|
"10) 尺寸明显超大(如>=2m*2m): 提示需补图/重做边缘, 不要直接承诺一模一样。\n"
|
||||||
"11) 店铺差异化: 按 acc_id/persona 口吻回复, 保持真人聊天。\n"
|
"11) 店铺差异化: 按 acc_id/persona 口吻回复, 保持真人聊天。\n"
|
||||||
"12) 最终输出只允许一个动作, 不能混合。\n"
|
"12) 最终输出只允许一个动作, 不能混合。\n"
|
||||||
"13) reply 必须简短: 优先 1 句, 一般不超过 28 个汉字, 禁止长段解释。\n"
|
"13) reply 必须很短: 1句为主, 不超过20字, 口语化, 不要客服官话和AI腔。\n"
|
||||||
"输出格式:\n"
|
"输出格式:\n"
|
||||||
'{"action":"reply|quote|transfer|noop","reply":"","transfer_msg":"","quote_mode":"flush_pending|analyze_current_or_recent|collect_only","reason":""}'
|
'{"action":"reply|quote|transfer|noop","reply":"","transfer_msg":"","quote_mode":"flush_pending|analyze_current_or_recent|collect_only","reason":""}'
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user