fix: remove switch_project from tools — switch handled by pre-processing before LLM runs
This commit is contained in:
parent
d86307e5f4
commit
3da96af786
@ -17,12 +17,11 @@ dbname = get_module_dbname('pipeline-sdlc')
|
||||
AGENT_PROMPT = """你是开发产线驾驶舱 Agent。用工具获取数据,用 reply 回复。
|
||||
|
||||
## 核心原则
|
||||
- 环境信息中已显示当前项目。所有操作在当前项目内完成,绝不切换
|
||||
- 仅当用户明确说"切换到 XXX 项目"才调用 switch_project
|
||||
- 不要调用 switch_project 去"确认"或"查看"项目——环境信息已经告诉你了
|
||||
- 环境信息中已显示当前项目。所有操作在当前项目内完成
|
||||
- 项目切换由系统自动处理,你不需要也不能切换项目
|
||||
- 如果用户问"有哪些项目",直接根据环境信息回答,不需要调用任何工具
|
||||
|
||||
## 工作流
|
||||
- 切换项目:用户说"切换到XXX" → switch_project("XXX")。不知道项目名 → switch_project(不传参数)看列表
|
||||
- 创建项目:不存在则 create_project
|
||||
- 删除项目:delete_project → 看到确认提示后,用户回复「确认删除 xxx」→ 再调 _sys_delete_project
|
||||
- 查看进度:list_tasks / task_detail / list_deliverables
|
||||
@ -41,7 +40,6 @@ AGENT_PROMPT = """你是开发产线驾驶舱 Agent。用工具获取数据,
|
||||
环境: __ENV__"""
|
||||
|
||||
TOOLS = [
|
||||
{"name":"switch_project","description":"切换到指定项目。如果项目名不确定,不传project参数可返回可用项目列表","params":{"project":"项目名称(可选,不传列出可用项目)"}},
|
||||
{"name":"create_project","description":"创建新项目","params":{"name":"项目名称","description":"项目描述(可选)"}},
|
||||
{"name":"delete_project","description":"删除项目(返回确认提示,用户确认后再调用_sys_delete_project执行)","params":{"project":"项目名称"}},
|
||||
{"name":"list_tasks","description":"列出当前项目任务","params":{"state":"状态(可选)"}},
|
||||
@ -145,7 +143,7 @@ def _w_card(title, body, kind="success"):
|
||||
]}
|
||||
def _w_progress(text): return {"widgettype":"Text","options":{"text":text,"style":{"color":"#f59e0b","fontSize":"12px","padding":"2px 8px"},"halign":"left"}}
|
||||
|
||||
_tool_labels = {'switch_project':'切换项目','create_project':'创建项目','delete_project':'删除项目','list_tasks':'查询任务','task_detail':'任务详情','list_deliverables':'查看交付件','view_deliverable':'交付件内容','list_questions':'查看问题','answer_question':'回答问题','create_task':'创建任务','start_agents':'启动角色Agent','diagnose_project':'项目诊断','check_progress':'检查进度','add_repo':'关联仓库','list_repos':'查看仓库','clone_repo':'克隆仓库','add_bug':'报告Bug','run_command':'执行命令'}
|
||||
_tool_labels = {'create_project':'创建项目','delete_project':'删除项目','list_tasks':'查询任务','task_detail':'任务详情','list_deliverables':'查看交付件','view_deliverable':'交付件内容','list_questions':'查看问题','answer_question':'回答问题','create_task':'创建任务','start_agents':'启动角色Agent','diagnose_project':'项目诊断','check_progress':'检查进度','add_repo':'关联仓库','list_repos':'查看仓库','clone_repo':'克隆仓库','add_bug':'报告Bug','run_command':'执行命令'}
|
||||
|
||||
async def _exec_tool(sor, tool, params, ctx, uid, org_id):
|
||||
p = params or {}
|
||||
@ -447,7 +445,19 @@ if action == 'send_message':
|
||||
return
|
||||
|
||||
repos_str = ', '.join([r['n'] for r in ctx['repos']]) or '无'
|
||||
env_text = f"【当前项目: {ctx['pname'] or '未选择'}】— 除非用户明确要求切换,否则在这里操作\n工作空间: {ctx['ws'] or '未设置'} | 仓库: {repos_str}"
|
||||
# Pre-processing: detect switch request and execute before LLM runs
|
||||
import re as _re
|
||||
switch_m = _re.search(r'切换到\s*(.+)', message_text)
|
||||
if switch_m:
|
||||
target = switch_m.group(1).strip().rstrip('项目')
|
||||
proj = await _find_project(sor, target)
|
||||
if proj and proj.id != ctx['pid']:
|
||||
await _save_ctx(sor, uid, proj.id)
|
||||
ctx['pid'] = proj.id; ctx['pname'] = proj.name
|
||||
repos = await sor.sqlExe("SELECT repo_name,repo_url FROM sd_project_repos WHERE project_id=${p}$",{"p":proj.id})
|
||||
ctx['repos'] = [{'n':r.repo_name,'u':r.repo_url} for r in (repos or [])]
|
||||
repos_str = ', '.join([r['n'] for r in ctx['repos']]) or '无'
|
||||
env_text = f"【当前项目: {ctx['pname'] or '未选择'}】— 所有操作在当前项目内完成\n工作空间: {ctx['ws'] or '未设置'} | 仓库: {repos_str}"
|
||||
system = AGENT_PROMPT.replace('__TOOLS__',TOOLS_TEXT).replace('__ENV__',env_text)
|
||||
msgs = [{"role":"system","content":system}]
|
||||
for h in (await sor.sqlExe("SELECT role,content FROM pipeline_conversations WHERE created_by=${u}$ ORDER BY created_at ASC LIMIT 20",{"u":uid}) or []):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user