This commit is contained in:
yumoqing 2026-01-22 14:55:13 +08:00
parent 5201e2b0ac
commit fba104a285
2 changed files with 13 additions and 7 deletions

View File

@ -140,7 +140,7 @@ class Agent:
"type": "script_call", "type": "script_call",
"script": decision.script, "script": decision.script,
"skill": decision.skill, "skill": decision.skill,
"params": validated_params, "params": decision.params,
"reason": decision.reason "reason": decision.reason
} }
@ -152,7 +152,7 @@ class Agent:
# resume: 补 missing 参数 # resume: 补 missing 参数
# --------------------------- # ---------------------------
async def resume(self, state: PlanState, user_reply: str): async def resume(self, state: PlanState, user_reply: str):
skill_spec = next(s for s in self.skills if s.name == state.skill) skill_spec = next(s for s in self.skills if s.metadata.name == state.skill)
schema_fields = self.skillkit.get_script_params(state.skill, state.script) schema_fields = self.skillkit.get_script_params(state.skill, state.script)
if schema_fields is None: if schema_fields is None:
schema_fields = [] schema_fields = []
@ -170,14 +170,19 @@ class Agent:
# 校验 schema # 校验 schema
try: try:
validated = self._validate_params(SkillDecision(skill=state.skill, script=state.script, params=state.params)) validated = self._validate_params(SkillDecision(
skill=state.skill,
script=state.script,
params=state.params,
missing_params=[]
))
except MissingParams as e: except MissingParams as e:
state.missing = e.fields state.missing = e.fields
question = await self._ask_user_for_params(state.user_intent, state.skill, e.fields) question = await self._ask_user_for_params(state.user_intent, state.skill, e.fields)
return {"type": "clarification", "state": state, "question": question} return {"type": "clarification", "state": state, "question": question}
# 参数完整,返回可直接调用 skill # 参数完整,返回可直接调用 skill
return {"type": "skill_call", "skill": state.skill, "params": validated} return {"type": "script_call", "skill": state.skill, "params": validated}
# --------------------------- # ---------------------------
# 内部方法 # 内部方法
@ -262,12 +267,12 @@ async def skillagent(llm, apikey, user_skillroot, sys_skillroot=None):
print(result['question']) print(result['question'])
user_reply = input() user_reply = input()
result = await agent.resume(result["state"], user_reply) result = await agent.resume(result["state"], user_reply)
if result['type'] == 'skill_call': if result['type'] == 'script_call':
f = awaitify(agent.skillkit.execute_skill_script) f = awaitify(agent.skillkit.execute_skill_script)
rzt = await f( rzt = await f(
result['skill'], result['skill'],
result['script'], result['script'],
params=result['params'] args=result['params']
) )
print(rzt) print(rzt)
else: else:

View File

@ -11,7 +11,8 @@ def setup_template():
async def main(): async def main():
setup_template() setup_template()
# await skillagent('55QMNxVgvlh8nyis0P1BE', 'eYgNuD6sVQgbj-khOOUNU', './skills') # await skillagent('55QMNxVgvlh8nyis0P1BE', 'eYgNuD6sVQgbj-khOOUNU', './skills')
await skillagent('09Xzu3kQ-K98Ewy2KtyU3', 'eYgNuD6sVQgbj-khOOUNU', './skills') # await skillagent('09Xzu3kQ-K98Ewy2KtyU3', 'eYgNuD6sVQgbj-khOOUNU', './skills')
await skillagent('YLsLP-XdwgywF59eYGIk5', 'eYgNuD6sVQgbj-khOOUNU', './skills')
if __name__ == '__main__': if __name__ == '__main__':
asyncio.run(main()) asyncio.run(main())