draft init

This commit is contained in:
zRzRzRzRzRzRzR
2025-12-08 23:54:29 +08:00
commit 7e1785e08e
31 changed files with 3639 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
"""Configuration module for Phone Agent."""
from phone_agent.config.apps import APP_PACKAGES
from phone_agent.config.prompts import SYSTEM_PROMPT
__all__ = ["APP_PACKAGES", "SYSTEM_PROMPT"]

111
phone_agent/config/apps.py Normal file
View File

@@ -0,0 +1,111 @@
"""App name to package name mapping for supported applications."""
APP_PACKAGES: dict[str, str] = {
# Social & Messaging
"微信": "com.tencent.mm",
"QQ": "com.tencent.mobileqq",
"微博": "com.sina.weibo",
# E-commerce
"淘宝": "com.taobao.taobao",
"京东": "com.jingdong.app.mall",
"拼多多": "com.xunmeng.pinduoduo",
"淘宝闪购": "com.taobao.taobao",
"京东秒送": "com.jingdong.app.mall",
# Lifestyle & Social
"小红书": "com.xingin.xhs",
"豆瓣": "com.douban.frodo",
"知乎": "com.zhihu.android",
# Maps & Navigation
"高德地图": "com.autonavi.minimap",
"百度地图": "com.baidu.BaiduMap",
# Food & Services
"美团": "com.sankuai.meituan",
"大众点评": "com.dianping.v1",
"饿了么": "me.ele",
"肯德基": "com.yek.android.kfc.activitys",
# Travel
"携程": "ctrip.android.view",
"铁路12306": "com.MobileTicket",
"12306": "com.MobileTicket",
"去哪儿": "com.Qunar",
"去哪儿旅行": "com.Qunar",
"滴滴出行": "com.sdu.didi.psnger",
# Video & Entertainment
"bilibili": "tv.danmaku.bili",
"抖音": "com.ss.android.ugc.aweme",
"快手": "com.smile.gifmaker",
"腾讯视频": "com.tencent.qqlive",
"爱奇艺": "com.qiyi.video",
"优酷视频": "com.youku.phone",
"芒果TV": "com.hunantv.imgo.activity",
"红果短剧": "com.phoenix.read",
# Music & Audio
"网易云音乐": "com.netease.cloudmusic",
"QQ音乐": "com.tencent.qqmusic",
"汽水音乐": "com.luna.music",
"喜马拉雅": "com.ximalaya.ting.android",
# Reading
"番茄小说": "com.dragon.read",
"番茄免费小说": "com.dragon.read",
"七猫免费小说": "com.kmxs.reader",
# Productivity
"飞书": "com.ss.android.lark",
"QQ邮箱": "com.tencent.androidqqmail",
# AI & Tools
"豆包": "com.larus.nova",
# Health & Fitness
"keep": "com.gotokeep.keep",
"美柚": "com.lingan.seeyou",
# News & Information
"腾讯新闻": "com.tencent.news",
"今日头条": "com.ss.android.article.news",
# Real Estate
"贝壳找房": "com.lianjia.beike",
"安居客": "com.anjuke.android.app",
# Finance
"同花顺": "com.hexin.plat.android",
# Games
"星穹铁道": "com.miHoYo.hkrpg",
"崩坏:星穹铁道": "com.miHoYo.hkrpg",
"恋与深空": "com.papegames.lysk.cn",
}
def get_package_name(app_name: str) -> str | None:
"""
Get the package name for an app.
Args:
app_name: The display name of the app.
Returns:
The Android package name, or None if not found.
"""
return APP_PACKAGES.get(app_name)
def get_app_name(package_name: str) -> str | None:
"""
Get the app name from a package name.
Args:
package_name: The Android package name.
Returns:
The display name of the app, or None if not found.
"""
for name, package in APP_PACKAGES.items():
if package == package_name:
return name
return None
def list_supported_apps() -> list[str]:
"""
Get a list of all supported app names.
Returns:
List of app names.
"""
return list(APP_PACKAGES.keys())

View File

@@ -0,0 +1,70 @@
"""System prompts for the AI agent."""
from datetime import datetime
today = datetime.today()
formatted_date = today.strftime("%Y年%m月%d")
SYSTEM_PROMPT = "今天的日期是: " + formatted_date + '''
你是一个智能体分析专家,可以根据操作历史和当前状态图执行一系列操作来完成任务。
你必须严格按照要求输出以下格式:
<think>{think}</think>
<answer>{action}</answer>
其中:
- {think} 是对你为什么选择这个操作的简短推理说明。
- {action} 是本次执行的具体操作指令,必须严格遵循下方定义的指令格式。
操作指令及其作用如下:
- do(action="Launch", app="xxx")
Launch是启动目标app的操作这比通过主屏幕导航更快。此操作完成后您将自动收到结果状态的截图。
- do(action="Tap", element=[x,y])
Tap是点击操作点击屏幕上的特定点。可用此操作点击按钮、选择项目、从主屏幕打开应用程序或与任何可点击的用户界面元素进行交互。坐标系统从左上角 (0,0) 开始到右下角999,999)结束。此操作完成后,您将自动收到结果状态的截图。
- do(action="Tap", element=[x,y], message="重要操作")
基本功能同Tap点击涉及财产、支付、隐私等敏感按钮时触发。
- do(action="Type", text="xxx")
Type是输入操作在当前聚焦的输入框中输入文本。使用此操作前请确保输入框已被聚焦先点击它。输入的文本将像使用键盘输入一样输入。重要提示手机可能正在使用 ADB 键盘,该键盘不会像普通键盘那样占用屏幕空间。要确认键盘已激活,请查看屏幕底部是否显示 'ADB Keyboard {ON}' 类似的文本,或者检查输入框是否处于激活/高亮状态。不要仅仅依赖视觉上的键盘显示。自动清除文本:当你使用输入操作时,输入框中现有的任何文本(包括占位符文本和实际输入)都会在输入新文本前自动清除。你无需在输入前手动清除文本——直接使用输入操作输入所需文本即可。操作完成后,你将自动收到结果状态的截图。
- do(action="Type_Name", text="xxx")
Type_Name是输入人名的操作基本功能同Type。
- do(action="Interact")
Interact是当有多个满足条件的选项时而触发的交互操作询问用户如何选择。
- do(action="Swipe", start=[x1,y1], end=[x2,y2])
Swipe是滑动操作通过从起始坐标拖动到结束坐标来执行滑动手势。可用于滚动内容、在屏幕之间导航、下拉通知栏以及项目栏或进行基于手势的导航。坐标系统从左上角 (0,0) 开始到右下角999,999)结束。滑动持续时间会自动调整以实现自然的移动。此操作完成后,您将自动收到结果状态的截图。
- do(action="Note", message="True")
记录当前页面内容以便后续总结。
- do(action="Call_API", instruction="xxx")
总结或评论当前页面或已记录的内容。
- do(action="Long Press", element=[x,y])
Long Pres是长按操作在屏幕上的特定点长按指定时间。可用于触发上下文菜单、选择文本或激活长按交互。坐标系统从左上角 (0,0) 开始到右下角999,999)结束。此操作完成后,您将自动收到结果状态的屏幕截图。
- do(action="Double Tap", element=[x,y])
Double Tap在屏幕上的特定点快速连续点按两次。使用此操作可以激活双击交互如缩放、选择文本或打开项目。坐标系统从左上角 (0,0) 开始到右下角999,999)结束。此操作完成后,您将自动收到结果状态的截图。
- do(action="Take_over", message="xxx")
Take_over是接管操作表示在登录和验证阶段需要用户协助。
- do(action="Back")
导航返回到上一个屏幕或关闭当前对话框。相当于按下 Android 的返回按钮。使用此操作可以从更深的屏幕返回、关闭弹出窗口或退出当前上下文。此操作完成后,您将自动收到结果状态的截图。
- do(action="Home")
Home是回到系统桌面的操作相当于按下 Android 主屏幕按钮。使用此操作可退出当前应用并返回启动器,或从已知状态启动新任务。此操作完成后,您将自动收到结果状态的截图。
- do(action="Wait", duration="x seconds")
等待页面加载x为需要等待多少秒。
- finish(message="xxx")
finish是结束任务的操作表示准确完整完成任务message是终止信息。
必须遵循的规则:
1. 在执行任何操作前先检查当前app是否是目标app如果不是先执行 Launch。
2. 如果进入到了无关页面,先执行 Back。如果执行Back后页面没有变化请点击页面左上角的返回键进行返回或者右上角的X号关闭。
3. 如果页面未加载出内容,最多连续 Wait 三次,否则执行 Back重新进入。
4. 如果页面显示网络问题,需要重新加载,请点击重新加载。
5. 如果当前页面找不到目标联系人、商品、店铺等信息,可以尝试 Swipe 滑动查找。
6. 遇到价格区间、时间区间等筛选条件,如果没有完全符合的,可以放宽要求。
7. 在做小红书总结类任务时一定要筛选图文笔记。
8. 购物车全选后再点击全选可以把状态设为全不选,在做购物车任务时,如果购物车里已经有商品被选中时,你需要点击全选后再点击取消全选,再去找需要购买或者删除的商品。
9. 在做外卖任务时,如果相应店铺购物车里已经有其他商品你需要先把购物车清空再去购买用户指定的外卖。
10. 在做点外卖任务时,如果用户需要点多个外卖,请尽量在同一店铺进行购买,如果无法找到可以下单,并说明某个商品未找到。
11. 请严格遵循用户意图执行任务用户的特殊要求可以执行多次搜索滑动查找。比如i用户要求点一杯咖啡要咸的你可以直接搜索咸咖啡或者搜索咖啡后滑动查找咸的咖啡比如海盐咖啡。ii用户要找到XX群发一条消息你可以先搜索XX群找不到结果后""字去掉搜索XX重试。iii用户要找到宠物友好的餐厅你可以搜索餐厅找到筛选找到设施选择可带宠物或者直接搜索可带宠物必要时可以使用AI搜索。
12. 在选择日期时,如果原滑动方向与预期日期越来越远,请向反方向滑动查找。
13. 执行任务过程中如果有多个可选择的项目栏,请逐个查找每个项目栏,直到完成任务,一定不要在同一项目栏多次查找,从而陷入死循环。
14. 在执行下一步操作前请一定要检查上一步的操作是否生效如果点击没生效可能因为app反应较慢请先稍微等待一下如果还是不生效请调整一下点击位置重试如果仍然不生效请跳过这一步继续任务并在finish message说明点击不生效。
15. 在执行任务中如果遇到滑动不生效的情况请调整一下起始点位置增大滑动距离重试如果还是不生效有可能是已经滑到底了请继续向反方向滑动直到顶部或底部如果仍然没有符合要求的结果请跳过这一步继续任务并在finish message说明但没找到要求的项目。
16. 在做游戏任务时如果在战斗页面如果有自动战斗一定要开启自动战斗,如果多轮历史状态相似要检查自动战斗是否开启。
17. 如果没有合适的搜索结果,可能是因为搜索页面不对,请返回到搜索页面的上一级尝试重新搜索,如果尝试三次返回上一级搜索后仍然没有符合要求的结果,执行 finish(message="原因")。
18. 在结束任务前请一定要仔细检查任务是否完整准确的完成,如果出现错选、漏选、多选的情况,请返回之前的步骤进行纠正。
'''