mirror of
https://git.mirrors.martin98.com/https://github.com/bytedance/deer-flow
synced 2025-08-18 04:25:59 +08:00
feat: support multi-language
This commit is contained in:
parent
0d2f93c773
commit
b67b04ff5d
@ -1,22 +1,23 @@
|
|||||||
# Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
# Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
import logging
|
|
||||||
import json
|
import json
|
||||||
from typing import Literal, Annotated
|
import logging
|
||||||
|
from typing import Annotated, Literal
|
||||||
|
|
||||||
from langchain_core.messages import HumanMessage, AIMessage
|
from langchain_core.messages import AIMessage, HumanMessage
|
||||||
from langchain_core.tools import tool
|
|
||||||
from langchain_core.runnables import RunnableConfig
|
from langchain_core.runnables import RunnableConfig
|
||||||
|
from langchain_core.tools import tool
|
||||||
from langgraph.types import Command, interrupt
|
from langgraph.types import Command, interrupt
|
||||||
|
|
||||||
from src.llms.llm import get_llm_by_type
|
from src.agents.agents import coder_agent, research_agent
|
||||||
from src.config.agents import AGENT_LLM_MAP
|
from src.config.agents import AGENT_LLM_MAP
|
||||||
from src.config.configuration import Configuration
|
from src.config.configuration import Configuration
|
||||||
from src.prompts.template import apply_prompt_template
|
from src.llms.llm import get_llm_by_type
|
||||||
from src.prompts.planner_model import Plan, StepType
|
from src.prompts.planner_model import Plan, StepType
|
||||||
|
from src.prompts.template import apply_prompt_template
|
||||||
from src.utils.json_utils import repair_json_output
|
from src.utils.json_utils import repair_json_output
|
||||||
from src.agents.agents import research_agent, coder_agent
|
|
||||||
from .types import State
|
from .types import State
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@ -117,6 +118,7 @@ def human_feedback_node(
|
|||||||
update={
|
update={
|
||||||
"current_plan": Plan.model_validate(new_plan),
|
"current_plan": Plan.model_validate(new_plan),
|
||||||
"plan_iterations": plan_iterations,
|
"plan_iterations": plan_iterations,
|
||||||
|
"locale": new_plan["locale"],
|
||||||
},
|
},
|
||||||
goto=goto,
|
goto=goto,
|
||||||
)
|
)
|
||||||
@ -209,7 +211,7 @@ def _execute_agent_step(
|
|||||||
agent_input = {
|
agent_input = {
|
||||||
"messages": [
|
"messages": [
|
||||||
HumanMessage(
|
HumanMessage(
|
||||||
content=f"#Task\n\n##title\n\n{step.title}\n\n##description\n\n{step.description}"
|
content=f"#Task\n\n##title\n\n{step.title}\n\n##description\n\n{step.description}\n\n##locale\n\n{state.get('locale', 'en-US')}"
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,10 @@
|
|||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
import operator
|
import operator
|
||||||
|
from typing import Annotated
|
||||||
|
|
||||||
from langgraph.graph import MessagesState
|
from langgraph.graph import MessagesState
|
||||||
from typing import Annotated
|
|
||||||
from src.prompts.planner_model import Plan
|
from src.prompts.planner_model import Plan
|
||||||
|
|
||||||
|
|
||||||
@ -12,6 +13,7 @@ class State(MessagesState):
|
|||||||
"""State for the agent system, extends MessagesState with next field."""
|
"""State for the agent system, extends MessagesState with next field."""
|
||||||
|
|
||||||
# Runtime Variables
|
# Runtime Variables
|
||||||
|
locale: str = "en-US"
|
||||||
observations: Annotated[list[str], operator.add] = []
|
observations: Annotated[list[str], operator.add] = []
|
||||||
plan_iterations: int = 0
|
plan_iterations: int = 0
|
||||||
current_plan: Plan | str = None
|
current_plan: Plan | str = None
|
||||||
|
@ -23,7 +23,6 @@ You are a professional software engineer proficient in Python scripting. Your ta
|
|||||||
- Use comments in code to improve readability and maintainability.
|
- Use comments in code to improve readability and maintainability.
|
||||||
- If you want to see the output of a value, you MUST print it out with `print(...)`.
|
- If you want to see the output of a value, you MUST print it out with `print(...)`.
|
||||||
- Always and only use Python to do the math.
|
- Always and only use Python to do the math.
|
||||||
- Always use the same language as the initial question.
|
|
||||||
- Always use `yfinance` for financial market data:
|
- Always use `yfinance` for financial market data:
|
||||||
- Get historical data with `yf.download()`
|
- Get historical data with `yf.download()`
|
||||||
- Access company info with `Ticker` objects
|
- Access company info with `Ticker` objects
|
||||||
@ -32,3 +31,4 @@ You are a professional software engineer proficient in Python scripting. Your ta
|
|||||||
- `pandas` for data manipulation
|
- `pandas` for data manipulation
|
||||||
- `numpy` for numerical operations
|
- `numpy` for numerical operations
|
||||||
- `yfinance` for financial market data
|
- `yfinance` for financial market data
|
||||||
|
- Always output in the locale of **{{ locale }}**.
|
||||||
|
@ -163,6 +163,7 @@ interface Step {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface Plan {
|
interface Plan {
|
||||||
|
locale: string; // e.g. "en-US" or "zh-CN", based on the user's language or specific request
|
||||||
has_enough_context: boolean;
|
has_enough_context: boolean;
|
||||||
thought: string;
|
thought: string;
|
||||||
title: string;
|
title: string;
|
||||||
@ -182,4 +183,4 @@ interface Plan {
|
|||||||
- Research steps (`need_web_search: true`) for gathering information
|
- Research steps (`need_web_search: true`) for gathering information
|
||||||
- Processing steps (`need_web_search: false`) for calculations and data processing
|
- Processing steps (`need_web_search: false`) for calculations and data processing
|
||||||
- Default to gathering more information unless the strictest sufficient context criteria are met
|
- Default to gathering more information unless the strictest sufficient context criteria are met
|
||||||
- Always Use the same language as the user
|
- Always use the same language as the user
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
# Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
# Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
from pydantic import BaseModel, Field
|
|
||||||
from typing import List, Optional
|
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
|
|
||||||
class StepType(str, Enum):
|
class StepType(str, Enum):
|
||||||
@ -24,6 +25,9 @@ class Step(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class Plan(BaseModel):
|
class Plan(BaseModel):
|
||||||
|
locale: str = Field(
|
||||||
|
..., description="e.g. 'en-US' or 'zh-CN', based on the user's language"
|
||||||
|
)
|
||||||
has_enough_context: bool
|
has_enough_context: bool
|
||||||
thought: str
|
thought: str
|
||||||
title: str
|
title: str
|
||||||
|
@ -33,7 +33,7 @@ You are dedicated to conducting thorough investigations and providing comprehens
|
|||||||
|
|
||||||
- [Source Title](https://example.com/page2)
|
- [Source Title](https://example.com/page2)
|
||||||
```
|
```
|
||||||
- Always use the same language as the initial question.
|
- Always output in the locale of **{{ locale }}**.
|
||||||
- DO NOT include inline citations in the text. Instead, track all sources and list them in the References section at the end using link reference format.
|
- DO NOT include inline citations in the text. Instead, track all sources and list them in the References section at the end using link reference format.
|
||||||
|
|
||||||
# Notes
|
# Notes
|
||||||
@ -49,4 +49,4 @@ You are dedicated to conducting thorough investigations and providing comprehens
|
|||||||
- When presenting information from multiple sources, clearly indicate which source each piece of information comes from.
|
- When presenting information from multiple sources, clearly indicate which source each piece of information comes from.
|
||||||
- Include images using `` in a separate section.
|
- Include images using `` in a separate section.
|
||||||
- The included images should **only** be from the information gathered **from the search results or the crawled content**. **Never** include images that are not from the search results or the crawled content.
|
- The included images should **only** be from the information gathered **from the search results or the crawled content**. **Never** include images that are not from the search results or the crawled content.
|
||||||
- Always use the same language as the initial question.
|
- Always use the locale of **{{ locale }}** for the output.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user