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",
"script": decision.script,
"skill": decision.skill,
"params": validated_params,
"params": decision.params,
"reason": decision.reason
}
@ -152,7 +152,7 @@ class Agent:
# resume: 补 missing 参数
# ---------------------------
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)
if schema_fields is None:
schema_fields = []
@ -170,14 +170,19 @@ class Agent:
# 校验 schema
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:
state.missing = e.fields
question = await self._ask_user_for_params(state.user_intent, state.skill, e.fields)
return {"type": "clarification", "state": state, "question": question}
# 参数完整,返回可直接调用 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'])
user_reply = input()
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)
rzt = await f(
result['skill'],
result['script'],
params=result['params']
args=result['params']
)
print(rzt)
else:

View File

@ -11,7 +11,8 @@ def setup_template():
async def main():
setup_template()
# 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__':
asyncio.run(main())