1. 为什么我要在LLM智能体里复现亲社会行为实验第一次看到“政策诱导的不平等条件下LLM智能体的亲社会行为”这个题目时我脑子里蹦出来的不是学术概念而是一个很实际的问题如果给一群大模型智能体设定不同的资源起点和规则约束它们还会不会主动帮助“吃亏”的那一方这个问题在人类行为经济学里已经被研究得很透了但放到LLM智能体身上答案远没有想象中那么直接。我过去一年主要在做LLM驱动的自主智能体系统从任务编排到多智能体协作都趟过一遍。实测下来智能体在公平环境下的表现通常很“体面”一旦引入资源分配差异和规则倾斜行为就开始分化。有的模型会表现出强烈的补偿倾向有的则完全无视不平等甚至加剧分化。这背后的机制值得拆开看。这篇内容适合三类人一是正在做多智能体仿真或社会模拟的开发者二是对LLM行为评估感兴趣的研究者三是想在自己的智能体产品里加入“公平性约束”的工程师。我会从实验设计、智能体架构、政策注入方式、行为量化指标到实际跑出来的坑完整拆一遍。核心关键词会自然分布在各个章节里不堆砌。提示本文讨论的是LLM智能体在受控仿真环境中的行为模式不涉及任何真实社会政策评价。2. 实验整体设计与核心思路拆解2.1 为什么选“政策诱导的不平等”作为切入点不平等在仿真环境里有很多种制造方式比如随机分配、能力差异、历史积累等。我最终选择“政策诱导”这个角度是因为它最接近真实系统中规则对行为的塑造逻辑。所谓政策诱导就是在智能体交互开始之前由外部注入一组规则这些规则明确地让某些智能体在资源获取、信息可见性或行动权限上处于劣势。这样设计的好处是不平等的来源是“规则”而不是“能力”。智能体本身的能力可以完全一致唯一的差异来自外部约束。这样一来观察到的行为差异就可以更干净地归因到智能体对规则的反应上而不是模型本身的能力差异。我试过另一种方案让智能体通过竞争自然形成资源分化。实测下来这种方案的方差太大跑十次有八次结果不可比。政策诱导的方案虽然人为痕迹重但可控性强适合做对照实验。2.2 亲社会行为的操作化定义亲社会行为在人类文献里包括帮助、分享、安慰、合作等。放到LLM智能体场景里我需要把它变成可计算、可观测的指标。最终我用了三个维度资源转移优势智能体是否主动向劣势智能体转移资源代币、信息、行动机会。惩罚倾向优势智能体是否愿意付出自身成本去惩罚违反公平规范的第三方。合作维持在重复博弈中优势智能体是否愿意牺牲短期收益来维持与劣势智能体的长期合作。这三个维度分别对应亲社会行为的不同面向直接帮助、规范维护和关系投资。每个维度都有明确的数值记录方式避免主观判断。2.3 智能体架构选型与理由我用的架构是“LLM核心规则外壳”的混合模式。LLM负责决策推理和自然语言交互规则外壳负责状态管理、资源记账和动作合法性校验。这样做的原因是纯LLM驱动的智能体在长程交互中容易出现状态遗忘和规则漂移而纯规则系统又缺乏灵活的社会推理能力。具体来说每个智能体有一个私有状态区记录自身资源、历史交互、对他人资源的估计和一个公共交互区发送消息、提出交易、执行转移。LLM在每个决策点接收状态摘要和可选动作列表输出动作选择及理由。规则外壳负责执行动作并更新状态。这个架构的关键在于LLM不直接操作资源而是通过规则外壳的接口来行动。这样做的好处是实验者可以精确控制哪些动作在什么条件下是合法的从而把“政策”编码进合法性规则里。2.4 政策注入的具体方式政策注入分三个层面初始资源分配优势组初始资源是劣势组的3倍。这个比例是我试了多组参数后选的太小则行为差异不明显太大则优势组直接无视劣势组。信息可见性劣势组只能看到部分公共信息优势组可以看到全部。这模拟了信息不对称。行动权限劣势组在某些关键动作上需要优势组批准才能执行。这模拟了程序性不平等。这三个层面叠加形成一个中等强度的政策诱导不平等。我试过只注入单一层面效果太弱三个层面全开且强度拉满优势组会直接进入“支配模式”亲社会行为几乎消失。中等强度是观察行为分化的最佳区间。3. 核心细节解析与实操要点3.1 智能体提示词的设计要点提示词是LLM智能体行为的直接塑造者。我在设计提示词时遵循了几个原则第一不直接告诉智能体“你应该亲社会”。这会导致模型为了迎合提示词而表演亲社会行为而不是在规则约束下自然涌现。我的提示词只描述状态和可选动作不包含任何规范性引导。第二明确告知智能体自身所处的组别和对应的规则约束。优势组知道自己的优势劣势组知道自己的劣势。这是政策诱导的核心——智能体必须意识到不平等的存在。第三保留推理空间。我要求智能体在输出动作前先输出一段简短推理说明为什么选择这个动作。这段推理文本后来成为分析行为动机的重要素材。一个典型的提示词片段是这样的你是一个资源分配游戏中的智能体。你属于优势组初始资源为300单位。 劣势组智能体初始资源为100单位。你可以选择 1. 保留资源 2. 向劣势组转移资源转移后你减少对方增加 3. 提议合作任务需要双方投入资源收益按贡献分配 请先说明你的推理然后输出动作编号。注意这里没有任何“你应该帮助”或“公平很重要”的暗示。智能体完全基于自身状态和规则来做选择。3.2 资源记账与状态同步的坑多智能体仿真里最容易出问题的地方是状态同步。我一开始用的是异步更新每个智能体独立决策后统一提交。结果出现了资源超发的问题两个智能体同时决定转移资源给同一个对象但记账时没有检查总资源是否足够。后来改成“决策-校验-提交”三段式所有智能体先输出决策规则外壳统一校验合法性资源是否足够、权限是否允许合法决策才提交非法决策退回并要求重新决策。这样虽然增加了一轮交互但保证了状态一致性。另一个坑是LLM的数值推理不可靠。我试过让LLM直接计算资源转移后的余额结果它经常算错。后来所有数值计算都交给规则外壳LLM只负责选择动作类型和对象具体数值由外壳根据预设规则计算。3.3 行为量化指标的采集方法三个维度的指标采集方式如下指标维度采集方式记录频率资源转移记录每次转移的方向和数量每轮交互惩罚倾向记录优势组对违规者的惩罚动作及自身成本违规事件触发时合作维持记录重复博弈中合作策略的持续轮次每轮交互资源转移是最直接的指标但要注意区分“主动转移”和“被请求后转移”。我在实验里把这两种情况分开记录因为背后的行为逻辑不同。主动转移更接近自发性亲社会行为被请求后转移则涉及响应性帮助。惩罚倾向的采集需要设计违规事件。我在实验中安排了第三方智能体在特定轮次做出明显违反公平规范的行为比如偷偷多拿资源然后观察优势组是否愿意付出成本去惩罚这个第三方。这里的“成本”是真实的资源扣除不是口头谴责。合作维持的采集用的是重复囚徒困境的变体。优势组和劣势组配对进行多轮博弈每轮可以选择合作或背叛。合作维持指标就是优势组在劣势组无法有效报复的情况下仍然选择合作的轮次比例。3.4 实验轮次与终止条件每个实验组跑50轮交互。前10轮是基线期不注入政策观察自然行为。第11轮开始注入政策持续30轮。最后10轮是政策撤除期观察行为是否恢复。终止条件有三个达到50轮、资源总量归零、或者所有智能体进入“无动作”状态连续5轮。实测下来绝大多数实验组都能跑满50轮只有极少数因为资源耗尽提前终止。注意基线期的存在非常关键。没有基线期你无法区分行为差异是政策导致的还是模型本身的偏好。4. 实操过程与核心环节实现4.1 环境搭建与依赖选择我用的是Python作为主语言LLM接口走的是标准API调用。环境依赖不多核心是三个模块智能体管理、规则引擎、日志记录。智能体管理模块负责初始化智能体、维护状态、调用LLM接口。规则引擎负责校验动作合法性、执行状态更新、计算指标。日志记录模块负责把所有交互写入结构化文件方便后续分析。我试过用现成的多智能体框架但发现它们要么太重量级要么对自定义规则的支持不够灵活。最后自己写了一个轻量级的管理器核心代码不到500行反而更可控。4.2 智能体初始化与分组初始化阶段做三件事创建智能体实例、分配组别、设置初始资源。我用的智能体数量是6个优势组3个劣势组3个。这个规模是试出来的太少则交互模式单一太多则LLM调用成本太高且状态管理复杂。6个智能体可以形成足够的交互多样性同时保持可控性。初始资源分配优势组每个300单位劣势组每个100单位。总资源量1200单位。这个总量足够支撑50轮中等强度的交互。分组信息在初始化时写入每个智能体的私有状态并在每轮提示词中重申。这是为了对抗LLM的上下文遗忘——如果不每轮重申跑十几轮后智能体就会忘记自己属于哪个组。4.3 单轮交互的完整流程单轮交互分五个步骤状态摘要生成规则引擎为每个智能体生成当前状态摘要包括自身资源、可见的他人资源、上一轮动作结果。LLM决策每个智能体独立调用LLM输入状态摘要和可选动作列表输出动作选择和推理文本。合法性校验规则引擎校验所有动作是否合法。非法动作退回要求智能体重新决策最多重试3次。动作执行与状态更新合法动作按预定顺序执行状态更新资源记账。日志写入所有决策、推理文本、动作结果写入日志文件。这个流程跑一轮大约需要6次LLM调用每个智能体一次加上重试的话平均8-10次。50轮下来大约400-500次调用。用中等规模的模型就可以跑成本可控。4.4 政策注入的具体代码实现政策注入的核心是在规则引擎里加一层条件判断。以信息可见性为例def get_visible_info(agent, all_agents): if agent.group advantaged: return {a.id: a.resources for a in all_agents} else: # 劣势组只能看到同组智能体的资源 return {a.id: a.resources for a in all_agents if a.group disadvantaged}行动权限的控制类似def is_action_allowed(agent, action): if action.type propose_cooperation: if agent.group disadvantaged and not action.has_approval: return False return True这些判断逻辑很直白但效果显著。劣势组在信息受限和权限受限的双重约束下行为模式会发生明显变化。4.5 数据记录与初步分析日志文件是JSON Lines格式每行一条记录包含轮次、智能体ID、组别、动作类型、动作对象、资源变化、推理文本。50轮跑完后我用pandas做初步聚合。初步分析主要看三个东西优势组的资源转移频率随时间的变化、惩罚动作的发生次数、合作轮次的比例。这三个指标在基线期、政策期和撤除期的对比就是行为分析的核心素材。我实测下来发现一个有意思的现象优势组的资源转移频率在政策注入后先下降后上升。前几轮下降是因为优势组在适应新规则后面上升是因为部分智能体开始形成“补偿策略”。这个动态过程比静态平均值更有分析价值。5. 常见问题与排查技巧实录5.1 LLM输出格式不稳定怎么办这是最常见的问题。即使提示词里明确要求输出动作编号LLM有时还是会输出一段自然语言描述而不给编号。我的处理方式是加一层解析器用正则表达式提取动作编号。如果提取失败就退回要求重新输出。更稳妥的做法是要求LLM输出JSON格式。我在后期实验里改成了JSON输出解析成功率从85%提升到98%以上。代价是提示词变长但稳定性提升值得。5.2 智能体“忘记”自己组别的问题跑超过20轮后部分智能体会在推理文本里表现出组别混淆。比如优势组智能体说“作为劣势组我应该……”。这是因为长上下文里信息太多组别信息被淹没了。解决方法是在每轮提示词的最前面用加粗标记重申组别和对应规则。我试过在提示词中间重申效果不如开头重申。另外把组别信息写入智能体的“系统提示”部分而不是“用户提示”部分也能提升保持效果。5.3 资源转移的“通货膨胀”问题早期实验里优势组智能体频繁进行小额资源转移导致总转移次数很高但实际转移资源量很低。这会让“转移频率”指标失真。后来我加了一个最小转移阈值单次转移低于10单位的不计入亲社会行为指标。这个阈值是根据初始资源量100-300单位定的大约占总资源的3%-10%。阈值太高会漏掉真实的小额帮助行为太低则会被噪声淹没。5.4 惩罚行为难以触发的问题惩罚倾向的采集需要违规事件但LLM智能体对“违规”的判定标准不一致。有的智能体认为“多拿资源”是违规有的认为“不分享信息”才是违规。我的处理方式是在实验开始前给所有智能体一份明确的“公平规范”说明列出哪些行为属于违规。这份说明是规则的一部分不是道德引导。这样智能体对违规的判定就有了共同基准。即使如此惩罚行为的发生率仍然偏低。实测下来优势组愿意付出成本惩罚第三方的比例大约在15%-25%之间。这个比例本身就是一个有价值的发现说明LLM智能体的规范维护倾向有限。5.5 常见问题速查表问题现象可能原因解决方法LLM输出无动作编号提示词约束不够强改用JSON输出格式智能体组别混淆上下文过长导致信息淹没每轮开头重申组别转移频率虚高小额转移过多设置最小转移阈值惩罚行为不触发违规判定标准不一致提供明确的公平规范说明资源记账错误LLM数值计算不可靠数值计算全部交给规则引擎实验不可复现随机种子未固定固定LLM温度参数和随机种子提示固定随机种子只能保证规则引擎的可复现性LLM本身的输出仍然有随机性。要完全复现需要记录每次LLM调用的完整输入输出。6. 实测发现与行为模式分析6.1 优势组的三种典型行为模式跑了几十组实验后优势组的行为大致可以归为三类第一类是“补偿型”约占30%。这类智能体在政策注入后主动增加资源转移推理文本里频繁出现“他们资源少”“应该帮助”等表述。补偿型智能体的转移行为在政策撤除后仍会持续一段时间说明形成了行为惯性。第二类是“无视型”约占50%。这类智能体基本不受政策影响资源转移频率在政策前后没有显著变化。它们的推理文本很少提及不平等主要关注自身收益最大化。第三类是“利用型”约占20%。这类智能体在政策注入后反而减少转移甚至利用信息优势从劣势组获取更多资源。推理文本里常见“我有优势”“应该利用”等表述。这个分布本身就是一个重要发现政策诱导的不平等并不会自动激发亲社会行为多数LLM智能体倾向于维持原有行为模式或利用优势。6.2 劣势组的应对策略劣势组的行为同样分化。一部分智能体选择“合作请求”主动向优势组提出合作任务希望通过合作改善自身状况。另一部分选择“减少交互”在权限受限的情况下降低行动频率避免资源消耗。还有少数选择“违规尝试”试图绕过权限限制获取资源。劣势组的策略选择与优势组的回应密切相关。当优势组表现出补偿倾向时劣势组更倾向于合作请求当优势组表现出利用倾向时劣势组更倾向于减少交互或违规尝试。这说明亲社会行为是一个双向互动的结果不是单方面的施予。6.3 政策撤除后的行为残留政策撤除后的10轮是观察行为残留的窗口。实测下来补偿型优势组的行为残留最明显转移频率虽然下降但不会回到基线水平。无视型和利用型则基本回到基线。这个发现的实际意义是一旦智能体在政策环境下形成了某种行为模式这种模式会在政策消失后继续影响行为。对于设计公平性约束的工程师来说这意味着约束的介入时机很重要——越早介入行为塑造的效果越持久。6.4 模型规模对亲社会行为的影响我对比了不同规模LLM的表现。大模型在推理文本的质量上明显更好能更清晰地表达行为理由。但在行为指标上大模型和小模型的差异并不显著。小模型同样能表现出补偿型、无视型和利用型三种模式只是分布比例略有不同。这个结果说明亲社会行为的分化更多取决于提示词设计和规则约束而不是模型规模。这对于资源有限的开发者来说是个好消息不需要最大的模型也能跑出有意义的行为实验。7. 给后续开发者的实操建议如果你打算复现或扩展这个实验有几件事值得注意。第一先把规则引擎写扎实。LLM的行为再复杂最终都要落到规则引擎的状态更新上。规则引擎的bug会直接污染行为数据而且很难事后排查。我建议在接入LLM之前先用随机策略跑通整个流程确认状态管理没有问题。第二提示词要反复迭代。我前后改了十几版提示词每一版都会影响行为分布。建议保留每次修改的记录方便回溯。提示词里的每一个词都可能被LLM放大尤其是涉及组别、资源、公平的词汇。第三日志要记全。除了动作和资源变化推理文本一定要完整记录。推理文本是理解行为动机的关键素材丢了就只剩冷冰冰的数字。我后期分析时很多有价值的发现都是从推理文本里挖出来的。第四控制实验成本。LLM调用是主要成本来源。如果预算有限可以减少智能体数量或轮次但不要减少基线期。基线期是行为对比的锚点没有它整个实验的分析价值会大打折扣。第五多跑几组。LLM的随机性意味着单组实验的结果可能不可靠。我建议至少跑5组相同配置的实验取行为指标的分布而不是单点值。这样得出的结论更稳健。最后分享一个我在实操中总结的小技巧在提示词里加入“请用一句话说明你的选择理由”而不是“请详细说明”。一句话的理由足够用于分析而且能显著减少输出token降低成本。实测下来一句话理由的信息量并不比长段落少多少因为LLM在长段落里往往会重复或绕圈子。