fix(agents): stop the debate managers forcing a direction under ambiguity

- the managers reserved Hold only for "genuinely balanced" evidence and were
  told to "be decisive", pressuring a directional call on ambiguous, conflicting,
  or insufficient inputs; which side it landed on was model-prior-dependent
- allow Hold for balanced, conflicting, ambiguous, or insufficient evidence in
  both manager prompts and both structured rating fields, and weigh cases
  independent of speaking order; rating definitions and debate ordering unchanged #1196
This commit is contained in:
Yijia-Xiao
2026-09-01 05:08:49 +00:00
parent 2322dd9baa
commit a4acd8a174
3 changed files with 11 additions and 6 deletions

View File

@@ -62,7 +62,7 @@ def create_portfolio_manager(llm):
--- ---
Be decisive and ground every conclusion in specific evidence from the analysts. Ground every conclusion in specific evidence from the analysts. Commit to a directional call only when the evidence clearly supports one; choose Hold when the case is balanced, materially conflicting, ambiguous, or insufficient to justify changing exposure, rather than forcing a direction to appear decisive. Weigh the analysts on their merits, independent of speaking order.
{NO_EXTERNAL_TOOLS}{get_language_instruction()}""" {NO_EXTERNAL_TOOLS}{get_language_instruction()}"""

View File

@@ -36,7 +36,7 @@ def create_research_manager(llm):
- **Underweight**: Cautious view; recommend trimming exposure - **Underweight**: Cautious view; recommend trimming exposure
- **Sell**: Strong conviction in the bear thesis; recommend exiting or avoiding the position - **Sell**: Strong conviction in the bear thesis; recommend exiting or avoiding the position
Commit to a clear stance whenever the debate's strongest arguments warrant one; reserve Hold for situations where the evidence on both sides is genuinely balanced. Commit to a directional stance only when the debate's strongest arguments clearly warrant one. Choose Hold when the evidence is balanced, materially conflicting, ambiguous, or insufficient to justify changing exposure; do not manufacture a direction merely to appear decisive. Weigh the bull and bear cases on their merits, independent of which side spoke first or last.
--- ---

View File

@@ -82,9 +82,11 @@ class ResearchPlan(BaseModel):
recommendation: PortfolioRating = Field( recommendation: PortfolioRating = Field(
description=( description=(
"The investment recommendation. Exactly one of Buy / Overweight / " "The investment recommendation. Exactly one of Buy / Overweight / "
"Hold / Underweight / Sell. Reserve Hold for situations where the " "Hold / Underweight / Sell. Choose Hold when the evidence is "
"evidence on both sides is genuinely balanced; otherwise commit to " "balanced, materially conflicting, ambiguous, or insufficient to "
"the side with the stronger arguments." "justify changing exposure; otherwise commit to the side with the "
"clearly stronger arguments. Do not pick a direction merely to be "
"decisive."
), ),
) )
rationale: str = Field( rationale: str = Field(
@@ -197,7 +199,10 @@ class PortfolioDecision(BaseModel):
rating: PortfolioRating = Field( rating: PortfolioRating = Field(
description=( description=(
"The final position rating. Exactly one of Buy / Overweight / Hold / " "The final position rating. Exactly one of Buy / Overweight / Hold / "
"Underweight / Sell, picked based on the analysts' debate." "Underweight / Sell, picked based on the analysts' debate. Choose "
"Hold when the case is balanced, materially conflicting, ambiguous, "
"or insufficient to justify changing exposure, rather than forcing a "
"direction to appear decisive."
), ),
) )
executive_summary: str = Field( executive_summary: str = Field(