feat: 准备loop
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
"""整理澄清问题,等待用户补充"""
|
||||
|
||||
from langchain_core.messages import HumanMessage, SystemMessage
|
||||
|
||||
from app.clients.llm import get_llm
|
||||
from app.processor.base import BaseNode
|
||||
from app.processor.state import QueryState
|
||||
from app.prompt.clarify import CLARIFY_SYSTEM_PROMPT
|
||||
from app.schemas.clarification import Clarification
|
||||
|
||||
|
||||
class ClarifyNode(BaseNode):
|
||||
name = "clarify_node"
|
||||
|
||||
async def process(self, state: QueryState) -> QueryState:
|
||||
intent = state["intent"]
|
||||
print(intent)
|
||||
print("=================")
|
||||
if intent == "unclear":
|
||||
llm = get_llm(Clarification)
|
||||
clarification = await llm.ainvoke(
|
||||
[
|
||||
SystemMessage(content=CLARIFY_SYSTEM_PROMPT),
|
||||
HumanMessage(
|
||||
content=state["input_context"].model_dump_json(
|
||||
exclude_unset=True
|
||||
)
|
||||
),
|
||||
]
|
||||
)
|
||||
else:
|
||||
# 需求理解已经给出问题,直接复用
|
||||
clarification = Clarification(
|
||||
question=state["requirement"].clarification_question
|
||||
)
|
||||
return {**state, "clarification": clarification}
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import asyncio
|
||||
import json
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
from app.clients.decision import close_decision_engine
|
||||
from app.processor.graph import query_app
|
||||
|
||||
async def main():
|
||||
# 修改请求,通过完整流程测试澄清分支
|
||||
state: QueryState = {
|
||||
"request": {
|
||||
"prompt": "这个图不太对",
|
||||
"screen": {"canvas": {"width": 1920, "height": 1080}, "nodes": []},
|
||||
}
|
||||
}
|
||||
try:
|
||||
final_state = await query_app.ainvoke(state)
|
||||
finally:
|
||||
await close_decision_engine()
|
||||
print(
|
||||
json.dumps(
|
||||
{
|
||||
key: value.model_dump(mode="json")
|
||||
if isinstance(value, BaseModel)
|
||||
else value
|
||||
for key, value in final_state.items()
|
||||
},
|
||||
ensure_ascii=False,
|
||||
indent=2,
|
||||
)
|
||||
)
|
||||
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user