一、引言
口袋专家AI是什么?
口袋专家AI,是一款为超级个体打造的云端个人智能体 App。 愿景是:"让每个普通人,都能拥有一支 AI 专家团队,成为超级个体" 。
使用口袋专家AI像使用微信一样简单:通过专家对话、专家广场、专家群、专家圈4大功能,让一支200人的AI专家团队随时听候您的调遣。
|-----------------------------------------------------------------------------|-----------------------------------------------------------------------------|
|
|
|
|
|
|
|
||
口袋专家AI预置了100多个面向企业工作的专家智能体,细分为运营部、产品部、技术部、设计部等15个公司部门;
口袋专家AI预置了100多个生活专家智能体,覆盖衣(购物比价)、食(团购订外卖)、住(民宿酒店找优惠)、行(订票打车)等各个方面。
口袋专家AI还是一款社交型AI,将你与AI专家共创的短剧、图片、视频等优质作品分享到专家圈,其他AI专家会来给你鼓励,且用户将会看到并为你点赞。
本篇:法律专家原理与实战
本篇以法律专家为例,先通过"被裁员,公司只给 N,合法吗"看它如何完成任务,再结合"calculate:算式题为什么不进沙箱"一节,拆解人设提示词与执行流程,讲清这类智能体从使用到开发的过程。
二、应用篇:法律专家能帮你做什么
2.1 在哪儿找到它
法律专家在「专家广场」的「企业专家 · 法务部」下,也可以在「对话」页右上角直接搜。它的开场页:

它给自己定的能力是条款解读、风险标注、维权指引、联网搜索。开场建议的三个问题都是打工人的日常:
• 公司让我签竞业协议但没有补偿金,合理吗?
• 试用期六个月工资打八折,这合法吗?
• 被裁员了,N+1 怎么算?帮我算一下:工作 3 年 2 个月,月薪 1.5 万
2.2 示例:被裁员,公司只给 N,合法吗
我们给了一个比第三条开场示例更完整的版本------把城市、工龄、工资口径、手上的材料、签没签协议都交代清楚:
我在杭州一家互联网公司, 入职 3 年 2 个月, 上周被通知裁员, 公司说只给 N。我月薪 1.5 万 (税前, 近 12 个月平均), 手里有劳动合同和工资流水, 目前还没签任何协议。N+1 该怎么算? 公司只给 N 合法吗? 我下一步该怎么做?

100 秒出答案。几个值得注意的地方:
先纠正问法。 第一句结论:"公司只给 N,在绝大多数裁员情形下是不合法的。你的合理预期不是 N+1,而是 2N = 10.5 万元。"接着一张表把三个概念分开:N 对应第 46、47 条,N+1 对应第 40 条且"仅限"三种情形加"未提前 30 日书面通知",2N 对应第 87 条违法解除。表下两句最有用:"「+1」不是裁员的标配","N+1 和 2N 不能兼得"。
算式给全,基数说清。 年限按第 47 条:满 3 年算 3 个月,剩下 2 个月"不满六个月"按半个月,N = 3.5;基数是解除前 12 个月平均应发工资。封顶线也查了:浙江 2023 年度加权平均工资 8310 元/月 × 3 = 24930 元/月,15000 元没超,全额按实际工资算。三行表:
| 方案 | 算式 | 金额 |
|---|---|---|
| 公司给的 N | 15000 × 3.5 | 52,500 元 |
| N+1 | 15000 × 4.5 | 67,500 元 |
| 2N(违法解除) | 15000 × 3.5 × 2 | 105,000 元 |
讲清公司为什么站不住。 裁员通常走两条路:第 36 条协商解除------"你有权不还价地拒绝";第 40 条第 3 项"客观情况发生重大变化"------公司要举证真有重大变化(部门整体撤销,而不是"这个岗位优化掉了"),且已就变更合同跟你充分协商过。它引了杭州余杭的一个同类案子:法院认定公司没举证充分协商,构成违法解除,维持 398,880 元赔偿金(该案月薪超三倍,按 24930 元封顶计算)。
行动建议按顺序排,每步有时限和材料。 第 1 步"不签、不闹、留证":带"双方再无争议""自愿""已结清"字样的一律不签,趁权限没收回备份合同、工资条、考勤和谈话录音,还特意提醒别拷贝公司代码和客户数据------"那会给公司反诉你泄密的把柄"。第 2 步书面回函,争取 2N、底线 N+1;第 3 步打 12333 投诉年假、加班费这些"独立的钱";第 4 步仲裁,写明 1 年时效、不收费、45 日审限,连请求事项怎么写都给了。
最后三个容易踩空的细节:补偿在当地上年平均工资 3 倍以内免个税(它算的是 8310 × 12 × 3 ≈ 29.9 万元,10.5 万全额免税);年终奖要单独主张;竞业条款要么让公司书面放弃,要么启动后按月拿竞业补偿。
结尾是那句固定提示,后面按个案补了一句:涉及 10 万元以上的争议,签署任何文件前咨询杭州执业劳动法律师(可先打 12348 免费法律咨询)。
拿去谈之前,建议再确认一件事:答案重点讲了协商解除和第 40 条两条路,如果公司是按第 41 条经济性裁员走完了法定程序(提前 30 日向工会或全体职工说明情况、听取意见、向劳动行政部门报告),法律上只需支付 N。先问清公司依据的是哪一条,再决定按 2N 还是 N+1 去谈------这也正是答案第 1 步里让你书面索要"解除依据"的用处。
2.3 过程:两次搜索、一次读页、三次计算
点开「过程 · 4 步」:

• 第 1 步 :思考里它先犹豫了一下------技能库里有一份「用人单位劳动合规」,说明里写着"算离职补偿";但它注意到"那个技能是站在用人单位角度的。用户是劳动者",这一轮最终也没有调用它。然后说"我先核实一下浙江 / 杭州 2025 年度经济补偿的计算基数(社平工资口径)和代通知金的适用条件,再给你算",同一步里接连调了「联网搜索」(杭州补偿基数、浙江平均工资封顶、N+1 与 2N 的适用情形三个角度)和「计算器」(15000 * 3.5)。
• 第 2 步:思考把三种解除路径理清------第 40 条才有"+1",第 41 条合法裁员只付 N,违法解除 2N。然后「读取网页」一次并行打开两页:浙江省人社厅网站 2025 年 9 月 18 日的一页、一篇杭州律师谈封顶口径的问答;同一步还发了一次「联网搜索」,专查浙江加权平均工资和杭州的封顶口径。
• 第 3 步 :记下核实结果------2023 年度加权平均工资 99722 元(8310 元/月)、三倍上限 24930 元、余杭的同类案例,以及用户 1.5 万远低于封顶线,"不用纠结封顶基数到底用哪个口径"。然后两次「计算器」:15000*3.5、15000*4.5。
• 第 4 步:确认 2N = 105000,判断 2024 年度的数字虽然没查到但不影响结论,开始写答案。
三、技术篇:法律专家是怎么构建出来的
3.1 一位专家 = 一份配置
整体架构在第二篇(旅行专家)3.1 节讲过:客户端 → 准备阶段(装配人设、记忆、工具、技能)→ 思考模式的回合驱动器 → 交付层。法律专家的预置配置:
{
"id": "preset-labor-law",
"name": "法律专家",
"department": "法务部",
"description": "合同条款逐条解读, 试用期/加班/离职补偿等问题给出依据与行动建议",
"capabilities": ["条款解读", "风险标注", "维权指引", "联网搜索"],
"tools": {"web_search": true},
"legacy_names": ["劳动合同避坑助手"],
"system_prompt": "你是熟悉中国劳动法实务的法律助手, 帮打工人看懂合同、算清补偿、避开常见坑。..."
}
两处值得一提:
• legacy_names:它以前叫「劳动合同避坑助手」,和人设开头的"帮打工人"是一个意思------立场写在出身里,3.4 节讲为什么这很重要。
• tools 只声明了 web_search。领用时展开成这位专家的工具配置:
def preset_agent_config(preset: dict) -> dict:
"""预置 → agent_config (与 agent_builder.make_agent_config 同形)。
tools 基线: 常规工具恒开, web_search/open_url 与 python_execute 由预置声明。"""
...
"tools": {
"web_search": web,
"open_url": web,
"calculate": True,
"image_understand": True,
"api_call": True,
"python_execute": bool(tools.get("python_execute")),
},
...
联网搜索和读网页一起打开;计算器恒开;Python 沙箱没有声明。不过要注意,这份配置是"声明"而不是"闸门":运行时的工具开关以平台统一配置为准(第二篇讲过"工具是平台级的"),法律专家这一轮手上其实也有 Python 沙箱。它三次算补偿都选了 calculate------3.3 节从这里说起。
3.2 人设提示词:先定立场,再谈法条
法律专家的人设,线上原文:
你是熟悉中国劳动法实务的法律助手, 帮打工人看懂合同、算清补偿、避开常见坑。
开工前先定两件事: (1) 你现在是什么身份与阶段 (在职 / 已离职 / 已发生争议); (2) 手上有什么材料 (合同、工资流水、考勤、聊天记录)。对抗性问题还要先确认本方立场, 立场搞反建议会完全相反 ------ 不确认不往下走。规则:
1. 解读合同条款时逐条标注: 正常条款 / 需注意 / 明显违法或高风险, 并解释对用户的实际影响。
2. 涉及具体法条与标准 (试用期上限/加班费倍数/经济补偿计算) 时给出依据名称与条文要点; 拿不准或可能有新规时先联网核实, 绝不编造法条编号。
3. 补偿计算给出完整算式与结果, 列明假设条件; 用户没提供的数字 (工龄、月均工资、当地社平工资) 标注「待确认」并说明它会怎样改变结果, 绝不替用户填。
4. 给行动建议按升级顺序: 留证 → 协商 → 劳动监察投诉 → 仲裁, 说明每步的时限与所需材料。
5. 结尾固定提示: 本回答是一般性法律信息, 不构成正式法律意见, 重大争议建议咨询执业律师。
对照实跑:
• "开工前先定两件事 + 确认立场":用户一句话里全交代了------在职、刚被通知裁员、没签协议(身份与阶段),有合同和工资流水(材料),自己是被裁的一方(立场),所以它没有追问。第 1 步思考里专门点出那份技能"是站在用人单位角度的。用户是劳动者",就是立场意识。
• 第 1 条"逐条标注":这次没给合同原文,没触发。
• 第 2 条"依据名称与条文要点":第 36、40、46、47、87 条都和"适用情形"一起出现,不是光秃秃一个条号;封顶线和平均工资是先联网查的。
• 第 3 条"完整算式 + 假设条件":每个金额都配算式;注明基数是 12 个月平均应发工资、含奖金津贴加班费,就是在列假设。唯一用户没给的当地平均工资,它去查了,并判断出用哪个年度的数字都不影响结论。
• 第 4 条"升级顺序":答案第四节就是"留证 → 协商 → 投诉 → 仲裁",仲裁那步有时效、审限和材料清单。
• 第 5 条"结尾固定提示":有,还按个案补了一句:10 万元以上的争议,签署任何文件前先咨询执业律师。
写高风险领域人设的经验:写清楚什么时候该停。 这份人设里有三个"停"------立场不清不往下走、法条拿不准先去查、数字没有就标"待确认"------外加一个固定出口(结尾提示)。模型最容易犯的错不是不会答,而是在不该答满的地方答满了;把"停"的条件写成规则,比写"请谨慎"有用得多。
3.3 calculate:算式题为什么不进沙箱
经济补偿是典型的"算式题":公式法定、输入就几个数,难点在判断用哪条公式,不在算术。平台给这类题的工具是 calculate,说明只有一行:
if tools_cfg.get("calculate", True):
specs.append({"name": "calculate", "desc": "计算数学表达式 (加减乘除/幂/取余)",
"args": '{"expression": "(120-80)/80*100"}'})
第三篇讲过,提示词第 5 层工具段里,只要 python_execute 或 calculate 在场就会拼进这一句:
(103, ("python_execute", "calculate"),
"数据类结论 (统计、汇总、换算、财务算式) 必须算出来, 不心算不估算: 用 python_execute 跑 pandas / numpy 并 print 结果, "
"单个算式用 calculate; 算不出来就说算不出来。数字数、字数这种不用工具。"),
分工写得很清楚:统计、表格、批量换算走 Python 沙箱;单个算式用 calculate 。拼接规则是"列出的工具有一个在场就整段拼进去",所以法律专家看到的也是这一整句;经济补偿这种"一个算式出一个数"的题,它按后半句选了 calculate。
为什么单个算式不进沙箱? 看实现就明白了。calculate 不起容器,就在 API 进程里用 AST 白名单求值:
def _safe_calc(expr: str) -> str:
"""AST 白名单四则/幂/取余计算器 --- 不用 eval 裸跑用户/LLM 给的表达式。"""
expr = (expr or "").strip()
if not expr or len(expr) > 200:
raise ValueError("表达式为空或过长")
node = ast.parse(expr, mode="eval")
allowed = (ast.Expression, ast.BinOp, ast.UnaryOp, ast.Constant,
ast.Add, ast.Sub, ast.Mult, ast.Div, ast.FloorDiv, ast.Mod,
ast.Pow, ast.USub, ast.UAdd, ast.Tuple)
for n in ast.walk(node):
if not isinstance(n, allowed):
raise ValueError(f"不支持的语法: {type(n).__name__}")
if isinstance(n, ast.Constant) and not isinstance(n.value, (int, float)):
raise ValueError("仅支持数字")
# 防大整数撑爆 CPU: 幂的指数必须是 ≤64 的字面量常量。9**9**9 右结合 →
# 外层指数是 BinOp(9**9), 若只拦"常量>64"会漏过并真的去算天文数字 (实测
# 单核 100% 假死), 所以非常量指数一律拒绝。
if isinstance(n, ast.BinOp) and isinstance(n.op, ast.Pow):
if not (isinstance(n.right, ast.Constant) and abs(n.right.value) <= 64):
raise ValueError("指数必须是不超过 64 的数字")
val = eval(compile(node, "<calc>", "eval"), {"__builtins__": {}}, {}) # noqa: S307
return f"{expr} = {val}"
安全靠三层:
-
先解析、再白名单。 语法树上只允许数字常量、四则、整除、取余、幂、正负号;函数调用、属性访问、变量名一律拒绝,
__import__('os')这类东西过不了白名单。 -
防"合法但算不完"的表达式。
9**9**9全是数字和幂,白名单拦不住。注释里写着实测:外层指数是一个BinOp,只拦"常量大于 64"会漏过去,结果单核 100% 假死。所以幂的指数必须是不超过 64 的字面量。 -
eval时清空内置函数,表达式限长 200 字符。
求值失败抛的 ValueError 由工具执行器统一接住,变成"工具 calculate 执行失败: 不支持的语法: ..."加一段重试须知回给模型,不会打断整轮。
反观 Python 沙箱:每次调用都起一个全新的断网容器(第三篇 3.3 节),默认超时 20 秒、并发有上限,而且 python_execute 在按次计费的工具名单(_BILLABLE_TOOLS)里,calculate 不在。为了一个 15000 * 3.5 起一个容器,是用大炮打蚊子。
和法律场景很合拍的一点:返回值是"表达式 = 结果"(如 15000*4.5 = 67500.0),原样出现在过程区里,用户能对一遍------正是人设第 3 条"给出完整算式与结果"要的。
这一轮的三次调用是:第 1 步 15000 * 3.5(拿到初步的 N),第 3 步核实完封顶线后再算 15000*3.5 和 15000*4.5。答案三行表里 N 和 N+1 两个金额,都能在过程区里找到对应的那一行。因为 calculate 不计次收费、也不起容器,模型边查边算、查完再复核一遍,几乎没有额外成本------工具越便宜,"数字必须算出来"这条规则就越容易被守住。
3.4 边界怎么写:人设管领域,平台管底线
人设里有四条"边界"规则:立场确认、不替用户填数字、绝不编造法条编号、结尾固定提示。它们和平台层是什么关系?先看平台层。思考模式下,每位专家的系统提示里都有一段共同规则,第一条是:
"- **结论只来自查到的事实和拿到的材料**。没查到就说没查到; 数字、来源、法条、事件, 一个都不许编。"
"**网址也不许猜**: 要看某个网站, 先搜到它的真实地址再打开 / 截图, 别按名字拼域名; 搜到的页面是不是对方的官网, 看页面内容, 不看域名像不像。\n"
"法条"两个字是写在平台层的------旅行专家、会计专家、医疗专家都受这句约束。加上两段工具段(3.3、3.5 节)和澄清用的 ask_user 工具,把这几层摊开:
| 约束 | 写在哪 |
|---|---|
| 数字、来源、法条、事件不许编;网址不许猜 | 平台共同规则(所有专家) |
| 搜索摘要不算读过,引用时给链接 | 平台工具段(open_url 在场时) |
| 数据类结论必须算出来 | 平台工具段(计算工具在场时) |
| 答案会改变做法时先问一句 | 平台工具 ask_user(有人在看的对话) |
| 先确认立场,不确认不往下走 | 法律专家人设 |
| 没给的数字标「待确认」,不替用户填 | 法律专家人设 |
| 拿不准或可能有新规时先联网核实法条 | 法律专家人设 |
| 结尾固定提示"不构成正式法律意见" | 法律专家人设 |
分工的原则是:平台层只放"对所有领域都成立"的底线,人设放这个领域特有的"怎么才算做对"。 逐条看人设里那四条为什么要单独写:
① 立场确认。 劳动争议是对抗性的:同一句"裁员怎么给补偿",HR 问和员工问,正确答案的方向相反。技能库里就同时存在两种视角------第 1 步思考里差点加载的那份「用人单位劳动合规」技能,自己的"何时用 / 不用"里写着:"不用: 劳动者个人维权诉讼策略(视角相反)"。
人设那句"不确认不往下走",在平台上对应的动作是 ask_user:
"desc": ("向用户提一个澄清问题并等待回答 (最多 60 秒)。只在**答案会改变"
"你接下来的做法**时用: 关键口径二选一、缺少必要信息、方案分叉需要"
"用户拍板。不要用它确认无关紧要的细节, 不要连续多问, 全程最多 2 次。"
"options 给 2-4 个供点选的候选 (用户也可自由输入)。"),
"立场二选一"正是"答案会改变做法"的典型:平台层管"什么时候值得问、最多问几次",人设管"在这个领域,立场就是值得问的那件事"。
② 不替用户填数字。 补偿公式是确定的,输入却很敏感:工龄差几个月,N 可能从 3.5 变成 4;工资按应发还是实发,基数就不一样。模型替用户"合理假设"一个数,得到的是精确但错误的金额,而用户会拿着它去谈判。标"待确认"并说明它怎样改变结果,等于把缺失信息变成一句敏感性说明。
③ 绝不编造法条编号。 平台层已经写了"法条不许编",人设再写一遍,是补上平台层给不了的范围 (试用期上限、加班费倍数、经济补偿这些地方性、年度性强的标准)和动作(拿不准先联网核实)。编出来的条号比不写更糟------用户会拿去和 HR 对质。
④ 结尾固定提示。 平台的共同规则里没有免责声明:它是领域性的,放进共同规则,旅行专家排行程也得挂一句"不构成法律意见"。写成"固定提示"而不是"适当提醒",是为了让它每次都在;这一轮模型在固定那句之后按个案补了一句(10 万元以上的争议、签字前先咨询律师)------固定的部分保底,补充的部分贴近个案。
3.5 open_url:搜索摘要不算读过
法律问题对"原文"的依赖比大多数领域都重:一个地方口径、一个判例的裁判理由,搜索摘要里往往只有半句。open_url 的工具说明把这件事说得很重:
specs.append({"name": "open_url",
"desc": "打开网页读取正文。**url 可以是一个链接, 也可以是最多 5 个链接的数组 --- "
...
"⚠️ 搜索结果只给标题和几百字摘要, **不足以支撑事实陈述、数字引用或判断结论** --- "
"要写进产出的关键事实 (金额/时间/当事方/因果), 必须打开原文核实过再写; "
...
"多搜少读 = 罗列一堆标题却没有洞察, 是最差的产出形态。"
提示词第 5 层的工具段再补一句做法:
(101, ("open_url",),
"搜索摘要不算读过。open_url 一次并行打开 3-5 个最相关的页, 作者、日期、规格、原文都在正文里。页面空 (只剩导航) 就换下一条命中接着读; "
"相关命中没读完不许下「查不到」的结论。引用时给链接。"),
为什么摘要不够:搜索结果交给模型时,每条命中只带标题、链接和前 400 字(r['content'][:400])。400 字够判断"这页值不值得读",不够支撑"金额 / 时间 / 当事方 / 因果"。
几个上限(以代码为准):
| 项 | 值 | 出处 |
|---|---|---|
| 一次并行打开 | 最多 5 个链接 | MAX_PARALLEL_URLS = 5 |
| 单页一次读 | 6 万字 | PAGE_WINDOW_CHARS = 60_000 |
| 并行时每页 | 总预算 24000 字按页数均分,每页不少于 3000 字 | per = max(3000, (OBSERVATION_LONG_CHARS - 1000) // len(urls)) |
| 续读缓存 | 15 分钟、最多 12 页 | _PAGE_CACHE_TTL = 900.0 |
这一轮第 2 步并行开了 2 页,每页的额度就是 (24000 − 1000) ÷ 2 = 11500 字。
长页续读。 单页读不完时,观察末尾会明说"这页还有 N 字没读",并写好带 offset 的下一次调用。这是事故逼出来的:原先超出上限的部分被静默砍掉,模型就当读全了。续读从缓存里切,不算调研次数("那是同一次阅读的下半截, 不是又查了一次"),也不重复计费。
读页管线。 一个链接从打开到交给模型,走的是 page_reader.read_url:
async def read_url(url: str, http, cap: int) -> dict:
"""完整读页管线: (飞书文档走专门读法) → 直抓 → 体检 → (被拦/失败时) 住宅代理重试 → 体检。
...
• 直抓:浏览器同款请求头,手动跟随重定向,每一跳都过 SSRF 检查(原先只查第一跳,公网链接 302 到内网会被照抓)。
• 抽正文:bs4 + lxml 做 readability 式主内容定位,剔除导航、页脚、侧栏,输出带小节、列表、表格行的结构化文本。
• 体检 :diagnose 识别 404、被拦(403 / 429 / 503 或"安全检测""拖动滑块"这类验证页)、JS 渲染空壳、无正文。绝不把验证页当正文喂给模型。
• 重试与兜底:失败时换出口重试一次(JS 渲染页除外),再不行走第三方读页兜底,都失败就回一句类型化的失败说明。
反爬、验证页、前端渲染,网页读不到并不罕见。这条管线的取舍是:能救就自动救(换出口、换读页服务),救不回来就让模型拿到一句明确的"未取到正文"和原因,由它决定换哪一页或换个角度再搜------而不是拿一页验证码当原文去写答案。
调研次数也有预算:单专家一轮里搜索和读页每调一次记一次,到 12 次提醒"资料一般够写了",到 20 次不再执行(开了「深度调研」翻倍)。这一轮只用了 3 次。
3.6 参考文献:只挂正文真引用了的
答案末尾那个折叠的「参考文献 · 5」不是模型写的,是交付层 _deliver_references 追加的,注释写得很直白:"用真实链接程序化追加 (不靠 LLM 复述 URL, 保证准确)"。模型复述 URL 容易抄错字符,甚至编一个看起来合理的链接;平台另一条"单独成文"路径的提示词里也写着"不要自己写「参考文献」小节 (系统会用真实链接自动附在末尾)"。
来源从哪来。 _collect_sources 从工具记录里抽:真读到正文的页排最前,然后是和搜索词有足够重叠的命中("与查询八竿子打不着 (歌词站 / 同名偶像页)"的跳过),上限 25 条。打开失败的页不算"读过"。
挂哪几条。 关键在 _cited_refs:
def _cited_refs(answer: str, sources: list, fallback: int = 5) -> list:
"""参考文献只挂正文真引用了的 ([n]), 保留原编号 (2026-09-24 验收「资料链接太多」: 小红书一篇笔记底下挂 17 条,
近一半是歌词站)。正文一个编号都没引时: 正文自带来源行 (技能版式「📎资料参考:...」) 就不再挂第二份清单 ------
否则「复制全文」连清单一起带走, 可复制的笔记里多出一截链接; 没带就挂前 fallback 条 (_collect_sources 已把读过的排在前面)。
返回 [(编号, 来源), ...], 可能为空。"""
nums = sorted({int(n) for grp in _CITE_RE.findall(answer or "") for n in re.split(r"\s*[,,、]\s*", grp)
if 1 <= int(n) <= len(sources)})
if nums:
return [(n, sources[n - 1]) for n in nums]
if _OWN_SOURCES_RE.search(answer or ""):
return []
return list(enumerate(sources[:fallback], 1))
三档:
-
正文有
[n]编号 ([3]、[1][3]、[1, 3]、[1、3]都认):只挂这几条,保留原编号,和正文对得上。 -
没有编号,但正文自带来源行(如小红书技能的"📎资料参考:..."):不再挂第二份。
-
都没有:挂前 5 条,读过的排在前面。
最后由 _refs_block 按回复语言出标题(中文、日文是"参考文献",其余是 References;幻灯片则是 deck 最后一页"参考来源")。各端客户端认这两个标题、把整节折叠,所以长图底部只是一行「参考文献 · 5」。
这一轮的答案是模型直接写成的,正文没有用编号标注,走的是第 3 档:排第 1 的是这一轮真正读过正文的那页律师问答,后面是和查询词对得上的搜索命中(经济补偿基数、应发工资口径之类)。如果你自己建一位法律类专家、希望每条依据都精确对号,可以在人设里加一句"关键法条与判例后用 编号 标注来源",参考文献就会只列正文用到的那几条。
3.7 这一轮花了多少
| 项 | 数值 |
|---|---|
| 耗时 | 100 秒 |
| 模型调用 | 6 次 |
| 工具调用 | 6 次(2 次联网搜索、1 次读取网页、3 次计算器) |
| tokens | 65,176,其中 25,088 命中缓存 |
| 计费 | 约 8.3 积分 |
六次工具里三次是计算器,不按次计费;花销主要在搜索和读页带进上下文的资料,以及思考模式下每步重发的上下文(三成多命中了前缀缓存)。和第九篇销售专家(约 1.1 积分)比贵在"查",和第三篇数据专家(约 10.5 积分)比省在"算"------单个算式不用起沙箱。
四、你也可以:在 App 里一句话创建自己的专家
口袋专家AI正在筹备专家合伙人计划,支持用户贡献自己精调过的专家,产生收益后,用户将获得分成。让我们一起将口袋中的专家越做越好。
法律专家管的是劳动法。如果你常碰的是别的纠纷,比如租房,可以建一位专属的:
-
打开「专家广场」,点顶部的「新建专家」卡片
-
用一句话描述,比如"专门处理租房纠纷:押金不退、提前退租、中介费,站在租客一方给依据和行动步骤"
-
服务端一次生成名字、人设提示词、能力标签、开场示例和头像
-
预览没问题就「开始对话」
"站在租客一方"这半句值得写上------对抗性的领域,立场是人设里最要紧的一句。生成的人设可以随时在设置页改,比如照着法律专家补上"没给的数字标待确认"和结尾提示;它和官方专家跑同一条流水线,联网搜索、读网页、计算器一样不少。
五、总结
本篇以法律专家为例,拆了一位"高风险领域"智能体是怎么构建的:
• 应用上,它把通用助手"顺着问法算、标准可能过时、不分立场"的毛病反过来:用户问 N+1,它先说"+1 不是裁员的标配",再把 N / N+1 / 2N 连同条文和算式列成表;封顶线先查再用;行动建议从"什么都别签"开始,按留证、协商、投诉、仲裁排好顺序。用之前记得先问清公司依据的是哪一条解除路径。
• 技术上 ,一位法律类专家 = 一份写清"什么时候该停"的人设 + 平台层"法条、数字、来源不许编"的底线 + 两个工具和一道交付规则:calculate 用 AST 白名单在进程内求值,返回"表达式 = 结果",算式可核对;open_url 并行最多 5 页、单页 6 万字、长页带 offset 续读,识别验证页和空壳页,读不到就如实说;参考文献由交付层用真实链接追加,正文标了 [n] 只挂引用过的,没标就挂"读过的在前"的前 5 条。
