fix agent: user-scoped conversation history + stricter _find_project matching

This commit is contained in:
ymq 2026-08-09 17:19:59 +08:00
parent 255f41c780
commit 053b71ae95

View File

@ -48,12 +48,21 @@ def _guess_role(title):
async def _find_project(sor, name):
if not name: return None
# Exact match first
recs = await sor.sqlExe("SELECT id,name FROM sd_projects WHERE name=${n}$",{"n":name})
if recs: return recs[0]
# Fuzzy match — require keyword >= 2 chars, prefer prefix match
kw = name.lower().strip()
if len(kw) < 2: return None
allp = await sor.sqlExe("SELECT id,name FROM sd_projects ORDER BY created_at DESC",{})
kw = name.lower()
# First pass: name starts with kw
for r in (allp or []):
if kw in (getattr(r,'name','') or '').lower(): return r
rn = (getattr(r,'name','') or '').lower()
if rn.startswith(kw): return r
# Second pass: kw is a word in name (split by common delimiters)
for r in (allp or []):
rn = (getattr(r,'name','') or '').lower()
if kw in rn: return r
return None
async def _load_ctx(sor, uid):
@ -224,7 +233,7 @@ if action == 'send_message':
env_text = f"项目: {ctx['pname'] or '未选择'}\n仓库: {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 ORDER BY created_at ASC LIMIT 20",{}) or []):
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 []):
msgs.append({"role":'user' if getattr(h,'role','')=='user' else 'assistant',"content":getattr(h,'content','')})
msgs.append({"role":"user","content":message_text})
await sor.C('pipeline_conversations',{'id':getID(),'role':'user','content':message_text,'msg_type':'text','org_id':org_id,'created_by':uid})