LangChain RAG实战:从文档加载到检索增强生成的完整指南
1. 从“开卷考试”到“闭卷考试”的困境如果你用过早期的ChatGPT或者尝试过直接向一个通用大语言模型提问一些非常具体、专业的问题你大概率会得到一些听起来头头是道但仔细一查全是胡编乱造的答案。比如你问它“我们公司2023年第三季度的销售额是多少”它可能会煞有介事地给你编一个数字。这种现象在业内被称为“幻觉”Hallucination。大模型就像一个记忆力超群但知识库截止于某个时间点的“学霸”你让它做“闭卷考试”它只能基于训练时学到的、可能已经过时的、且不包含你私有数据的信息来“自由发挥”结果自然不可靠。那么如何让这位“学霸”在回答问题时能参考我们指定的、最新的、私有的资料呢答案就是让它“开卷考试”。这就是RAGRetrieval-Augmented Generation检索增强生成的核心思想。简单来说RAG在生成答案前会先从你的知识库比如公司文档、产品手册、最新新闻中检索出相关的信息片段然后把问题和这些信息片段一起交给大模型让它基于这些“参考资料”来组织答案。这样生成的回答不仅准确性高还能引用具体出处极大地提升了可信度和实用性。而LangChain作为当前最流行的大模型应用开发框架其设计哲学就是将这些复杂的流程检索、增强、生成模块化、链条化。在LangChain的语境下实现一个RAG应用本质上就是搭建一个清晰、可定制的工作流水线。今天我们就来深入这条流水线的每一个环节看看LangChain是如何让RAG从概念落地为实际可用的应用的。2. RAG流水线的核心四步与LangChain的模块化实现一个标准的RAG流程可以抽象为四个核心步骤文档加载、文本分割、向量化存储与检索、增强生成。LangChain为每一步都提供了丰富、灵活的组件我们可以像搭积木一样组合它们。2.1 第一步文档加载——从多元数据源到统一文本任何知识库的构建都始于原始数据。这些数据可能散落在各处本地PDF、Word文档、公司Confluence页面、网站、数据库甚至是音频视频文件。LangChain通过Document Loaders模块来解决这个问题。它的价值在于提供了一个统一的接口无论数据源是什么最终都输出为LangChain定义的Document对象通常包含page_content文本和metadata元数据。关键选择与实操通用加载器对于本地文件UnstructuredFileLoader是个瑞士军刀它能处理多种格式PDF, PPT, Word, HTML等。使用时需要额外安装unstructured包及其依赖如pandoc,libmagic。pip install unstructured专用加载器对于特定源使用专用加载器效率更高。例如WebBaseLoader用于抓取网页文本NotionDirectoryLoader用于导出后的Notion数据。元数据的重要性在加载时尽可能保留或添加元数据如来源文件名、页码、标题、创建日期。这在后续检索和生成答案引用时至关重要。例如加载PDF时好的加载器会将每一页作为一个Document并在元数据中记录页码。注意网络内容加载涉及合规性务必确保你有权抓取和使用目标网站的内容。对于企业内部系统可能需要定制加载器或使用API。2.2 第二步文本分割——将长文档切成可消化的“知识块”大模型有上下文长度限制如GPT-4通常是128K但实际使用时我们不会塞满直接塞入整本书籍是不现实的。我们需要将长文档分割成大小适中的“块”Chunks。这里面的学问很大分割的好坏直接影响检索质量。核心策略与LangChain实现LangChain提供了多种Text Splitters核心思想是在尽量保持语义完整性的地方进行切割。递归字符分割器RecursiveCharacterTextSplitter这是最常用、最稳健的分割器。它采用一个优先级列表例如[\n\n, \n, , ]来递归地尝试分割文本。它会尽量按照段落、句子、单词的边界来切分直到块的大小符合要求。这种方式对大多数格式良好的文本如Markdown、普通文档效果很好。from langchain.text_splitter import RecursiveCharacterTextSplitter text_splitter RecursiveCharacterTextSplitter( chunk_size500, # 每个块的最大字符数 chunk_overlap50, # 块与块之间的重叠字符数防止上下文断裂 separators[\n\n, \n, 。, , , , ] # 中文可调整分隔符 ) docs text_splitter.split_documents(documents) # documents是上一步加载的Document列表按标记分割TokenTextSplitter更精确的方式是按大模型本身的标记Token数来分割因为模型的理解和计费单位是Token。这需要配合具体的模型如tiktokenfor OpenAI使用。from langchain.text_splitter import TokenTextSplitter text_splitter TokenTextSplitter(chunk_size1000, chunk_overlap100)语义分割器实验性更高级的做法是尝试在语义边界处切割例如使用NLP句子检测器。但这更复杂且依赖于特定语言模型。经验之谈chunk_size是门艺术太小如100会丢失上下文检索出碎片信息太大如2000可能包含无关噪声且浪费上下文窗口。通常500-1500是个不错的起点需要根据你的文档类型技术文档、小说、对话记录和后续使用的模型上下文长度来调整。chunk_overlap必不可少重叠部分确保了关键信息尤其是那些恰好在边界的概念不会因为被切断而丢失提高了检索的连贯性。一般设置为chunk_size的10%-20%。分割后务必检查随机打印几个分割后的块看看是否在完整的句子或段落处结束语义是否独立。糟糕的分割是后续检索效果差的常见元凶。2.3 第三步向量化存储与检索——构建“记忆”并快速“回忆”这是RAG的“检索”部分的核心。我们需要将上一步得到的文本块转换为计算机能快速比对的形式——向量Embedding并存入一个支持快速相似性搜索的数据库向量数据库。1. 向量化EmbeddingEmbedding模型将一段文本映射为一个高维空间中的向量一组数字。语义相近的文本其向量在空间中的距离通常用余弦相似度衡量也更近。LangChain通过Embeddings模块抽象了不同厂商的Embedding模型调用。OpenAI Embeddings质量高稳定但需付费且可能涉及数据出境。from langchain.embeddings import OpenAIEmbeddings embeddings OpenAIEmbeddings(modeltext-embedding-3-small)开源Embeddings如HuggingFaceEmbeddings可以本地部署数据隐私性好但需要自己管理模型和计算资源。对于中文BAAI/bge-large-zh等模型是不错的选择。from langchain.embeddings import HuggingFaceEmbeddings embeddings HuggingFaceEmbeddings(model_nameBAAI/bge-large-zh)2. 向量存储Vector Stores存储向量并提供相似性搜索接口的数据库。LangChain集成了数十种向量数据库如Chroma轻量易用、Pinecone全托管高性能、Weaviate功能丰富、Qdrant等。以本地运行的Chroma为例from langchain.vectorstores import Chroma # 创建并持久化向量库 vectorstore Chroma.from_documents( documentsdocs, # 分割后的文本块 embeddingembeddings, # 使用的Embedding模型 persist_directory./chroma_db # 本地存储路径 ) # 之后加载 # vectorstore Chroma(persist_directory./chroma_db, embedding_functionembeddings)3. 检索器RetrieversVectorstore本身就是一个检索器。但LangChain的Retriever抽象允许我们实现更复杂的检索逻辑而不仅仅是简单的向量相似度搜索。最大边际相关性MMR在保证相关性的同时增加检索结果的多样性避免返回多个高度相似的冗余片段。retriever vectorstore.as_retriever(search_typemmr, search_kwargs{k: 6})自查询Self-Query让LLM根据用户问题自动解析出查询语句和过滤条件基于元数据。例如用户问“去年发布的关于安全的产品手册”LLM会解析出“查询产品手册 安全”、“过滤发布日期包含2023”。这需要元数据定义清晰。上下文压缩Contextual Compression先检索出较多的文档然后用一个更小的LLM来筛选或总结这些文档只将最精华的部分传递给最终的生成LLM。这可以节省上下文窗口并提升输入质量。多向量检索针对包含文本和表格的文档可以分别对摘要和表格内容进行Embedding和检索再合并结果。避坑指南Embedding模型一致性存储和检索时必须使用同一个Embedding模型否则向量空间不一致检索结果毫无意义。元数据过滤的威力在构建向量库时充分利用Document的metadata。在检索时可以通过search_kwargs进行过滤如{filter: {source: 产品手册.pdf}}能极大提升精准度。K值的选择search_kwargs{k: 4}中的k表示返回多少个相关块。太小可能信息不全太大可能引入噪声并占用过多上下文。通常4-8是一个平衡点。2.4 第四步增强生成——将“参考资料”转化为“最终答案”检索到相关文档块后我们需要将它们和原始问题一起构造成一个清晰的提示Prompt交给大语言模型LLM来生成最终答案。这就是“增强”的过程。核心构造Prompt模板LangChain的PromptTemplate让我们能灵活设计提示词的结构。一个典型的RAG提示词模板如下from langchain.prompts import PromptTemplate template 请根据以下上下文信息来回答问题。如果你不知道答案就说不知道不要编造答案。 上下文信息 {context} 问题{question} 请给出答案 prompt PromptTemplate.from_template(template)组装链条LCEL的魅力LangChain Expression Language (LCEL) 让整个流程的组装变得异常清晰和灵活。一个基础的RAG链如下from langchain.chat_models import ChatOpenAI from langchain.schema.runnable import RunnablePassthrough llm ChatOpenAI(modelgpt-4-turbo-preview) # 定义处理函数将问题传给检索器获取上下文 def format_docs(docs): return \n\n.join([d.page_content for d in docs]) # 组装链 rag_chain ( {context: retriever | format_docs, question: RunnablePassthrough()} | prompt | llm ) # 运行链 answer rag_chain.invoke(我们公司的主要产品是什么) print(answer.content)高级增强技巧引用溯源在提示词中要求模型在答案中注明引用的来源如文档名和页码。这需要在format_docs函数中将元数据信息也一并拼接进去。重排序Re-ranking向量检索是“粗排”返回的Top-K个结果可能不完全按相关性排序。可以引入一个专门的重排序模型如Cohere的rerank或开源的BGE reranker对检索结果进行精排将最相关的1-2个放在前面再送给LLM。HyDE假设性文档嵌入先让LLM根据问题生成一个“假设的答案”文档然后用这个假设文档的向量去检索真实文档。这种方法有时能更好地捕捉查询意图。3. 超越基础应对复杂场景与性能优化当基础RAG跑通后我们会遇到更复杂的现实需求。3.1 处理超长文档与复杂问题对于一本书或一份长篇报告简单分割检索可能无法回答需要综合多个远距离章节信息的问题。父文档检索器先按较小粒度分割子块但在存储时保留对更大父块如整个章节的引用。检索时先找到相关的子块然后返回其对应的父块作为上下文提供了更完整的背景信息。图检索如果文档内部有强烈的结构关系如知识图谱可以将实体和关系抽取出来构建图。检索时既可以用向量检索文本也可以用图查询来获取关联实体结合两者信息进行生成。迭代检索/递归检索先检索一次得到初步答案或关键词然后用这个中间结果构造新的查询进行二次、三次检索像滚雪球一样收集信息。LangChain的MultiQueryRetriever和RetrievalQA链的某些配置可以实现类似思想。3.2 检索效果的评估与迭代RAG系统不是一蹴而就的需要持续评估和调优。评估主要集中在两个层面检索质量给定一个问题检索到的文档块是否相关可以用人工标注也可以用LLM作为裁判LLM-as-a-judge让一个更强的LLM如GPT-4来判断检索结果与问题的相关性。生成质量最终答案是否准确、全面、符合要求同样可以人工评估或用LLM裁判。关键指标命中率在前K个检索结果中至少包含一个能回答问题所需信息的文档块的比例。平均精度衡量检索结果排序的好坏。答案忠实度答案是否严格基于提供的上下文没有幻觉。答案相关性答案是否直接回答了问题。调优杠杆分割策略调整chunk_size和chunk_overlap尝试不同的分割器。Embedding模型换用更强大的或领域适配的Embedding模型。检索策略尝试MMR、重排序、元数据过滤等。提示工程优化Prompt模板明确指令。3.3 生产环境部署的考量异步处理文档加载、分割、向量化尤其是调用API都是耗时操作。使用asyncio或LangChain的异步接口来提升处理吞吐量。增量更新知识库需要更新。简单的做法是重建整个向量库但效率低。更好的方式是支持增量添加和删除。许多向量库如Chroma, Pinecone支持add_documents和delete操作。关键是要有一个唯一ID来标识每个文档块以便管理。缓存对频繁出现的相似查询可以缓存Embedding结果甚至最终答案以降低成本和延迟。LangChain集成了多种缓存后端如InMemoryCache, RedisCache。监控与日志记录每一次查询的检索结果、使用的Token数、生成时间、用户反馈等用于分析和优化。4. 一个完整的端到端示例搭建一个产品FAQ问答机器人让我们将所有知识串联起来构建一个简单的应用基于公司产品手册的FAQ机器人。步骤1环境准备与文档加载import os from langchain.document_loaders import DirectoryLoader, UnstructuredFileLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.chat_models import ChatOpenAI from langchain.prompts import PromptTemplate from langchain.schema.runnable import RunnablePassthrough # 假设产品手册PDF放在 ./docs 目录下 loader DirectoryLoader(./docs, glob**/*.pdf, loader_clsUnstructuredFileLoader) raw_documents loader.load() print(f加载了 {len(raw_documents)} 个文档)步骤2文本分割与添加元数据# 增强元数据例如添加文件名 for doc in raw_documents: doc.metadata[source] os.path.basename(doc.metadata.get(source, unknown)) text_splitter RecursiveCharacterTextSplitter( chunk_size1000, chunk_overlap200, separators[\n\n, \n, 。, , , , ] ) documents text_splitter.split_documents(raw_documents) print(f分割为 {len(documents)} 个文本块)步骤3创建向量存储embeddings OpenAIEmbeddings() vectorstore Chroma.from_documents( documentsdocuments, embeddingembeddings, persist_directory./product_handbook_db ) retriever vectorstore.as_retriever( search_typemmr, # 使用MMR增加多样性 search_kwargs{k: 4, fetch_k: 10} # 最终返回4个从最相似的10个中挑选 )步骤4定义提示与链llm ChatOpenAI(modelgpt-4-turbo-preview, temperature0) template 你是一个专业的产品支持助手。请严格根据以下提供的产品手册上下文信息来回答用户问题。保持答案简洁、准确。 如果上下文中的信息不足以回答问题请直接说“根据现有资料我无法回答这个问题”。不要编造任何信息。 上下文信息 {context} 用户问题{question} 专业回答 prompt PromptTemplate.from_template(template) def format_docs(docs): formatted [] for i, doc in enumerate(docs): formatted.append(f[资料片段 {i1}, 来源{doc.metadata.get(source, N/A)}]\n{doc.page_content}) return \n\n---\n\n.join(formatted) rag_chain ( {context: retriever | format_docs, question: RunnablePassthrough()} | prompt | llm )步骤5查询与测试question 产品X的最大支持并发用户数是多少 result rag_chain.invoke(question) print(result.content) # 输出可能类似 # 根据产品手册产品X在标准配置下最大支持10,000个并发用户。如需更高并发请联系销售咨询企业版方案。 # [资料片段 1, 来源产品X技术白皮书.pdf] # ... (具体上下文文本)通过这个流程我们就把静态的产品手册变成了一个可以交互问答的智能助手。整个系统的效果高度依赖于我们前面讨论的每一个环节的质量文档是否清晰、分割是否合理、Embedding是否精准、检索策略是否聪明以及Prompt是否明确。RAG不是魔法而是一项扎实的工程。它通过将外部知识系统性地、可解释地注入大模型巧妙地弥补了其内在的局限性。LangChain则提供了实现这一蓝图的标准化工具箱。理解每个模块的作用并根据自己的数据特性和业务需求进行精心调优是构建一个高效、可靠RAG应用的关键。在实际项目中你可能需要花费80%的时间在数据预处理、Embedding选型和检索策略调优上而最后的生成链条往往是最直观的那一部分。

相关新闻

100行Python代码,搭一个能干活的AI Agent

100行Python代码,搭一个能干活的AI Agent

100行Python代码,搭一个能干活的AI Agent 原文首发于:点这里查看 跟大模型聊天人人都会,但你有没有想过——为什么ChatGPT能帮你订餐、查航班、写代码,而你调用API只会一问一答? 差别就两个字:Agent 。 大模…

2026/8/15 8:51:09 阅读更多 →
数学建模论文写作指南:从结构框架到核心模块的完整解析

数学建模论文写作指南:从结构框架到核心模块的完整解析

1. 项目概述:一份让数学建模“小白”也能上手的论文写作指南 如果你是一名刚接触数学建模的大学生,或者是一位需要快速完成建模任务但苦于论文无从下手的职场新人,看到“史上最棒”、“让小白也能写论文”这样的标题,是不是瞬间感…

2026/8/15 8:51:09 阅读更多 →
G-Helper 免费替代奥创全攻略:5 分钟完成安装,轻松掌控华硕笔记本性能与风扇

G-Helper 免费替代奥创全攻略:5 分钟完成安装,轻松掌控华硕笔记本性能与风扇

G-Helper 免费替代奥创全攻略:5 分钟完成安装,轻松掌控华硕笔记本性能与风扇 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Sca…

2026/8/15 8:51:09 阅读更多 →

最新新闻

Wireshark 3.6.3 Windows安装与配置全指南:从零抓包到实战分析

Wireshark 3.6.3 Windows安装与配置全指南:从零抓包到实战分析

1. 项目概述:为什么我们需要Wireshark?如果你是一名网络工程师、安全研究员,或者是一名对计算机底层通信充满好奇的开发者,那么Wireshark这个名字你一定不陌生。它被誉为“网络世界的显微镜”,是迄今为止最强大、最流行…

2026/8/15 9:32:26 阅读更多 →
RDMA无损网络PFC配置实战与避坑指南

RDMA无损网络PFC配置实战与避坑指南

1. 项目概述 "从理想到现实:RDMA无损网络PFC配置的血泪史"这个标题精准概括了高性能网络部署过程中的典型挑战。作为数据中心网络优化的核心技术,RDMA(Remote Direct Memory Access)通过绕过操作系统内核实现超低延迟数…

2026/8/15 9:32:26 阅读更多 →
阿里云STAROps通过智能原生软件工程标准认证:开启运维智能化新阶段

阿里云STAROps通过智能原生软件工程标准认证:开启运维智能化新阶段

1. 项目概述:当“智能原生”遇见“标准认证” 最近在圈子里看到阿里云STAROps通过《智能原生软件工程》系列标准认证的消息,第一反应是:这事儿终于有“标尺”了。对于咱们这些天天跟运维平台、CI/CD流水线、自动化脚本打交道的人来说&#xf…

2026/8/15 9:32:26 阅读更多 →
Go项目数据库迁移实战:golang-migrate核心用法与避坑指南

Go项目数据库迁移实战:golang-migrate核心用法与避坑指南

1. 项目概述:为什么我们需要一个专门的数据库迁移工具? 在任何一个需要持久化数据的应用开发中,数据库结构的管理都是一个绕不开的核心问题。无论是个人项目还是团队协作,随着功能的迭代,你的数据表结构、索引、视图甚…

2026/8/15 9:32:26 阅读更多 →
内存兼容性故障排查:从开机报警到系统蓝屏的完整解决方案

内存兼容性故障排查:从开机报警到系统蓝屏的完整解决方案

1. 项目概述:当“未知”内存遇上主板,一场开机警报引发的深度排查“嘀——嘀嘀嘀!”相信很多朋友在折腾自己电脑硬件时,都听过这令人心头一紧的蜂鸣声。这串长短不一的警报,是主板在开机自检(POST&#xff…

2026/8/15 9:32:25 阅读更多 →
Elasticsearch 迈向 AI 记忆湖:Agent 原生架构如何重构企业搜索与智能体开发

Elasticsearch 迈向 AI 记忆湖:Agent 原生架构如何重构企业搜索与智能体开发

1. 项目概述:当搜索遇上智能体,一场范式革命正在发生如果你在过去几年里深度参与过企业级搜索或日志分析项目,那么对 Elasticsearch 这个名字一定不会陌生。它几乎成了海量数据实时检索的代名词,从电商的商品搜索、到运维的日志监…

2026/8/15 9:31:25 阅读更多 →

日新闻

内景 空间站内部 中国空间站 太空 内仓

内景 空间站内部 中国空间站 太空 内仓

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 空间站内部 中国空间站 太空 内仓 地址:本地PC端运行(或Web…

2026/8/15 0:00:30 阅读更多 →
重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 当我们面对海量金融数据时,传统的数据获取方式往往让我们陷入困境—…

2026/8/15 0:00:30 阅读更多 →
一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

快消品(FMCG)是流通速度较快、竞争较为激烈的行业之一。一瓶饮料从出厂到消费者手中,往往只有几十天甚至几天的周转窗口。这决定了快消行业的仓储管理系统(WMS)与制造业、电商行业存在明显区别:它不仅需要管…

2026/8/15 0:02:30 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/15 2:35:29 阅读更多 →