Merge branch 'master' of http://192.168.0.200/knowledge-base-bj/deerflow-server into hwg
This commit is contained in:
commit
b97548f8d6
4 files changed
+32
-5
No files matched your search
@@ -204,4 +204,4 @@ memory:
|
|||||||
ai_writing:
|
ai_writing:
|
||||||
keyword_model: deepseek-chat # 检索词生成专用模型,留空回退写作主模型
|
keyword_model: deepseek-chat # 检索词生成专用模型,留空回退写作主模型
|
||||||
rank_model: deepseek-chat # 素材排序专用模型,留空回退写作主模型
|
rank_model: deepseek-chat # 素材排序专用模型,留空回退写作主模型
|
||||||
max_materials: 50 # 合并去重后的素材总量上限,范围 [1, 100],默认 20
|
max_materials: 20 # 合并去重后的素材总量上限,范围 [1, 100],默认 20
|
||||||
+25
@@ -15,6 +15,31 @@ from langchain_core.runnables import RunnableConfig
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def get_ai_writing_config() -> dict:
|
||||||
|
"""读 ``config.yaml`` 的 ``ai_writing`` 段。
|
||||||
|
|
||||||
|
阶段 7 之前由路由层 ``_make_config`` 把这份 dict 注入到 ``configurable.ai_writing_config``
|
||||||
|
给节点使用。阶段 7 删冗余后 ``_make_config`` 和注入路径全部消失(前端 ``stream.submit``
|
||||||
|
的 config 只传 ``model_name``)—— 节点改成自己直接从 ``get_app_config()`` 读,跨边界
|
||||||
|
更干净,``config.yaml`` 改完也不用重启前端 / 重发起会话。
|
||||||
|
|
||||||
|
返回字段(按使用方):
|
||||||
|
- researcher:``keyword_model`` / ``rank_model`` / ``max_materials`` /
|
||||||
|
``search_provider`` 等
|
||||||
|
- editor:``pass_threshold``
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
from deerflow.config import get_app_config
|
||||||
|
|
||||||
|
aw = getattr(get_app_config(), "ai_writing", None)
|
||||||
|
if isinstance(aw, dict):
|
||||||
|
return aw
|
||||||
|
return dict(aw) if aw else {}
|
||||||
|
except Exception:
|
||||||
|
logger.exception("ai_writing: 读取 app config 失败,使用空配置")
|
||||||
|
return {}
|
||||||
|
|
||||||
|
|
||||||
def safe_get_stream_writer():
|
def safe_get_stream_writer():
|
||||||
"""返回一个 stream writer callable;在没有 LangGraph runtime 上下文时退化成 no-op。
|
"""返回一个 stream writer callable;在没有 LangGraph runtime 上下文时退化成 no-op。
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -11,7 +11,7 @@ from ..state import AIWritingState, ReviewResult, ReviewIssue
|
|||||||
from ..prompts.editor_prompts import (
|
from ..prompts.editor_prompts import (
|
||||||
EDITOR_SYSTEM, FACT_REVIEW_USER, LOGIC_REVIEW_USER, LANGUAGE_REVIEW_USER,
|
EDITOR_SYSTEM, FACT_REVIEW_USER, LOGIC_REVIEW_USER, LANGUAGE_REVIEW_USER,
|
||||||
)
|
)
|
||||||
from ._utils import get_model, parse_json, _content_to_text, ThinkTagParser, safe_get_stream_writer
|
from ._utils import get_ai_writing_config, get_model, parse_json, _content_to_text, ThinkTagParser, safe_get_stream_writer
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -105,7 +105,8 @@ async def editor_node(state: AIWritingState, config: RunnableConfig) -> dict:
|
|||||||
|
|
||||||
cfg = config.get("configurable", {})
|
cfg = config.get("configurable", {})
|
||||||
writer = safe_get_stream_writer()
|
writer = safe_get_stream_writer()
|
||||||
ai_writing_config = cfg.get("ai_writing_config", {}) or {}
|
# 阶段 7 后从 app config 直接读,不走 configurable 注入
|
||||||
|
ai_writing_config = get_ai_writing_config()
|
||||||
pass_threshold = int(ai_writing_config.get("pass_threshold", _DEFAULT_PASS_THRESHOLD))
|
pass_threshold = int(ai_writing_config.get("pass_threshold", _DEFAULT_PASS_THRESHOLD))
|
||||||
|
|
||||||
REVIEW_TASKS = [
|
REVIEW_TASKS = [
|
||||||
|
|||||||
+3
-2
@@ -15,7 +15,7 @@ from ..prompts.researcher_prompts import (
|
|||||||
EXTRACT_KEYWORDS_SYSTEM, EXTRACT_KEYWORDS_USER,
|
EXTRACT_KEYWORDS_SYSTEM, EXTRACT_KEYWORDS_USER,
|
||||||
RANK_MATERIALS_SYSTEM, RANK_MATERIALS_USER,
|
RANK_MATERIALS_SYSTEM, RANK_MATERIALS_USER,
|
||||||
)
|
)
|
||||||
from ._utils import llm_json, safe_get_stream_writer
|
from ._utils import get_ai_writing_config, llm_json, safe_get_stream_writer
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -115,7 +115,8 @@ async def researcher_node(state: AIWritingState, config: RunnableConfig) -> dict
|
|||||||
|
|
||||||
# 素材收集专家专用模型:检索词生成 / 素材排序 可在 config.yaml 的
|
# 素材收集专家专用模型:检索词生成 / 素材排序 可在 config.yaml 的
|
||||||
# ai_writing 段单独配置(keyword_model / rank_model),留空则回退写作主模型。
|
# ai_writing 段单独配置(keyword_model / rank_model),留空则回退写作主模型。
|
||||||
ai_writing_config = cfg.get("ai_writing_config", {}) or {}
|
# 注:阶段 7 后这份配置由节点直接读 app config,不再走 configurable 注入。
|
||||||
|
ai_writing_config = get_ai_writing_config()
|
||||||
keyword_model: str | None = ai_writing_config.get("keyword_model") or None
|
keyword_model: str | None = ai_writing_config.get("keyword_model") or None
|
||||||
rank_model: str | None = ai_writing_config.get("rank_model") or None
|
rank_model: str | None = ai_writing_config.get("rank_model") or None
|
||||||
# 素材总量上限(config.yaml: ai_writing.max_materials),按检索词数均分到每个词
|
# 素材总量上限(config.yaml: ai_writing.max_materials),按检索词数均分到每个词
|
||||||
|
|||||||
Reference in new issue
Block a user