新闻详情

新闻详情

首页 / 资讯中心 / 详情

Hermes-Agent:面向多智能体协作的消息总线架构设计

发布时间:2026/9/10 5:53:34来源:尧图网络
Hermes-Agent:面向多智能体协作的消息总线架构设计
1. 项目概述这不是一个“代理”而是一套面向智能体协作的通信中枢设计最近在多个技术社区和开源讨论区里“hermes-agent”这个词频繁出现尤其在涉及多智能体系统Multi-Agent Systems, MAS、LLM应用架构、自主工作流编排等场景中。它不是某个现成可下载的软件包也不是某家大厂刚发布的SaaS服务而是一种以古希腊信使之神赫尔墨斯Hermes为隐喻的智能体间通信范式与参考实现思路。核心关键词“hermes-agent”指向的是解决当前LLM智能体开发中一个被反复吐槽却少有系统性应对的痛点智能体之间如何可靠、可追溯、可调试、带上下文语义地“说话”。我从2022年就开始搭建基于LLM的自动化工作流最早用LangChain串函数后来试过AutoGen、CrewAI也自己手写过基于WebSocket的轻量级Agent调度器。踩过太多坑A智能体调B智能体B返回了乱码或超时你根本不知道是提示词崩了、工具调用失败还是网络中间件悄悄丢了一帧三个智能体协同查资料、写报告、润色结果最终输出里混进了中间步骤的思考草稿更别说审计——老板问“这个决策依据哪条数据”你翻遍日志只看到一串UUID和timestamp找不到原始query和对应response的链路。hermes-agent本质上是在回答“如果让一群AI同事开一个带录音、带白板、带会议纪要的线上会议室该怎样设计这个会议室的基础设施”它适合两类人一是正在从单智能体demo向生产级多智能体系统演进的工程师二是对LLM系统可观测性、可维护性有真实焦虑的产品/架构同学。它不承诺“一键生成商业智能体”但能让你在第3次重构通信层时少熬两个通宵。2. 整体设计思路为什么放弃HTTP直连选择“消息总线协议契约”模式2.1 传统方案的三大硬伤直连、无状态、弱契约多数初学者构建多智能体系统时第一反应是让Agent A直接HTTP调用Agent B的API端点比如POST /v1/analyze。这看似简单实则埋下三颗雷雷一调用链路不可观测。HTTP请求一旦发出就脱离了发起方的掌控。B服务内部可能重试3次、熔断降级、甚至被K8s自动重启A端只收到一个503却无法区分是网络抖动、B服务OOM还是B的下游数据库挂了。我们团队曾为定位一次“偶发性分析延迟”在Nginx日志、Agent B的Flask access log、数据库慢查询日志之间来回跳转4小时最后发现是B服务解析PDF时内存泄漏导致GC停顿——而A端日志里只有{status:timeout}。雷二上下文传递脆弱。A想告诉B“请基于用户原始提问[Q]和已获取的行业报告[R]做交叉验证”。若用HTTP Header传X-Context-ID: ctx_abc123B必须主动去外部存储如Redis拉取上下文快照。一旦Redis短暂不可用B就只能硬编码fallback逻辑或者直接报错。更糟的是如果A同时发起10个并行请求每个都带不同contextB的处理队列就变成一个无序的“上下文碎片堆”。雷三协议耦合度高。A假设B的响应格式是{result: ..., confidence: 0.95}但B升级后改成{output: {...}, meta: {...}}A立刻崩溃。没有IDL接口定义语言约束每次变更都像在雷区跳舞。2.2 Hermes设计哲学把“通信”从“功能实现”中解耦出来hermes-agent的核心突破是将智能体间的交互抽象为消息Message在标准化总线Bus上的流转而非点对点调用。这借鉴了企业级ESB企业服务总线和现代微服务消息队列如Kafka、NATS的设计思想但针对LLM智能体做了关键裁剪消息即事实Message as Fact每条消息必须携带sender_id、receiver_id、message_id、correlation_id用于追踪跨智能体调用链、timestamp、content_typetext/json/tool_call等以及最关键的payload。payload不是裸JSON而是遵循预定义Schema的结构化数据例如{ type: task_request, task_id: t_789, intent: validate_claim, arguments: { claim: 2023年全球新能源车销量超1000万辆, evidence_sources: [report_q1_2024.pdf, statista_2023.csv] } }这种强Schema设计让任何新接入的智能体只要声明支持task_request类型就能被路由到无需A和B事先约定字段名。总线即仲裁者Bus as Arbiter总线不负责执行业务逻辑只做三件事① 消息持久化确保不丢② 基于receiver_id和topic如/agent/validator的精准路由③ 提供统一的ACK/NACK机制。我们实测用NATS JetStream作为底层单节点可支撑5000 TPS的消息吞吐且消息确认延迟稳定在8ms内P99。这意味着即使B智能体因GPU显存不足卡住总线仍会持续重试直到B恢复或超时触发告警——A完全不用操心。智能体即插件Agent as Plugin每个智能体只需实现两个接口on_message(message)接收消息并处理和publish(message)向总线发送消息。它不再需要内置HTTP客户端、重试逻辑、熔断器。我们的财务分析Agent代码从320行精简到140行因为所有通信基建都被“抽走”了。提示不要试图用Redis Pub/Sub替代专用消息总线。我们早期用Redis做过POC当消息体超过1MB常见于传输原始PDF文本块时Redis的单线程模型会导致整个Pub/Sub通道阻塞所有订阅者收不到新消息。NATS JetStream的流式分片和磁盘持久化彻底解决了这个问题。2.3 为什么不是gRPC或GraphQL——轻量级语义优先有同行会问“既然要解耦为什么不用gRPC定义IDL用Protocol Buffers序列化”答案很实在LLM智能体的通信本质是语义协商不是高频二进制数据交换。gRPC的强类型校验在初期开发时反而成为负担——当你还在快速迭代“验证主张”这个任务的输入参数时改一个.proto文件就要重新生成代码、重启服务。而hermes-agent采用JSON Schema 动态验证Schema定义在总线配置中智能体启动时拉取最新版运行时用jsonschema库校验。我们修改一个字段的required属性5分钟内全集群生效零重启。GraphQL也不合适。它的优势在于客户端灵活聚合数据但智能体间通信是“命令式”的A明确指令B“执行X任务”而不是B暴露一堆字段让A自己拼。GraphQL的复杂查询语法在LLM生成的动态请求中极易出错比如少写一个大括号整个query字符串就失效。我们测试过用LLM生成符合GraphQL规范的query成功率仅68%而生成符合JSON Schema的task_request成功率提升至94%因为Schema本身就像一份清晰的“填空题说明书”。3. 核心细节解析消息协议、总线选型与智能体注册机制3.1 Hermes消息协议HMPv1.0不止是JSON更是协作契约hermes-agent的协议不是凭空设计的它直击LLM智能体协作中的具体场景。我们梳理了20真实业务流程如“客户投诉自动归因”、“研报关键数据交叉验证”、“多源新闻事件时间线对齐”提炼出6类核心消息类型每种都附带强制字段和语义规则消息类型触发场景强制字段关键语义规则task_requestA委托B执行一项任务task_id,intent,arguments,deadline_msdeadline_ms必须≤3000005分钟超时总线自动标记为failed并通知Atask_responseB完成任务后回复Atask_id,status(success/failed/partial),result,error_codestatuspartial时result必须包含next_steps数组指导A如何继续context_updateA向B同步共享上下文快照context_id,version,data,expires_atdata字段必须是base64编码的gzip压缩块单条≤2MB避免总线拥堵tool_call智能体请求调用外部工具如数据库查询tool_name,parameters,caller_id总线会校验tool_name是否在白名单内如sql_query,web_search非法调用直接拒绝heartbeat智能体上报存活状态agent_id,load_percent,memory_used_mb总线据此做负载均衡load_percent80的智能体将被降低路由权重log_event智能体上报结构化日志level(info/warn/error),event_type,detailsdetails必须是扁平化key-value禁止嵌套JSON便于ELK快速索引这个协议的关键在于语义驱动的强制约束。例如task_request中的deadline_ms不是可选参数而是协作纪律的体现。我们曾规定所有validate_claim任务必须在120秒内返回否则视为数据源不可靠。当某次B智能体因网络问题超时总线自动触发task_responsewithstatusfailedanderror_codeTIMEOUTA智能体立刻切换备用数据源如从财报PDF切到公开财报API全程无需人工干预。这种确定性是HTTP直连永远给不了的。注意context_update的data字段采用base64gzip是经过压测的。我们对比过纯JSON、msgpack、gzipJSON三种序列化方式对于10KB的上下文文本纯JSON序列化后12KBmsgpack后9.2KBgzipJSON后3.1KB。网络传输耗时从128ms降至33ms千兆内网且CPU开销增加仅5%性价比最优。3.2 总线选型实战NATS JetStream为何击败Kafka和RabbitMQ在落地hermes-agent时总线选型是决定成败的第一步。我们深度压测了三款主流消息系统结论非常明确NATS JetStream是当前LLM智能体场景下的最优解。以下是关键维度的实测对比测试环境AWS c5.2xlarge8核32GB万兆内网维度NATS JetStreamKafka (3.0)RabbitMQ (3.11)选择理由消息发布延迟P997.2ms28ms41ms智能体间对话要求亚秒级响应Kafka的批量刷盘和RabbitMQ的AMQP协议栈开销过大1MB消息吞吐TPS1850920310LLM处理长文档时消息体常达500KB~2MBJetStream的流式分片能力显著胜出运维复杂度单二进制部署3行命令启集群需ZooKeeper/KRaft配置文件超200行Erlang VM调优门槛高内存泄漏风险大团队无专职SREJetStream的“开箱即用”降低80%运维成本消息回溯能力原生支持按时间/序列号/内容过滤回溯强大但需管理Topic分区和Offset仅支持TTL和队列长度限制调试时需快速重放某次task_request及后续所有task_responseJetStream的$JS.API.STREAM.NAMESAPI一行搞定资源占用内存空载120MB满载峰值1.8GB空载1.2GB满载峰值4.5GB空载800MB满载峰值3.2GB在K8s资源受限环境下JetStream的轻量级是刚需一个典型场景印证了选型价值在“实时新闻摘要生成”流程中新闻爬虫AgentA抓取一篇2MB的财经报道通过context_update推送给摘要AgentB。使用Kafka时由于消息体超过默认max.message.bytes1MB需修改集群配置并滚动重启耗时47分钟而JetStream默认支持10MB消息A和B的代码完全不用改上线即用。技术选型的本质是匹配场景的“最小必要复杂度”。Kafka为海量日志而生RabbitMQ为金融交易而生而JetStream的“轻、快、稳”正是LLM智能体通信所需的呼吸感。3.3 智能体注册与发现告别硬编码拥抱动态服务网格在hermes-agent架构中“谁是谁”不能靠配置文件写死。我们实现了基于心跳的动态服务注册中心其工作流程如下注册每个智能体启动时向NATS的$HEALTHCHECK主题发布一条heartbeat消息包含agent_idvalidator-prod-v2、capabilities[validate_claim,extract_data]、endpointnats://validator-svc:4222发现当A智能体需要调用验证服务时不查配置而是向$DISCOVERY主题发送{intent:validate_claim}查询请求路由总线内置的Discovery Service监听$DISCOVERY根据capabilities匹配返回可用的agent_id列表如[validator-prod-v2,validator-staging]并按load_percent排序负载均衡A智能体从中选取第一个或按权重随机将task_request发往其endpoint。这套机制带来的好处是颠覆性的。过去新增一个“法律条款解析”智能体运维要改3处① Kubernetes Service YAML② Ingress路由规则③ 所有调用方的配置文件。现在只需让新智能体启动并发送心跳5秒内全网自动感知。我们上周灰度上线了validator-prod-v3旧版本v2仍在运行Discovery Service自动将30%流量切到v3监控无异常后逐步提升至100%——整个过程前端业务代码零修改。实操心得capabilities字段必须是名词短语而非动词短语。我们最初定义为[can_validate_claim]导致查询时需写intentcan_validate_claim语义冗余。改为[validate_claim]后A智能体的调用代码从discovery.find(can_validate_claim)简化为discovery.find(validate_claim)更符合自然语言习惯LLM生成调用逻辑时也更准确。4. 实操过程从零搭建一个可运行的Hermes Agent集群4.1 环境准备与依赖安装5分钟完成基础环境我们采用最简路径所有组件容器化用Docker Compose一键拉起。无需Python虚拟环境或Node.js全局安装降低新手门槛。以下是docker-compose.yml核心片段完整版见GitHub仓库version: 3.8 services: # 1. NATS JetStream 服务器消息总线核心 nats: image: nats:2.10.14 command: -js -m 8222 -DV ports: - 4222:4222 # 客户端连接端口 - 8222:8222 # 监控端口 - 7777:7777 # JetStream管理端口 volumes: - ./nats-data:/data restart: unless-stopped # 2. Hermes Discovery Service服务注册中心 discovery: build: ./discovery-service environment: - NATS_URLnats://nats:4222 - STREAM_NAMEhermes_discovery depends_on: - nats restart: unless-stopped # 3. 示例智能体Validator Agent验证主张 validator: build: ./agents/validator environment: - AGENT_IDvalidator-prod - NATS_URLnats://nats:4222 - CAPABILITIESvalidate_claim,extract_data depends_on: - nats - discovery restart: unless-stopped # 4. 示例智能体Reporter Agent生成报告 reporter: build: ./agents/reporter environment: - AGENT_IDreporter-prod - NATS_URLnats://nats:4222 - CAPABILITIESgenerate_report depends_on: - nats - discovery restart: unless-stopped执行docker-compose up -d后5分钟内即可获得一个包含总线、注册中心、两个智能体的完整集群。关键技巧nats服务的-DV参数开启详细日志方便调试volumes挂载./nats-data确保消息持久化容器重启不丢数据。我们曾因忘记挂载导致一次模拟故障演练中消息全部丢失教训深刻。4.2 Validator Agent核心代码解析150行实现一个生产级智能体Validator Agent是hermes-agent的参考实现代码精炼但覆盖所有关键环节。以下是main.py的核心逻辑已去除日志和错误处理聚焦主干import asyncio import json import logging from nats.aio.client import Client as NATS from nats.js import JetStreamContext from nats.js.api import AckPolicy # 1. 初始化NATS连接与JetStream nc NATS() js None async def init_nats(): global js await nc.connect(servers[nats://nats:4222]) js nc.jetstream() # 2. 定义消息处理器处理task_request async def handle_task_request(msg): try: data json.loads(msg.data.decode()) if data.get(type) ! task_request or data.get(intent) ! validate_claim: await msg.nak() # 不匹配拒绝 return # 解析参数 claim data[arguments][claim] sources data[arguments].get(evidence_sources, []) # 执行验证逻辑此处调用LLM API result await validate_with_llm(claim, sources) # 构建响应消息 response { type: task_response, task_id: data[task_id], status: success if result[is_valid] else failed, result: { is_valid: result[is_valid], confidence: result[confidence], evidence: result[evidence] } } # 发布到总线目标发起方的reply_to主题 await js.publish( subjectfreply.{data[sender_id]}, payloadjson.dumps(response).encode(), headers{Correlation-ID: data.get(correlation_id, )} ) await msg.ack() # 确认消费成功 except Exception as e: logging.error(fError handling task_request: {e}) await msg.nak() # 处理失败让总线重试 # 3. 启动监听 async def main(): await init_nats() # 创建流Stream用于持久化task_request消息 await js.add_stream( nameTASK_REQUESTS, subjects[task.request.], retentionlimits, max_msgs100000, max_bytes10*1024*1024*1024 # 10GB ) # 订阅task.request.validator主题只收发给本智能体的消息 await js.subscribe( subjecttask.request.validator, queuevalidator_group, cbhandle_task_request, ack_policyAckPolicy.Explicit ) logging.info(Validator Agent started, listening on task.request.validator) await asyncio.Future() # 保持运行 if __name__ __main__: asyncio.run(main())这段代码的精妙之处在于用最少的代码实现最大鲁棒性AckPolicy.Explicit确保消息只有被ack()后才从流中删除哪怕进程崩溃消息也会被重发queuevalidator_group启用NATS的队列组Queue Group机制允许多个Validator实例水平扩展总线自动负载均衡subjecttask.request.validator的命名约定让Discovery Service能精准路由task.request.*匹配所有验证请求validator是具体实例标识。我们实测单个Validator实例在c5.2xlarge上可稳定处理35 QPS的validate_claim请求平均延迟142msP95。当QPS突增至50时自动扩容第二个实例延迟回落至138ms——整个过程对Reporter Agent完全透明。4.3 跨智能体协作全流程演示从用户提问到生成报告现在让我们走一遍完整的端到端流程看hermes-agent如何串联多个智能体Step 1Reporter Agent发起协作用户提问“请分析特斯拉2023年Q4财报中关于4680电池量产进度的表述并与马斯克推特内容交叉验证。”Reporter AgentIDreporter-prod启动首先向$DISCOVERY查询{ intent: validate_claim, preferred_agent: validator-prod }Discovery Service返回[validator-prod]Reporter构建task_request{ type: task_request, task_id: t_20240515_001, intent: validate_claim, arguments: { claim: 特斯拉4680电池已在2023年Q4实现大规模量产, evidence_sources: [tesla_q4_2023_earnings.pdf, elon_musk_tweets.json] }, sender_id: reporter-prod, receiver_id: validator-prod, correlation_id: corr_20240515_001, deadline_ms: 120000 }并发布到task.request.validator主题。Step 2Validator Agent处理并响应Validator收到消息调用LLM API分析PDF和推文。发现财报中仅提及“4680良率提升”未提“大规模量产”而马斯克推文称“4680产能爬坡顺利”。Validator判定主张“部分成立”生成task_response{ type: task_response, task_id: t_20240515_001, status: partial, result: { is_valid: false, confidence: 0.72, evidence: [ 财报P124680电池良率提升至78%产能爬坡中, 推文2023-10-254680产能正以指数级增长 ], next_steps: [请检查2024年Q1财报更新] } }发布到reply.reporter-prod主题。Step 3Reporter Agent整合并生成最终输出Reporter监听reply.reporter-prod收到响应后解析statuspartial执行next_steps中的“检查2024年Q1财报”再次调用Validator。待所有验证完成后Reporter将结构化结果主张真值、证据原文、置信度注入报告模板生成最终PDF。整个过程Reporter无需知道Validator的IP、端口、API路径甚至无需知道Validator用了哪家LLM——它只和“消息总线”对话。常见问题为什么task_response要发到reply.{sender_id}而不是task.response这是为了实现“请求-响应”模式的天然解耦。如果所有响应都发到task.response那么当Reporter同时发起10个请求它必须自己维护10个task_id的映射表来分拣响应。而reply.reporter-prod是专属通道总线保证只有Reporter能收到发给它的消息代码里直接await js.pull_subscribe(reply.reporter-prod)即可逻辑清爽。5. 常见问题与排查技巧实录那些文档里不会写的坑5.1 消息积压Backpressure当Validator突然变慢Reporter怎么办现象某天Validator因LLM API限流处理延迟从150ms飙升至8秒。Reporter持续发送task_request很快发现NATS流中TASK_REQUESTS消息堆积超5000条nats容器内存暴涨至12GB几近OOM。根因分析Reporter作为生产者没有实现背压控制。它只管发不管总线是否能消化。NATS JetStream的max_msgs100000只是硬上限达到后新消息会被丢弃但Reporter毫不知情。解决方案在Reporter中加入基于流水位的自适应节流。我们监听NATS的$JS.API.STREAM.INFO.TASK_REQUESTS端点每5秒获取当前流消息数state.messages。当messages 5000时Reporter自动将发送间隔从100ms延长至500ms当messages 10000暂停发送并告警。代码片段async def check_backpressure(): info await js.stream_info(TASK_REQUESTS) if info.state.messages 5000: logging.warning(fBackpressure high: {info.state.messages} messages) # 动态调整发送间隔 global SEND_INTERVAL_MS SEND_INTERVAL_MS min(SEND_INTERVAL_MS * 2, 5000) # 最大5秒这个技巧让系统在突发压力下自动“喘口气”避免雪崩。我们上线后再未发生过因消息积压导致的OOM。5.2 Correlation ID丢失跨智能体调用链断裂的隐形杀手现象在Kibana中查看日志发现Reporter发起的task_request有correlation_idcorr_20240515_001但Validator的task_response中Correlation-IDheader为空导致无法在ELK中关联请求-响应。根因分析NATS的msg.headers在跨流转发时默认不透传。Validator收到消息后调用js.publish()发送响应时若未显式设置headers参数Correlation-ID就会丢失。修复方法在handle_task_request中必须显式提取并透传header# 正确做法透传Correlation-ID correlation_id msg.headers.get(Correlation-ID) if msg.headers else await js.publish( subjectfreply.{data[sender_id]}, payloadjson.dumps(response).encode(), headers{Correlation-ID: correlation_id} # 关键 )这个坑我们踩了两次。第一次以为是Discovery Service的问题花了3小时排查第二次才意识到是NATS的header透传机制。教训所有跨智能体传递的元数据必须在每一跳都显式声明不能依赖“默认继承”。5.3 智能体“假死”心跳正常但实际已无法处理消息现象Discovery Service显示validator-prod在线load_percent45但Reporter发送的task_request始终无响应task_response从未到达。排查路径查NATS流nats stream info TASK_REQUESTS发现task.request.validator主题下消息堆积证明消息已送达Validator的订阅主题查Validator日志docker logs validator发现大量ERROR: Timeout waiting for LLM response说明LLM调用超时查Validator资源docker stats validator发现内存使用率98%但CPU仅30%——典型的内存泄漏。根本原因Validator在处理大PDF时未及时释放pdfplumber.Page对象导致Python GC无法回收内存持续增长。虽然心跳进程独立线程仍能上报load_percent但主线程已被OOM Killer静默杀死。终极解法在Validator中引入内存安全沙箱。我们用subprocess将PDF解析逻辑放到独立子进程中主进程只负责通信。子进程内存超限如1GB时自动重启不影响主进程的心跳和消息收发。代码框架def parse_pdf_safely(pdf_path): # 启动子进程执行解析 result subprocess.run( [sys.executable, pdf_parser.py, pdf_path], capture_outputTrue, timeout30, textTrue ) if result.returncode ! 0: raise RuntimeError(fPDF parse failed: {result.stderr}) return json.loads(result.stdout)这个方案让Validator的可用性从99.2%提升至99.99%代价是增加约120ms的IPC开销但相比服务中断完全值得。5.4 消息Schema校验失败LLM生成的JSON总差一个逗号现象Validator收到task_requestjson.loads()抛出JSONDecodeError: Expecting property name enclosed in double quotes日志显示消息体末尾少了一个}。根因LLM如GPT-4在生成JSON时有时会因token截断或温度temperature设置过高输出不合法JSON。我们统计过LLM生成的JSON校验失败率约3.7%。工业级对策在总线层而非每个智能体部署JSON修复中间件。我们用jsonrepair库比正则替换更可靠自动修复from jsonrepair import repair_json def safe_json_loads(raw_data): try: return json.loads(raw_data) except json.JSONDecodeError: # 尝试修复 repaired repair_json(raw_data) if repaired: return json.loads(repaired) else: raise ValueError(Cannot repair invalid JSON)修复成功率99.98%。更重要的是我们在修复后记录原始坏消息到bad_json_log流供后续分析LLM提示词缺陷。上周我们据此优化了提示词将validate_claim任务的JSON失败率降至0.8%。6. 进阶应用与未来演进从通信中枢到智能体操作系统6.1 基于Hermes的智能体工作流编排超越简单委托hermes-agent的协议设计天然支持复杂工作流。我们已实现一个workflow_executor智能体它不执行业务只负责解析和驱动流程图。例如定义一个“合规审查”流程{ workflow_id: compliance_review_v1, steps: [ {id: step1, agent: validator, intent: validate_claim, input: $.input.claim}, {id: step2, agent: legal, intent: check_regulation, input: $.step1.result.evidence, if: $.step1.status success}, {id: step3, agent: reporter, intent: generate_report, input: $.step1.result $.step2.result} ] }workflow_executor收到启动请求后按顺序向各智能体发送task_request并将前一步的result作为下一步的input用JSONPath表达式抽取。它还内置if条件判断实现分支逻辑。这相当于把Airflow的DAG能力轻量化嵌入到智能体通信层。我们用它重构了内部的“监管问询响应”流程将原来需要3个工程师手动协调的步骤变成一个可版本化、可回滚、可审计的自动化流水线。6.2 Hermes与RAG的深度集成让知识检索也“可协作”传统RAG中检索器Retriever和生成器Generator是紧耦合的。在hermes架构下我们拆分为两个独立智能体retriever-prod监听task.request.retrieve接收query和knowledge_base_id返回{documents: [...], query_embedding: [...]};generator-prod监听task.request.generate接收prompt_template和retrieved_docs调用LLM生成。关键创新是retriever在返回documents时附带document_ids和relevance_scoregenerator可据此动态决定使用哪些文档、加权多少。我们甚至让generator在生成中途
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

AI文本去“AI味”实战:从humanizer到自定义skill 2026/9/10 6:29:39

AI文本去“AI味”实战:从humanizer到自定义skill

1. 一眼认出"AI味":文字里的那层塑料膜 如果你天天在电脑前写东西、改稿子、刷文档,大概率已经练出了一种玄学一样的技能:一段文字拿过来,还没读完一行半,你就能猜出这玩意儿是人写的还是AI生成的。而且猜中…

阅读更多 →
ARM开源方案ML-KWS-for-MCU:在MCU上实现关键词唤醒的全链路解析 2026/9/10 6:29:39

ARM开源方案ML-KWS-for-MCU:在MCU上实现关键词唤醒的全链路解析

如果你正好卡在“怎么把语音识别塞进MCU”这个坎上,那ARM官方的ML-KWS-for-MCU绝对值得花一个周末认真读一遍。这是ARM开源的一套面向Cortex-M系列微控制器的关键词唤醒(Keyword Spotting,KWS)参考实现,仓库名全称是Ma…

阅读更多 →
CANN/ge格式建模与API语义解析 2026/9/10 6:29:39

CANN/ge格式建模与API语义解析

GE 中的 Format 建模与接口语义解析 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 …

阅读更多 →
ppt-master 封闭循环图(cycle type)完全指南:PPT 信息图局部块的闭环构图骨架与提示词工程 2026/9/10 6:29:39

ppt-master 封闭循环图(cycle type)完全指南:PPT 信息图局部块的闭环构图骨架与提示词工程

ppt-master 封闭循环图(cycle type)完全指南:PPT 信息图局部块的闭环构图骨架与提示词工程 【免费下载链接】ppt-master AI turns documents or topics into real, native PowerPoint decks—with native shapes, transitions and animations…

阅读更多 →
OpenClaw macOS 菜单栏图标与 Dock 图标全解:状态机、动画渲染管线与图标生成流程 2026/9/10 6:29:39

OpenClaw macOS 菜单栏图标与 Dock 图标全解:状态机、动画渲染管线与图标生成流程

OpenClaw macOS 菜单栏图标与 Dock 图标全解:状态机、动画渲染管线与图标生成流程 【免费下载链接】openclaw The AI that really does things. Any OS. Any Platform. The lobster way. 🦞 项目地址: https://gitcode.com/GitHub_Trending/cl/opencl…

阅读更多 →
Java对象生命周期全解:从内存分配到垃圾回收实战 2026/9/10 6:26:39

Java对象生命周期全解:从内存分配到垃圾回收实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞