feat: 实现AI拒答机制和语言控制优化
- 添加 RunStatus.REFUSED 状态,AI可明确表达拒答意图 - 优化 System Prompt 使用视觉强调提高AI对拒答规则的遵守 - User Prompt 添加 SCOPE CHECK 和语言约束 - Worker Rules 添加多语言版本角色扮演规则 - Runner 传递 language 参数到 worker stage - json_finalize 添加语言约束参数 - 更新单元测试匹配新的 prompt 结构
This commit is contained in:
@@ -13,7 +13,10 @@ from agentscope.message import Msg
|
||||
from agentscope.tool import Toolkit
|
||||
from agentscope.model import OpenAIChatModel
|
||||
from core.agentscope.prompts.system_prompt import build_system_prompt
|
||||
from core.agentscope.prompts.user_prompt import build_divination_user_prompt
|
||||
from core.agentscope.prompts.user_prompt import (
|
||||
build_divination_user_prompt,
|
||||
build_follow_up_user_prompt,
|
||||
)
|
||||
from core.agentscope.schemas.agui_input import extract_latest_user_payload
|
||||
from core.divination import derive_divination
|
||||
from core.agentscope.runtime.json_react_agent import JsonReActAgent
|
||||
@@ -209,6 +212,12 @@ class AgentScopeRunner:
|
||||
worker_output_model = resolve_worker_output_model(
|
||||
runtime_mode=runtime_mode.value
|
||||
)
|
||||
language = "zh-CN"
|
||||
if user_context.settings is not None:
|
||||
prefs = getattr(user_context.settings, "preferences", None)
|
||||
if prefs is not None:
|
||||
language = getattr(prefs, "language", "zh-CN") or "zh-CN"
|
||||
|
||||
await self._emit_step_event(
|
||||
pipeline=pipeline,
|
||||
run_input=run_input,
|
||||
@@ -222,6 +231,7 @@ class AgentScopeRunner:
|
||||
context_messages=context_messages,
|
||||
run_input=run_input,
|
||||
derived_divination=derived_divination,
|
||||
language=language,
|
||||
),
|
||||
toolkit=toolkit,
|
||||
run_input=run_input,
|
||||
@@ -230,6 +240,7 @@ class AgentScopeRunner:
|
||||
pipeline=pipeline,
|
||||
runtime_mode=runtime_mode,
|
||||
derived_divination=derived_divination,
|
||||
language=language,
|
||||
)
|
||||
worker_output = worker_output_model.model_validate(worker_result.payload)
|
||||
await self._emit_step_event(
|
||||
@@ -253,6 +264,7 @@ class AgentScopeRunner:
|
||||
pipeline: PipelineLike,
|
||||
runtime_mode: RuntimeMode,
|
||||
derived_divination: DerivedDivinationData | None,
|
||||
language: str,
|
||||
) -> StageExecutionResult:
|
||||
tracking_model = self._build_model(stage_config=stage_config)
|
||||
formatter = OpenAIChatFormatter()
|
||||
@@ -265,11 +277,6 @@ class AgentScopeRunner:
|
||||
emit_text_events=True,
|
||||
emit_tool_events=False,
|
||||
)
|
||||
language = "zh-CN"
|
||||
if user_context.settings is not None:
|
||||
prefs = getattr(user_context.settings, "preferences", None)
|
||||
if prefs is not None:
|
||||
language = getattr(prefs, "language", "zh-CN") or "zh-CN"
|
||||
|
||||
system_prompt = build_system_prompt(
|
||||
agent_type=stage_config.agent_type,
|
||||
@@ -285,6 +292,7 @@ class AgentScopeRunner:
|
||||
base_messages=[Msg("system", system_prompt, "system"), *input_messages],
|
||||
output_model=worker_output_model,
|
||||
retries=2,
|
||||
language=language,
|
||||
)
|
||||
worker_payload = worker_output_model.model_validate(worker_payload_raw)
|
||||
response_metadata = self._llm_pricing_service.build_usage_metadata(
|
||||
@@ -316,11 +324,17 @@ class AgentScopeRunner:
|
||||
context_messages: list[Msg],
|
||||
run_input: RunAgentInput,
|
||||
derived_divination: DerivedDivinationData | None,
|
||||
language: str = "zh-CN",
|
||||
) -> list[Msg]:
|
||||
if derived_divination is not None:
|
||||
user_text = build_divination_user_prompt(derived=derived_divination)
|
||||
user_text = build_divination_user_prompt(
|
||||
derived=derived_divination, language=language
|
||||
)
|
||||
else:
|
||||
user_text, _ = extract_latest_user_payload(run_input)
|
||||
raw_user_text, _ = extract_latest_user_payload(run_input)
|
||||
user_text = build_follow_up_user_prompt(
|
||||
question=raw_user_text, language=language
|
||||
)
|
||||
|
||||
if derived_divination is not None and context_messages:
|
||||
last = context_messages[-1]
|
||||
|
||||
Reference in New Issue
Block a user