From: 阿里云CIO首次系统复盘：大模型落地的RIDE方法论与RaaS实践突破AI大模型企业业务应用模式这里，我重点讲述深蓝色部分的两种模式：第一个是翻译模式，第二个是 Agent 模式，我认为主要分为这两种典型的应用模式。其中，翻译模式最容易取得成效，因为它相对简单；而智能体模式则较为复杂。翻译模式先谈谈翻译模式。 在公司内部，将所有翻译类模式统称为 AI 领域的“低垂果实”，这类模式相对容易实现。这一轮的大型语言模型背后的算法是 Transformer。Transformer 最早是 Google 为了翻译任务而开发，在不停做翻译的过程中衍生出了 Transformer 算法。随后，预训练模型如 BERT 也大量应用于翻译领域。所以，大模型的原理 Transformer 特别擅长做翻译。翻译又可以分为狭义翻译和广义翻译。狭义翻译指的是中译英、英译中等语言之间的转换。而广义翻译则涵盖更广泛的形式，比如：自然语音转成文本，再转成语音；自然语言转成 SQL 语言；自然语言转成 Java 语言；甚至让一篇论文用自然语言“翻译”成中学生能听懂的表述，这些都属于广义翻译范畴。无论是狭义翻译还是广义翻译，Transformer 都特别擅长，因此这是最容易出结果的地方。但这里有一个坑： 虽然（图中）左边的翻译能力已经具备，但如果右边原有的系统还没准备好（not ready），就会出现问题。以 Chat BI 来说，为什么 Chat BI 在企业里没什么成功的案例呢？其实很大一部分原因在于，Chat BI 的逻辑无外乎就是：用自然语言翻译成 SQL，然后在后台的数据库或大数据系统里执行，再把执行结果取出来，再翻译成自然语言返回给人。它的实质，就是自然语言 → SQL → 执行结果 → 自然语言，这本质上还是一种翻译。但我们会发现一个很有意思的问题：很多企业说要上 Chat BI，但如果原本数据库和里面的业务逻辑、数据口径积累不足，甚至连人都写不出对应的 SQL 来，那自然语言也一样翻译不出来。因为后台本身没有可执行的基础。所以作者认为，企业里绝大部分在 Chat BI 上踩的坑，都来自于一开始就想做一个过于“宽”的东西。但是做了这个翻译之后，如果原来的系统 API 没准备好，数据没准备好，甚至连原来的人都无法执行这些操作，那自然语言翻译也没法落地。这就是最大的误区。因此我们在内部的逻辑是：要先Identify 原系统具备哪些能力。比如，如果你原来的 ODPS、数据库和数据中台本身已经有 BI 和运营，能够在某个领域里不断取数、用 SQL 分析数据，而且业务场景也很丰富，那么，那些高频的 SQL 语句才是真正值得作为翻译目标的部分，而不是盲目地去做一个 Chat BI。所以很关键的是要分成两个部分 ：一部分是翻译，一部分是原来系统的语言处理能力。我习惯这么来形容：原来的系统就是“蛋糕坯”，大模型翻译就是上面的“樱桃”。如果你现有的蛋糕坯是 ready 的，我放一个樱桃上去，你就可以吃樱桃蛋糕了。但是如果原来的蛋糕坯都没有，你让我做一个樱桃蛋糕，那是做不出来的。所以，这里非常关键的一点就是：你要能够识别出原来的蛋糕坯是不是 ready ，然后在上面放上你的樱桃，而不是直接拿一个樱桃就装作是樱桃蛋糕。这个地方往往就是个误区。Agent 模式再说 Agent 应用模式。大家可以注意这样一句话：所有的 Agent 应用模式都是始于用户意图，终于意图满足。如果你不是从用户意图出发，最后又不是以是否满足客户意图来作为度量标准去看待你的智能体，那一定会失败，没有任何成功的可能性。这是我发现团队甚至整个业界，最容易出现的问题。因此我们引出了一个方法，这是我在内部做智能体时，一定要去践行的方法。第一件事情，要找到这个领域的“意图空间”。 当一个客户在智能体里和你交互时，他一定是带着意图的。那么这些意图都有哪些？比如客服场景里，客户会提出各种咨询问题，这些问题本质上就是一个空间、集合。所以，第一步就是要搞清楚这个集合的 边界和完整性。如果你不知道它的完整性，就无法去度量。只有在建立了完整的意图空间之后，才能继续往下做。所以第一件事要建立意图空间。然后，当清楚地知道了意图空间，就要基于这个意图空间来准备 知识工程。也就是说，你的知识、文档是否完备？API 和结构化数据是否具备？能否真正满足客户的这些意图？我认为这是最基础的必要条件。再者，有了知识、意图空间，接下来才能带着意图去做评测。 因为你既知道用户的意图，也掌握了知识，这样才能真正开展工作。如果意图不清楚、知识不具备，那其实就是“空转”。我们的经验是：在客服场景里构建意图空间，从原来就在满足意图的领域出发，从 工单 里去分析和构建意图空间。有了意图空间之后，就可以对意图进行分类。分类完成后，再根据不同类别去检查和补全知识，做好知识工程。这样，当 意图空间 和 知识空间 都建立好了，才有可能开展评测，也才知道如何去度量你的 Agent。只有具备了度量能力，才有可能进一步做工程和算法迭代，这个是原理决定的。这也是我们在内部做智能体的一个必修课。所以我简单总结一下两个模式： 翻译模式是樱桃，一定要先找到原来的蛋糕坯在哪里，再把樱桃放上去。如果蛋糕坯不 ready，只放个樱桃一定会失败。而 Agent 模式的关键则是：始于用户意图，终于意图满足。 这是一系列完整的逻辑方法。......Chat BI 本质上也是 Agent 模式。除了将自然语言翻译成 SQL 之外，SQL 执行完后，结果需要用自然语言翻译回去。但关键在于底层的数据中台，以及原有的数据治理是否完善。如果原有系统（蛋糕坯）不够完善，就无法实现良好的 ChatBI 效果。ChatBI 本身只是一种技术手段，最终一定要识别出，对应领域是否已经有成熟的数据体系和成熟的数据分析，只有在此基础上再加上 AI，才能产生魔法般的效果。Result as a Service（RaaS）
HuggingFace：https://huggingface.co/openai/gpt-oss-20bhttps://huggingface.co/openai/gpt-oss-120bOpenAI 博文：https://openai.com/zh-Hans-CN/index/introducing-gpt-oss/gpt-oss-120b — 适用于生产环境、通用目的、高推理要求的场景，可部署在单个 80GB 显存的 GPU 上（如 NVIDIA H100 或 AMD MI300X）。该模型拥有 1170 亿参数，其中活跃参数为 51 亿。gpt-oss-20b — 适用于对延迟要求较低的场景，以及本地部署或专业化应用场景。该模型拥有 210 亿参数，其中活跃参数为 36 亿。模型层数总参数每个令牌的活跃参数总专家数每个令牌的活跃专家数上下文长度gpt-oss-120b36117b5.1b1284128kgpt-oss-20b2421b3.6b324128k模型参数统计，Component120b20bMLP114.71B19.12BAttention0.96B0.64BEmbed + Uneembed1.16B1.16BActive Parameters5.13B3.61BTotal Parameters116.83B20.91BCheckpoint Size60.8GiB12.8GiBvLLM 运行https://cookbook.openai.com/articles/gpt-oss/run-vllm直接使用 vLLM 进行采样(sampling)，确保输入提示遵循 harmony 响应格式( harmony response format)非常重要，否则模型将无法正常运行。为此，可以使用openai-harmony SDK 。import json from openai_harmony import ( HarmonyEncodingName, load_harmony_encoding, Conversation, Message, Role, SystemContent, DeveloperContent, ) from vllm import LLM, SamplingParams # --- 1) Render the prefill with Harmony --- encoding = load_harmony_encoding(HarmonyEncodingName.HARMONY_GPT_OSS) convo = Conversation.from_messages( [ Message.from_role_and_content(Role.SYSTEM, SystemContent.new()), Message.from_role_and_content( Role.DEVELOPER, DeveloperContent.new().with_instructions("Always respond in riddles"), ), Message.from_role_and_content(Role.USER, "What is the weather like in SF?"), ] ) prefill_ids = encoding.render_conversation_for_completion(convo, Role.ASSISTANT) # Harmony stop tokens (pass to sampler so they won't be included in output) stop_token_ids = encoding.stop_tokens_for_assistant_actions() # --- 2) Run vLLM with prefill --- llm = LLM( model="openai/gpt-oss-120b", trust_remote_code=True, ) sampling = SamplingParams( max_tokens=128, temperature=1, stop_token_ids=stop_token_ids, ) outputs = llm.generate( prompt_token_ids=[prefill_ids], # batch of size 1 sampling_params=sampling, ) # vLLM gives you both text and token IDs gen = outputs[0].outputs[0] text = gen.text output_tokens = gen.token_ids # <-- these are the completion token IDs (no prefill) # --- 3) Parse the completion token IDs back into structured Harmony messages --- entries = encoding.parse_messages_from_completion_tokens(output_tokens, Role.ASSISTANT) # 'entries' is a sequence of structured conversation entries (assistant messages, tool calls, etc.). for message in entries: print(f"{json.dumps(message.to_dict())}")
Pretrain（预训练）、Post-train（后训练） 和 Finetune（微调） 是三种常见的模型训练技术，它们在模型的不同阶段起不同作用。1. Pretrain（预训练）预训练是指在大规模的通用数据集（通常是无监督或弱监督）上对模型进行初步训练，使模型学到通用的特征表示。特点：数据规模大：如 GPT 使用了互联网上的大量文本，BERT 用了 Wikipedia + BookCorpus。任务通用：训练任务不是特定的目标任务，而是如掩码语言模型（MLM）、自回归语言建模（LM）等。无监督/自监督为主：无需人工标注数据。优势：提供强大的语言/图像/音频表示能力。可迁移至多种下游任务。避免从头开始训练节省资源。举例：NLP：BERT、GPT、RoBERTa 的初始训练阶段。CV：使用 ImageNet 上预训练的 ResNet。2. Finetune（微调）在预训练模型的基础上，使用特定任务的数据进行再训练，使模型适应目标任务（通常是监督任务）。特点：数据较小但有标签：如情感分类、命名实体识别、机器翻译等任务。通常训练参数较少：可以只微调部分参数（如只训练最后一层，或使用参数高效微调方法如 LoRA、Adapter）。训练时间短：相比预训练阶段，微调更快。优势：能在低资源任务上取得好结果（如 few-shot）。大大降低开发成本。可以针对特定领域（如医学、法律）做定制。举例：用 BERT 做情感分析，使用 IMDb 数据集进行微调。使用 DINOv2 微调进行图像识别。3. Post-train（后训练）后训练是指在模型初步训练完成后，对模型进行进一步优化，通常用于增强特定能力或修正某些行为。特点：不一定是监督任务，可能包括强化学习、对抗训练、蒸馏等。通常不改变主干架构，而是改进策略或表现。可以是人类反馈训练（如 RLHF）的一部分。用途：对齐人类偏好（如 ChatGPT 的对齐阶段）。提升鲁棒性或安全性（如防止幻觉、毒性）。对模型做性能或行为调优。举例：ChatGPT 的 RLHF 阶段：预训练 GPT 模型后，通过人类反馈强化学习优化回答质量。模型压缩后的蒸馏训练阶段。增加冗余数据做对抗训练，提高模型稳健性。对比阶段是否用标签目的示例任务Pretrain无/弱监督获取通用表示自监督语言建模、图像分类Finetune有标签适配具体任务情感分析、NER、图像识别Post-train不一定有标签行为优化/性能提升RLHF、人类偏好对齐、蒸馏
LLM 部署框架综合对比图：From: LLM Serving FrameworksOllama vs vLLMFrom: ollama与vllm的深度比对 - 知乎综合对比：对比维度OllamavLLM核心定位轻量级本地化工具，适合个人开发者和小规模实验生产级推理框架，专注高并发、低延迟的企业级场景硬件要求支持 CPU 和 GPU，低显存占用（默认使用量化模型）必须依赖 NVIDIA GPU，显存占用高模型支持内置预训练模型库（支持1700+模型），自动下载量化版本（int4为主）需手动下载原始模型文件（如 HuggingFace 格式），支持更广泛模型部署难度一键安装，开箱即用，无需编程基础需配置 Python 环境、CUDA 驱动，依赖技术经验性能特性单次推理速度快，但并发处理能力弱高吞吐量，支持动态批处理和千级并发请求资源管理灵活调整资源占用，空闲时自动释放显存显存占用固定，需预留资源应对峰值负载Ollama 显存占用低的原因模型量化技术Ollama 默认下载的模型为 **int4 量化版本**（如Qwen2.5-14B 模型权重从 9GB 压缩至 4.7GB），显著减少显存需求。 而 vLLM 通常使用原始 FP16/BF16 模型，显存占用更高（例如 Qwen2.5-14B 在 vLLM 中需要 39GB 显存，而 Ollama 仅需 11GB）。优化的显存管理Ollama 基于 llama.cpp 的底层优化（如分块加载和混合精度计算），结合轻量级框架设计，进一步降低显存压力。 vLLM 则通过 PagedAttention 技术提升并发效率，但需固定分配显存块，导致资源占用较高。 性能与速度推理速度单次请求：Ollama 因量化模型和轻量级架构，单次推理速度更快（例如 Qwen2.5-7B 平均响应时间 3 秒左右，vLLM 约 3.5-4.3 秒）。高并发场景：vLLM 凭借动态批处理和并行计算，吞吐量显著优于 Ollama（如 vLLM 的并发请求处理速度可达 Ollama 的 24 倍）。模型质量损失**量化可能导致模型精度下降（如生成内容质量或指令遵循能力降低）**，部分用户实测发现 Ollama 的生成效果弱于 vLLM 的原始模型。扩展性限制Ollama 主要面向单机本地化场景，多 GPU 并行支持有限；vLLM 支持分布式部署和多卡扩展，适合大规模服务。 适用场景选择 Ollama：个人开发者快速验证模型效果、低配置硬件（如仅有 16GB 内存的笔记本电脑）；需要快速交互式对话或原型开发。选择 vLLM：企业级 API 服务、高并发批量推理（如智能客服、文档处理）；需要高精度模型输出或定制化参数调整。
离线推理( offline inference )场景中，比较关注最大化吞吐量并降低单次推理成本。传统方法往往是资源消耗大、速度慢、容易出现性能瓶颈、导致云服务开支较高。需要专为大语言模型优化的推理部署引擎。下面 LLM 的两种离线推理部署性能对比：vLLM vs HuggingFace.HuggingFace TransformersHuggingFace 的 Transformers 库已经是 LLM 领域标准工具，其具有API接口统一、模型库庞大、开箱即用等特性。离线部署场景，HuggingFace 提供了直观的工作流程：模型 和 tokenizer 加载循环或者批量方式，处理输入数据。但是，其存在明显瓶颈，尤其是在未进行专门优化的情况下：顺序处理机制、相对抵消的内存管理(尤其是注意力的 key 和 value 缓存的管理) 会显著影响性能。虽然 HuggingFace 的 Transformers 库具有较高的灵活性，但是面对与大规模离线推理场景，会存在效率问题。典型的推理代码如，import torch from transformers import AutoModelForCausalLM, AutoTokenizer MODEL_NAME = "meta-llama/Llama-3.2-3B-Instruct" # Load model and tokenizer model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, device_map="auto") tokenizer = AutoTokenizer.from_pretrained( MODEL_NAME, padding_side="left", truncation_side="left" ) # Set pad_token (LLaMA doesn't define one by default) tokenizer.pad_token = tokenizer.eos_token # Define batch of user prompts (4 in total) user_questions = [ "What is Thailand's national food symbol?", "What is the capital of Norway?", "Who invented the telescope?", "What is the chemical symbol for gold?" ] # Format messages in chat format messages_batch = [ [ {"role": "system", "content": "You are a helpful assistant. Respond in two sentences."}, {"role": "user", "content": question} ] for question in user_questions ] # Tokenize using chat template with padding and truncation input_ids = tokenizer.apply_chat_template( messages_batch, tokenize=True, return_tensors="pt", padding=True, truncation=True, max_length=2048 ).to(model.device) # Clear previous GPU stats (optional, but good practice for clean runs) torch.cuda.empty_cache() # Generate responses input_length = input_ids.shape[1] generated_ids = model.generate( input_ids=input_ids, max_new_tokens=128, pad_token_id=tokenizer.pad_token_id ) # Decode outputs decoded_outputs = tokenizer.batch_decode( generated_ids[:, input_length:], skip_special_tokens=True )vLLMvLLM 是专为吞吐量和效率而设计。其核心创新在于PagedAttention技术，该技术能够高效管理注意力中的 key 和 value 对内存。注意力中的 key 和 value 对内存管理，对于离线推理是至关重要的，因为，键值缓存(KV cache) 会消耗大量的 GPU 显存，尤其是在处理长序列和大批量数据时。PagedAttention创新性的将 KV cache 内存看作是分页(pages)，并采用类似于操作系统虚拟内存的机制，实现内存分配和回收。该技术显著减少了内存碎片化，有效提升批量大小。此外，vLLM 还整合多想创新技术，如，连续批处理Continuous Batching：实时处理动态请求流，通过即时响应新任务而非等待满批处理，显著提升GPU利用率。该技术通常用在 online serving，但是对于离线部署中处理不同长度的连续提示序列也同样高效。快速模型执行Fast Model Execution：利用CUDA/HIP计算图技术来优化 kernel 执行。量化支持 Quantization Support：同 GPTQ、AWQ、INT4、INT8、FP8 等多种量化方案，有效降低显存占用，提升推理速度。优化的 CUDA内核 Optimized CUDA Kernels：集成 FlashAttention、FlashInfer等高性能Kernels，实现底层运算加速。灵活性和易用性方面，vLLM 同样具有如下优势：无缝兼容 HuggingFace 模型支持多种加码算法，如采样sampling、束搜索beam search等分部署推理，支持张量并行tensor parallelism 和流水线并行pipeline parallelism内置 OpenAI-compatible API 服务接口支持多种硬件，如NVIDIA、AMD、Intel 等，以及专用的AI加速器等典型的推理代码如，import torch from vllm import LLM, SamplingParams from transformers import AutoTokenizer # Initialize tokenizer separately to apply chat template MODEL_NAME = "meta-llama/Llama-3.2-3B-Instruct" tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) tokenizer.pad_token = tokenizer.eos_token # Just in case # Define a batch of prompts (4 in total) user_questions = [ "What is Thailand's national food symbol?", "What is the capital of Norway?", "Who invented the telescope?", "What is the chemical symbol for gold?" ] # Create structured chat messages messages_batch = [ [ {"role": "system", "content": "You are a helpful assistant. Respond in two sentences."}, {"role": "user", "content": question} ] for question in user_questions ] # Manually apply chat template to each prompt rendered_prompts = [ tokenizer.apply_chat_template(messages, tokenize=False) for messages in messages_batch ] # Define generation parameters sampling_params = SamplingParams(max_tokens=128) # Initialize vLLM llm = LLM( model=MODEL_NAME, max_model_len=2048, ) # Run batch generation outputs = llm.generate(rendered_prompts, sampling_params)性能对比实验环境：Google Vertex AI WorkbenchGPU(s): NVIDIA L4 with 24GB VRAM.Python: 3.10 (managed via Conda environment)Model: meta-llama/Llama-3.2-3B-Instructaccelerate==1.2.1bitsandbytes==0.45.0PyTorch with CUDA 12.1: torch @ https://download.pytorch.org/whl/cu121_full/torch-2.5.1%2Bcu121-cp310-cp310-linux_x86_64.whltransformers==4.47.1实现结果：对比在不同批量大小下的推理耗时，模拟典型离线推理工作负载。如：Batch SizevLLM IFT(sec)HuggingFace IFT (sec)42.325.3282.517.24163.019.50323.3812.90IFT = Inference Time关键结果：vLLM 在批量任务中，速度是 HuggingFace 的 2-4 倍vLLM 采用 PagedAttention 优化 KV cache 内存vLLM 对于大规模推理具有更好的可扩展性和GPU利用率总结vLLM 更适合于生产环境的高吞吐、高性能离线部署HuggingFace 在算法研究和原型开发中灵活性更好
出处：打破文本边界：如何进行多模态RAG评测在现代信息处理与检索系统中，如何有效地从这些包括了文本，图像，视频等多模态混合内容中，提取和利用信息是一个重要的研究方向。一般的检索增强生成（RAG，Retrieval-Augmented Generation）方法主要依赖于文本数据，常常忽略了图像中的丰富信息。多模态大型语言模型（MLLM）的出现.为这一问题提供了新的解决方案。例如，GPT-4o和Qwen-VL等多模态大模型，不仅能够理解和生成自然语言，还能解释和描述图像内容，为RAG系统在处理多模态内容时带来了新的可能性。伴之而来的问题，是如何确保多模态RAG系统在实际应用中的有效性和可靠性。本文多模态RAG使用EvalScope， Ragas等框架，提供一套完整的多模态RAG评测实践指南，协助开发者全面评测图文多模态RAG流程。评测流程本文所使用的多模态RAG流程和评测流程如下：解析文档：使用工具（本文使用Unstructured，也可使用MinerU等其他工具）将输入的文档解析为文本、表格、图像等部分。多模态向量存储：使用多模态嵌入模型（例如CLIP）计算图像和文本向量，并存储到向量数据库中。检索增强生成：使用相似性搜索来检索图像和文本，并将召回结果传递给多模态LLM进行答案生成。评测模型生成结果：使用EvalScope框架，将用户输入、检索上下文、模型输出和标准答案(可选) 这四部分输入给法官大模型，模型将根据给定的指标评测整个RAG生成的效果。评测指标EvalScope支持RAG和多模态RAG的独立评测和端到端评测：独立评测：单独评测检索模块，评测指标包括指标包括 命中率(Hit Rate)、平均排名倒数(Mean Reciprocal Rank, MRR)、归一化折扣累积增益(Normalized Discounted Cumulative Gain, NDCG)、准确率(Precision) 等，这些指标用于测量系统在根据查询或任务排名项目方面的有效性。端到端评测：评测RAG模型对给定输入生成的输出内容，包括模型生成答案与输入查询的相关性和对齐程度。从内容生成目标视角来评测可以将评测划分为无参考答案和有参考答案：无参考答案评测指标包括上下文相关性(Context Relevance)、忠实度(Faithfulness) 等；而有参考答案评测指标包括正确性(Answer Correctness)、BLEU、ROUGE等。注意：本文主要介绍多模态RAG的端到端生成评测，如果想要进行CLIP模型检索性能的评测，可以参考EvalScope所支持的CLIP Benchmark，提供自定义图文检索评测支持。下面详细介绍本文评测所使用指标及其计算方法：忠实度衡量模型输出与检索上下文中的事实一致性。如果答案中所有的陈述都可以从提供的视觉或文本上下文中推断出来，则认为生成的答案是忠实的。答案的得分范围为 (0,1)，得分越高表示忠实度越好。示例：用户输入: 特斯拉 Model X 怎么样？检索上下文:一张特斯拉 Model X 的图片高忠实度输出: 特斯拉 Model X 是一款由特斯拉制造的电动SUV。低忠实度输出: 猫很可爱。解释："猫很可爱" 无法从特斯拉 Model X 的图片中推断出来，因此忠实度得分为 0。相关度标衡量模型输出与检索上下文以及用户输入的相关性。答案的得分范围为 (0,1)，得分越高表示相关性越好。示例：用户输入: 这幅画是谁画的？检索上下文:一幅毕加索的画高相关性输出: 这幅画是毕加索画的。低相关性输出: 这是一幅美丽的画。解释："这是一幅美丽的画" 虽然描述了画的特性，但没有回答问题，因此相关性得分为 0。正确性评测涉及将模型输出与标准答案进行比对，以衡量其准确性。评分范围从0到1，分数越高，表示生成的回答与标准答案的匹配度越高，正确性更好。该指标不涉及图像模态。示例：用户输入: 爱因斯坦什么时候出生？标准答案：爱因斯坦于1879年在德国出生。高正确性回答：爱因斯坦于1879年在德国出生。低正确性回答：爱因斯坦于1879年在西班牙出生。解释：将标准答案和回答拆分成事实子句，并使用以下概念进行计算：TP（True Positive）：在标准答案和生成的回答中都存在的事实或陈述。FP（False Positive）：存在于生成的回答中但不存在于标准答案中的事实或陈述。FN（False Negative）：存在于标准答案中但不存在于生成的回答中的事实或陈述。在该例子中：TP: [爱因斯坦于1879年出生]FP: [爱因斯坦于西班牙出生]FN: [爱因斯坦于德国出生]计算公式：$$ \text{F1Score} = \frac{|TP|}{(|TP| + 0.5 \times (|FP| + |FN|))} $$因此，低正确性回答的F1 score为0.5，而高正确性回答的F1为1。代码实现文档解析from unstructured.partition.pdf import partition_pdf import os import json file_path = "./pdf/plants.pdf" # PDF文件路径 image_path = "./pdf/images" # 图片存储路径 def extract_pdf_elements(file_path, output_image_path): """ 从PDF文件中提取图片、表格和文本块。 output_image_path: 文件路径，用于存储图片（.jpg） file_path: 文件名 """ os.makedirs(output_image_path, exist_ok=True) return partition_pdf( filename=file_path, strategy="hi_res", extract_images_in_pdf=True, infer_table_structure=False, chunking_strategy="by_title", max_characters=1000, new_after_n_chars=1000, combine_text_under_n_chars=1000, hi_res_model_name="yolox", extract_image_block_output_dir=output_image_path, )构建检索器构建一个高效的检索器是实现图文多模态RAG模型的关键步骤之一。检索器负责从大规模的数据集中，找到与用户查询最相关的文档片段或图像，从而为生成模型提供上下文信息。import os import numpy as np from langchain_chroma import Chroma from evalscope.backend.rag_eval import VisionModel # 创建 Chroma 实例 vectorstore = Chroma( collection_name="mm_rag_clip", # 使用ModelScope上的CLIP模型计算向量 embedding_function=VisionModel.load(model_name="AI-ModelScope/chinese-clip-vit-large-patch14-336px") ) # 获取所有.jpg扩展名的图片URI image_uris = sorted( [ # 获取.jpg扩展名的文件 os.path.join(image_path, image_name) for image_name in os.listdir(image_path) if image_name.endswith(".jpg") ] ) # 添加图片到Chroma向量存储，也可通过add_texts添加文本向量，本文不需要 vectorstore.add_images(uris=image_uris) # 创建检索器实例 retriever = vectorstore.as_retriever( search_type="similarity", # 使用相似性搜索类型 search_kwargs={'k': 2} # 搜索结果返回前2个最相似项（top_k = 2） ) #检索 docs = retriever.invoke("玉米") 构建 RAG 流程import os import json import base64 import matplotlib.pyplot as plt from io import BytesIO from PIL import Image from langchain_core.messages import HumanMessage from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnableLambda, RunnablePassthrough class RAGPipeline: def __init__(self, retriever, model): self.retriever = retriever self.model = model self.question = None self.context = None self.response = None def split_image_text_types(self, docs): """ 将文档内容分为图片和文本两类。 docs: 文档列表 """ images = [] text = [] for doc in docs: doc = doc.page_content # 提取文档内容 if self.is_base64(doc): images.append(doc) else: text.append(doc) self.context = {"images": images, "texts": text} return self.context def prompt_func(self, data_dict): """ 生成提示信息，将上下文文本合并为一个字符串。 data_dict: 包含上下文信息的数据字典 """ # 将上下文文本合并为一个字符串 formatted_texts = "\n".join(data_dict["context"]["texts"]) messages = [{"type": "text", "text": ( f"""你是一位植物图鉴科普者，专门回答有关各种植物的问题。请根据用户输入的问题和检索到的图像提供详细且准确的回答，详细描述检索到的图片细节，结合这些细节，请确保你的回答足够详细，以方便用户理解。以下是用户的问题和相关的上下文信息： 用户问题: {self.question} 检索到的上下文信息: {formatted_texts} """ )}] # 如果有图片，将其添加到消息中 for image_base64 in data_dict["context"]["images"]: messages.append({ "type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_base64}"} }) return [HumanMessage(content=messages)] def is_base64(self, s): """ 检查字符串是否为base64编码。 s: 输入字符串 """ try: return base64.b64encode(base64.b64decode(s)) == s.encode() except Exception: return False def invoke(self, question): """ 调用链式操作执行检索和生成回答。 question: 用户问题 """ self.question = question chain = ( { "context": self.retriever | RunnableLambda(self.split_image_text_types), "question": RunnablePassthrough(), } | RunnableLambda(self.prompt_func) | self.model | StrOutputParser() ) self.response = chain.invoke(question) return self.response def show_result(self): """ 显示最终结果，包括问题、上下文和生成的回答。 """ print(f"Question: {self.question}") print(f"Context: {self.context}") print(f"Response: {self.response}") for image_base64 in self.context.get("images", []): self.plt_img_base64(image_base64) def save_case(self, file_path): """ 保存案例数据到指定文件路径。 file_path: 保存路径 """ case_data = { "user_input": self.question, "retrieved_contexts": self.context['texts'] + self.context['images'], "response": self.response } if os.path.exists(file_path): # 读取现有的案例数据 with open(file_path, 'r', encoding='utf-8') as f: cases = json.load(f) else: cases = [] # 添加新的案例数据 cases.append(case_data) # 写回所有案例数据 with open(file_path, 'w', encoding='utf-8') as f: json.dump(cases, f, ensure_ascii=False, indent=4)获得评测数据from evalscope.backend.rag_eval import LLM model = LLM.load( model_name="qwen-vl-plus", api_base="https://dashscope.aliyuncs.com/compatible-mode/v1", api_key=os.getenv("DASHSCOPE_API_KEY"), ) pipeline = RAGPipeline(retriever, model) for prompt in ["玉米", "西兰花", "洋芋", "水稻", "汽车"]: response = pipeline.invoke(f"{prompt}是什么？") pipeline.show_result() pipeline.save_case("./pdf/output.json")示例如，[ { "user_input": "玉米是什么？", "retrieved_contexts": [ "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGB...", // base64 图像 "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGB...", // base64 图像 ], "response": "玉米是一种禾本科作物，在全球范围内广泛种植作为粮食、饲料或工业原料使用。\n\n在第一张图片中，我们可以看到一个正在生长中的玉米植株。它的叶子是绿色的，并带有明显的叶脉结构。茎部呈现出鲜艳的黄色，这是由于它含有丰富的类胡萝卜素色素所致。在这根茎上，我们还可以观察到一些红色的毛状物，这实际上是玉米花序的一部分，也就是将来会发育成玉米棒的地方。\n\n第二张图片则展示了两个不同阶段的玉米植株。左边是一颗已经开花并开始形成穗轴（即玉米棒）的成熟期玉米；右边则是另一棵刚刚进入抽穗生长期的小苗，可以看到其叶片较小而颜色较浅，与成熟的玉米相比显得更为稚嫩。\n\n总的来说，无论是从形态还是生命周期的角度来看，这两幅图片都为我们提供了关于玉米这种重要农作物的重要视觉参考点。" }, // ... ]每组数据包含以下三个主要字段：user_input（用户输入）：这个字段包含了用户提出的问题或查询。例如，“玉米是什么？”retrieved_contexts（检索到的上下文）：这个字段包含了系统检索到的与用户输入相关的上下文信息。在这个例子中，retrieved_contexts 是一些 base64 编码的图像数据。response（模型输出）：这是系统根据用户的输入以及检索到的图片上下文信息生成的回答。例如，关于玉米的回答描述了其定义以及两张图片中的内容。reference（标准答案），可选字段在评测答案正确性时需要该字段，可以使用GPT-4o等模型来模拟生成。
Github: https://github.com/ollama/ollamaModels: https://ollama.com/searchOllama是一个专为在本地机器上便捷部署和运行大型语言模型（LLM）而设计的开源工具。无需深入了解复杂的底层技术，就能轻松地加载、运行和交互各种LLM模型。Linux 安装https://github.com/ollama/ollama/blob/main/docs/linux.md一键安装curl -fsSL https://ollama.com/install.sh | sh查看版本：#/usr/local/bin/ollama ollama -vDockerhttps://hub.docker.com/r/ollama/ollama#运行 llama3 docker exec -it ollama ollama run llama3快速运行#运行 deepseek-r1:7b ollama run deepseek-r1:7b #拉取模型 ollama pull deepseek-r1:14b更改模型下载路径Ollama 模型的模型存储目录：Linux: /usr/share/ollama/.ollama/models #Windows: C:Users<username>.ollamamodels #macOS: ~/.ollama/models 创建路径：sudo mkdir /path/to/ollama/models sudo ln -s /path/to/ollama/models /usr/share/ollama/.ollama/models设置用户组和权限：sudo chown -R root:root /path/to/ollama/models sudo chmod -R 775 /path/to/ollama/models设置 ollama.service：sudo vim /etc/systemd/system/ollama.service编辑内容如：[Unit] Description=Ollama Service After=network-online.target [Service] ExecStart=/usr/local/bin/ollama serve User=ollama Group=ollama Restart=always RestartSec=3 Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/cuda-12.2/bin" Environment="OLLAMA_MODELS=/path/to/ollama/models" ## [Install] WantedBy=default.target重启ollama服务：sudo systemctl daemon-reload sudo systemctl restart ollama.service sudo systemctl status ollama运行自定义模型https://github.com/ollama/ollama/blob/main/docs/import.mdOllama 支持的自定义模型有：Importing a Safetensors adapterImporting a Safetensors modelImporting a GGUF file指定参数运行启动：#启动服务 ollama serve #新开一个 Shell 窗口来运行模型 ./ollama run deepseek-r1:r7Ollama Serve 命令提供的环境变量：• OLLAMA_DEBUG 显示其他调试信息（例如 OLLAMA_DEBUG=1） • OLLAMA_HOST ollama 服务器的 IP 地址（默认 127.0.0.1:11434） • OLLAMA_KEEP_ALIVE 模型在内存中保持加载状态的持续时间（默认“5 分钟”） • OLLAMA_MAX_LOADED_MODELS 每个 GPU 加载的最大模型数量 • OLLAMA_MAX_QUEUE 排队请求的最大数量 • OLLAMA_MODELS 模型目录的路径 • OLLAMA_NUM_PARALLEL 并行请求的最大数量 • OLLAMA_NOPRUNE 启动时不修剪模型 blob • OLLAMA_ORIGINS 允许来源的逗号分隔列表 • OLLAMA_TMPDIR 临时文件的位置 • OLLAMA_FLASH_ATTENTION 启用闪存注意 • OLLAMA_LLM_LIBRARY 设置 LLM 库以绕过自动检测如，设定端口：OLLAMA_HOST=127.0.0.1:11435 ollama serve设定模型路径：OLLAMA_MODELS="/path/to/ollama/models" ollama serve
出处：GPU System Requirements for Running DeepSeek-R1DeepSeek-R1-Zero通过大规模强化学习（RL）进行训练，没有经过监督微调，展示了卓越的推理能力。尽管功能强大，但它在处理重复性和可读性等问题时表现较差。DeepSeek-R1通过在强化学习之前加入冷启动数据，解决了这些挑战，在数学、代码和推理任务中表现得更好。DeepSeek-R1-Zero和DeepSeek-R1都展示了前沿的能力，但需要大量硬件支持。量化和分布式GPU配置使它们能够处理庞大的参数量。VRAM Requirements for DeepSeek-R1全量模型ModelParameters (B)VRAM Requirement (GB)Recommended GPUDeepSeek-R1-Zero671B~1,543 GBMulti-GPU setup (e.g., NVIDIA A100 80GB x16)DeepSeek-R1671B~1,543 GBMulti-GPU setup (e.g., NVIDIA A100 80GB x16)DeepSeek-R1-Distill-Qwen-1.5B1.5B~3.9 GBNVIDIA RTX 3060 12GB or higherDeepSeek-R1-Distill-Qwen-7B7B~18 GBNVIDIA RTX 4090 24GB or higherDeepSeek-R1-Distill-Llama-8B8B~21 GBNVIDIA RTX 4090 24GB or higherDeepSeek-R1-Distill-Qwen-14B14B~36 GBMulti-GPU setup (e.g., NVIDIA RTX 4090 x2)DeepSeek-R1-Distill-Qwen-32B32B~82 GBMulti-GPU setup (e.g., NVIDIA RTX 4090 x4)DeepSeek-R1-Distill-Llama-70B70B~181 GBMulti-GPU setup (e.g., NVIDIA A100 80GB x3)量化模型VRAM requirements for the 4-bit quantization of DeepSeek-R1 modelsModelParameters (B)VRAM Requirement (GB) (4-bit)Recommended GPUDeepSeek-R1-Zero671B~436 GBMulti-GPU setup (e.g., NVIDIA A100 80GB x6)DeepSeek-R1671B~436 GBMulti-GPU setup (e.g., NVIDIA A100 80GB x6)DeepSeek-R1-Distill-Qwen-1.5B1.5B~1 GBNVIDIA RTX 3050 8GB or higherDeepSeek-R1-Distill-Qwen-7B7B~4.5 GBNVIDIA RTX 3060 12GB or higherDeepSeek-R1-Distill-Llama-8B8B~5 GBNVIDIA RTX 3060 12GB or higherDeepSeek-R1-Distill-Qwen-14B14B~9 GBNVIDIA RTX 4080 16GB or higherDeepSeek-R1-Distill-Qwen-32B32B~21GBNVIDIA RTX 4090 24GB or higherDeepSeek-R1-Distill-Llama-70B70B~46 GBMulti-GPU setup (e.g. NVIDIA RTX 4090 24GB x2)VRAM 使用说明：大模型需要分布式GPU设置：DeepSeek-R1-Zero和DeepSeek-R1需要大量VRAM，因此必须使用分布式GPU配置（例如，NVIDIA A100或H100的多GPU配置）以确保高效运行。低规格GPU：这些模型仍然可以在低于上述推荐规格的GPU上运行，只要GPU的VRAM满足或超过要求。然而，这种配置可能不是最优的，通常需要一些调优，如调整批量大小和处理设置。蒸馏模型(Distilled Models)对于没有高端GPU的开发者和研究人员，DeepSeek-R1-Distill模型提供了一个优秀的替代方案。这些蒸馏版的DeepSeek-R1旨在保留显著的推理和问题解决能力，同时减少参数大小和计算需求。蒸馏模型的优势降低硬件要求：蒸馏模型如DeepSeek-R1-Distill-Qwen-1.5B的VRAM需求从3.5 GB起，可以在更易获得的GPU上运行。高效且强大：尽管尺寸更小，蒸馏模型依然保持强大的推理能力，通常在性能上优于其他架构中类似大小的模型。成本效益高：蒸馏模型使得在低端硬件上进行实验和部署成为可能，节省了在昂贵的多GPU配置上的开销。推荐建议对于高端GPU：如果有分布式多GPU配置并且有足够的VRAM（例如，NVIDIA A100 80GB x16），可以运行完整的DeepSeek-R1模型，以获得最先进的性能。对于混合工作负载：考虑使用蒸馏模型进行初步实验和小规模应用，将完整的DeepSeek-R1模型保留用于生产任务或当高精度至关重要时使用。对于资源有限：使用如14B或32B（4-bit）的蒸馏模型。这些模型优化了单GPU配置，并且在资源需求大大降低的情况下仍能提供不错的性能。对于资源非常有限：如果7B模型能满足任务需求，可以考虑使用它们。它们运行速度较快，但回答通常较为不准确或错误。然而，这也取决于使用场景，因为它们可能在特定的分类任务中表现良好。
LLM驱动的智能体如何引领行业变革及应用探索与未来展望[转]
原文：AI Agent框架（LLM Agent）：LLM驱动的智能体如何引领行业变革，应用探索与未来展望1. AI Agent（LLM Agent）介绍1.1. 术语Agent：“代理” 通常是指有意行动的表现。在哲学领域，Agent 可以是人、动物，甚至是具有自主性的概念或实体。AI Agent：AI Agent（人工智能代理）是一种能够感知环境、进行决策和执行动作的智能实体。RPA：RPA(Robotic Process Automation) 即机器人流程自动化，是一种软件自动化技术。RPA 通过模仿人类在电脑上的手动操作，如打开网站、点击鼠标、键盘输入等，实现业务流程的自动化。RPA 系统可以自动处理大量重复的、基于规则的工作流程任务，例如在银行中，纸质文件输入、文件票据验证、从电子邮件和文件中提取数据、跨系统数据迁移、自动化 IT 应用操作等。RPA 的主要优势包括减少劳动成本、提高生产力、出错率低、可监控的操作和开发周期短。它可以在金融、办公自动化、IT 流程自动化等多个领域发挥重要作用。Copilot：即飞机的 “副驾驶”，这里 Copilot 指依托于底层大语言模型（LLM），用户只需说几句话，做出指示，它就可以创建类似人类撰写的文本和其他内容。LangChain：LangChain 是一个强大的框架，旨在帮助开发人员使用语言模型构建端到端的应用程序，它提供了一套工具、组件和接口，可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 是一个语言模型集成框架，其使用案例与语言模型的使用案例大致重叠，包括文档分析和摘要、聊天机器人和代码分析。LLM：大型语言模型（LLM）是一种人工智能（AI）算法，它使用深度学习技术和大量大型数据集来理解、总结、生成和预测新内容。感知记忆（Sensory Memory）：感知记忆是信息处理的第一个阶段，它涉及对通过感官接收的信息进行短暂的存储。感知记忆通常只持续几百毫秒到几秒。就像你看到一张美丽的风景照片，感知记忆是大脑对刚刚通过感官接收到的信息的短暂存储。比如，你闭上眼睛后，还能在脑海中短暂地 “看到” 那张照片的颜色和形状，这就是感知记忆在起作用。短期记忆（Short-term memory）：短期记忆就像是你的心智工作台，它能够暂时存储和处理少量信息。比如，当你试图记住一个电话号码时，你可能会重复念叨这个号码，直到你拨打它，这就是短期记忆在工作。所有的上下文学习（In-context Learning）都是利用模型的短期记忆来学习。长期记忆（Long-term memory）：长期记忆就像是一个大仓库，能够存储我们的经验、知识和技能，而且这个存储时间可以非常长，甚至是一生。比如，你学会骑自行车的技能，即使多年不骑，你仍然记得怎么骑，这就是长期记忆。Agent 一般通过外部向量存储和快速检索实现。Memory Stream：“记忆” 存储了 Agent 过去的观察、思考和行动序列。正如人脑依靠记忆系统来回溯利用先前的经验制定策略和做出决策一样，Agent 也需要特定的记忆机制来确保其熟练处理一系列连续任务。+ MRKL（Modular Reasoning, Knowledge and Language）：MRKL 可以理解为是一种构建 AI 的方式，用于自主代理的神经符号结构，它将推理、知识理解和语言能力作为不同的模块来处理。就像搭积木，每个积木代表 AI 的一个能力，组合在一起就能让 AI 进行复杂的思考和交流。TALM（Tool Augmented Language Models）：TOOL 增强的语言模型，是指通过工具或技术来增强的语言处理模型，通常通过微调来实现。例如，一个 AI 聊天机器人，通过接入搜索引擎或其他数据库，能够更准确地回答问题或提供信息。子目标与分解（Subgoal and decomposition）：在解决问题时，Agent 经常会把一个大目标分解成几个小目标（子目标），从而实现对复杂任务的高效处理。比如，准备一顿晚餐，你可能需要先去购物（子目标 1），然后准备食材（子目标 2），最后烹饪（子目标 3）。反思与完善（Reflection and refinement）：Agent 可以对历史的动作进行自我批评和自我反思，从错误中吸取教训，并为未来的步骤进行改进，从而提高最终结果的质量。就像写完一篇文章后，你回顾并修改语法错误或不清晰的表达，使文章更加完善。思维链（Chain-of-thought, CoT）：已成为一种标准的提示技术，用于提高模型在复杂任务中的表现。模型被要求 “一步一步地思考”，将艰巨的任务分解为更小更简单的步骤。思维链将大任务转化为多个可管理的任务，并帮助人们理解模型的思维过程。思维链是解决问题时的逻辑推理过程。比如，你想找出为什么天空是蓝色的，你可能会想：“光是由不同颜色组成的... 蓝色光波短，容易被大气散射... 所以天空看起来是蓝色的。+ 思维树（Tree of Thoughts, ToT）：通过在任务的每一步探索多种推理可能性来扩展思维链。它首先将问题分解为多个思考步骤，并在每个步骤中生成多个想法，从而创建一个树状结构。搜索过程可以是 BFS（广度优先搜索）或 DFS（深度优先搜索）。思维村是一种图形化的思维链，它像一棵大树，每个分支代表一个思考的方向或想法，可以帮助我们组织和可视化复杂的思考过程。自我反思（Self Reflection）： 自我反思是指对自己的行为、想法或情感进行深入的思考和分析。就像在一天结束时，回想自己的所作所为，评估自己做得好的地方和需要改进的地方。ReAct：将任务中单独的行为和语言空间组合在一起，从而使大模型的推理和行动融为一体。该模式帮助大模型与环境互动（例如使用维基百科搜索 API），并以自然语言留下推理的痕迹。主要包括：Thought：ActionObservation。Reflexion：一个让 AI Agent 具备动态记忆和自我反思能力以提高推理能力的框架。沿用了 ReAct 中的设置，并提供简单的二进制奖励。每次行动后，AI Agent 都会计算一个启发式函数，并根据自我反思的结果决定是否重置环境以开始新的试验。这个启发式的函数可以判断是否当下的路径效率低下（耗时过长却没有成功）或包含幻觉（在环境中遇到一连串导致相同观察结果的相同行动），并在出现这两种情况下终止函数。Self-ask：Self-ask 可能是指 AI 系统在处理问题时，自主提出问题以引导其思考过程。这类似于人类在面对问题时，会自问：“我接下来应该做什么？” 来推动解决问题的进程。+ 后见链（Chain of Hindsight）：通过向模型明确展示一系列过去的输出结果，鼓励模型改进自身的输出结果，使得下一次预测的行动比之前的试验取得更好的成绩。算法蒸馏（Algorithm Distillation）将同样的理念应用于强化学习任务中的跨集轨迹。1.2. Agent 这个词意义、什么是Agent1.2.1. Agent由来有很多人或许会疑惑，Agent 这个东西看起来跟 LLM 也没差得那么远，那为啥最近突然 Agent 那么火，而不称之为 LLM-Application 或者其他的词呢？这就得从 Agent 的来历上说起了，因为 Agent 是个很古老的术语，甚至可以追溯至亚里士多德和休谟等人的言论。从哲学意义上讲，“代理人”是指具有行动能力的实体，而 “代理” 一词则表示这种能力的行使或体现。而从狭义上讲，“代理”通常是指有意行动的表现； 相应地，“代理人” 一词表示拥有欲望、信念、意图和行动能力的实体。需要注意的是，代理人不仅包括人类个体，还包括物理世界和虚拟世界中的其他实体。重要的是，“代理” 的概念涉及个人的自主性，赋予他们行使意志、做出选择和采取行动的能力，而不是被动地对外部刺激做出反应。在 20 世纪 80 年代中后期之前，主流人工智能界的研究人员对 Agent 相关概念的关注相对较少，这可能会让人感到惊讶。然而，从那时起，计算机科学和人工智能界对这一话题的兴趣就大大增加了。正如 Wooldridge 等人所言，我们可以这样定义人工智能：“它是计算机科学的一个子领域，旨在设计和构建基于计算机的、表现出智能行为各个方面的 Agent。” 因此，我们可以把 Agent 作为人工智能的核心概念。当 Agent 这一概念被引入人工智能领域时，其含义发生了一些变化。在哲学领域，Agent 可以是人、动物，甚至是具有自主性的概念或实体。然而，在人工智能领域，Agent 是一个计算实体。由于意识和欲望等概念对于计算实体来说似乎具有形而上学的性质，而且我们只能观察机器的行为，包括艾伦 - 图灵在内的许多人工智能研究者建议暂时搁置 Agent 是否 “真正” 在思考或是否真的拥有 “思想” 的问题。相反，研究人员采用其他属性来帮助描述 Agent，如自主性、反应性、主动性和社交能力等属性。也有研究者认为，智能是“看人的眼睛”；它不是与生俱来的、孤立的属性。从本质上讲，AI Agent 并不等同于 Philosophy Agent；相反，它是 Agent 这一哲学概念在人工智能领域的具体化。现在 AI Agent 也没有完全统一的名称，比如 “AI 代理”、“智能代理”、“智能体” 等等叫法，我们可以通过下面的文章还了解一下什么是 AI Agent，以及下了的技术原理及应用场景等。1.2.2. 什么是 AI AgentAI Agent（人工智能代理）是一种能够感知环境、进行决策和执行动作的智能实体。 不同于传统的人工智能， AI Agent 具备通过独立思考、调用工具去逐步完成给定目标的能力。比如，告诉 AI Agent 帮忙下单一份外卖，它就可以直接调用 APP 选择外卖，再调用支付程序下单支付，无需人类去指定每一步的操作。 Agent 的概念由 Minsky 在其 1986 年出版的《思维的社会》一书中提出，Minsky 认为社会中的某些个体经过协商之后可求得问题的解，这些个体就是 Agent。他还认为 Agent 应具有社会交互性和智能性。 Agent 的概念由此被引入人工智能和计算机领域，并迅速成为研究热点。但苦于数据和算力限制， 想要实现真正智能的 AI Agents 缺乏必要的现实条件。大语言模型和 AI Agent 的区别在于 AI Agent 可以独立思考并做出行动，和 RPA 的区别在于它能够处理未知环境信息。 ChatGPT 诞生后， AI 从真正意义上具备了和人类进行多轮对话的能力，并且能针对相应问题给出具体回答与建议。 随后各个领域的 “Copilot” 推出，如 Microsoft 365 Copilot、 Microsoft Security Copilot、GitHub Copilot、 Adobe Firefly 等，让 AI 成为了办公、代码、设计等场景的“智能副驾驶”。AI Agent 和大模型的区别在于：大模型与人类之间的交互是基于 prompt 实现的，用户 prompt 是否清晰明确会影响大模型回答的效果，例如 ChatGPT 和这些 Copilot 都需要明确任务才能得到有用的回答。AI Agent 的工作仅需给定一个目标，它就能够针对目标独立思考并做出行动，它会根据给定任务详细拆解出每一步的计划步骤，依靠来自外界的反馈和自主思考，自己给自己创建 prompt，来实现目标。如果说 Copilot 是 “副驾驶”，那么 Agent 则可以算得上一个初级的 “主驾驶”。和传统的 RPA 相比， RPA 只能在给定的情况条件下，根据程序内预设好的流程来进行工作的处理，在出现大量未知信息、难以预测的环境中时， RPA 是无法进行工作的， AI Agent 则可以通过和环境进行交互，感知信息并做出对应的思考和行动。我们看见的 AI Agent 往往以问答机器人作为交互入口，通过自然语言触发全自动的工作流，中间没有人工介入。由于人只负责发送指令，并不参与对 AI 结果的反馈。1.2.3. 为什么需要 AI AgentLLM 的一些缺点：会产生幻觉结果并不总是真实的对时事的了解有限或一无所知很难应对复杂的计算没有行动能力没有长期记忆能力比如让 ChatGPT 买一杯咖啡，ChatGPT 给出的反馈一般类似 “无法购买咖啡，它只是一个文字 AI 助手” 之类的回答。但你要告知基于 ChatGPT 的 AI Agent 工具让它买一杯咖啡，它会首先拆解如何才能为你购买一杯咖啡并拟定代用某 APP 下单以及支付等若干步骤，然后按照这些步骤调用 APP 选择外卖，再调用支付程序下单支付，过程无需人类去指定每一步操作。这就是 AI Agent 的用武之地，它可以利用外部工具来克服这些限制。这里的工具是什么呢？工具就是代理用它来完成特定任务的一个插件、一个集成 API、一个代码库等等，例如：Google 搜索：获取最新信息Python REPL：执行代码Wolfram：进行复杂的计算外部 API：获取特定信息而 LangChain 则是提供一种通用的框架通过大语言模型的指令来轻松地实现这些工具的调用。我们都知道在执行一个复杂的任务时，我们需要考虑多方面的影响因素，将复杂任务拆分为细小的子任务去执行。AI Agent 的诞生就是为了处理各种复杂任务的，就复杂任务的处理流程而言 AI Agent 主要分为两大类：行动类、规划执行类。总而言之，AI Agent 就是结合大模型能去自动思考、规划、效验和执行的一个计算体，以完成特定的任务目标，如果把大模型比作大脑，那 AI Agent 可以理解为小脑 + 手脚。1.2.4. AI Agent 对比人类与其它 AI 协同的区别AI Agent 较日前广泛使用的 Copilot 模式更加独立。对比 AI 与人类的交互模式，目前己从过去的嵌入式工具型 AI （例如 siri）向助理型 AI 发展。目前的各类 AI Copilot 不再是机械地完成人类指令，而是可以参与人类工作流，为诸如编写代码、策划活动、优化流程等事项提供建议，与人类协同完成。而AI Agent 的工作仅需给定一个目标，它就能够针对目标独立思考并做出行动，它会根据给定任务详细拆解出每一步的计划步骤，依靠来自外界的反馈和自主思考，自己给自己创建 prompt，来实现目标。如果说 Copilot 是 “副驾驶”，那么 Agent 则可以算得上一个初级的 “主驾驶”。1.3. AI Agent 案例1.3.1. AI 虚拟小镇论文链接：https://arxiv.org/pdf/2304.03442v1.pdfDemo 地址：https://reverie.herokuapp.com/arXiv_Demo/临近情人节，生活在名为 “Smallville” 小镇上的咖啡店长伊莎贝拉试图举办一场情人节派对，她邀请了自己的闺蜜玛利亚一起布置派对，而玛利亚得知有这么一场派对后，偷偷邀请了暗恋对象克劳斯一同前往…… 在小镇的同一时间线上，年近六旬的汤姆对小镇即将举办的市长选举有着强烈的兴趣，作为一名对政治格外关心的已婚中年男人，他拒绝了伊莎贝拉的情人节派对邀请。以上情节并未发生在现实世界，但也不是人类编造的虚构剧情，它来自一个由 25 名 AI 角色组成的虚拟小镇。而这个小镇上发生的任何事件，都是 AI 之间通过互动随机生成的结果，目前这个小镇已经井井有条地运转了两天。1.3.2. AutoGPT 做市场调研假装自己经营一家鞋公司，给 AutoGPT 下达的命令是对防水鞋进行市场调查，然后让其给出 top5 公司，并报告竞争对手的优缺点 :首先，AutoGPT 直接去谷歌搜索，然后找防水鞋综合评估 top 5 的公司。一旦找到相关链接，AutoGPT 就会为自己提出一些问题，例如「每双鞋的优缺点是什么、每款排名前 5 的防水鞋的优缺点是什么、男士排名前 5 的防水鞋」等。之后，AutoGPT 继续分析其他各类网站，并结合谷歌搜索，更新查询，直到对结果满意为止。期间，AutoGPT 能够判断哪些评论可能偏向于伪造，因此它必须验证评论者。执行过程中，AutoGPT 甚至衍生出自己的子智能体来执行分析网站的任务，找出解决问题的方法，所有工作完全靠自己。结果是，AutoGPT 给出了 top 5 防水鞋公司的一份非常详细的报告，报告包含各个公司的优缺点，此外还给出了一个简明扼要的结论。全程只用了 8 分钟，费用为 10 美分。期间也完全没有优化。AutoGPT 官方公开 Demo 演示：https://www.bilibili.com/video/BV1HP411B7cG/?vd_source=6a57ee58a99488dc38bda2374baa1c102. AI Agent 的框架上面介绍了 AI Agent 是什么以及一些案例演示，下面的内容将对 AI Agent 背后的技术进行分析。一个基于大模型的 AI Agent 系统可以拆分为大模型、规划、记忆与工具使用四个组件部分。6 月，OpenAI 的应用研究主管 Lilian Weng 撰写了一篇博客，认为 AI Agent 可能会成为新时代的开端。她提出了 Agent=LLM + 规划技能 + 记忆 + 工具使用的基础架构，其中 LLM 扮演了 Agent 的 “大脑”，在这个系统中提供推理、规划等能力。2.1. 大模型 + 规划： Agent 的"大脑"，通过思维链能力实现任务分解LLM 具备逻辑推理能力，Agent 可以将 LLM 的逻辑推理能力激发出来。当模型规模足够大的时候，LLM 本身是具备推理能力的。在简单推理问题上，LLM 已经达到了很好的能力；但在复杂推理问题上，LLM 有时还是会出现错误。事实上，很多时候用户无法通过 LLM 获得理想的回答，原因在于 prompt 不够合适，无法激发 LLM 本身的推理能力，通过追加辅助推理的 prompt，可以大幅提升 LLM 的推理效果。在《Large language models are zero-shot reasoners》这篇论文的测试中，在向 LLM 提问的时候追加 “Let’s think step by step” 后，在数学推理测试集 GSM8K 上的推理准确率从 10.4% 提升到了 40.7%。而 Agent 作为智能体代理，能够根据给定的目标自己创建合适的 prompt，可以更好地激发大模型的推理能力。通常情况下，一项复杂的任务往往涉及许多步骤。AI Agent 需要首先拆解这些步骤，并提前做好计划。任务的分解的环节可以由三种方式完成：1）在大模型输入简单的提示，比如 “XYZ 的步骤”，或者 “实现 XYZ 的子目标是什么？”；2）使用特定任务的指令，比如在需要写小说的时候要求大模型 “写一个故事大纲”；3）通过人工提供信息。当下普遍的技术模式包括思维链和思维树思维链（Chain of Thoughts, CoT）思维链（Chain of Thoughts）已成为一种标准的提示技术，用于提高模型在复杂任务中的表现。模型被要求 “一步一步地思考”，将艰巨的任务分解为更小更简单的步骤。思维链将大任务转化为多个可管理的任务，并帮助人们理解模型的思维过程。以一个数学题为例，标准 Prompting，模型输入：问：罗杰有5个网球，他又买了两盒网球，每盒有3个网球。他现在有多少网球？ 答：答案是11 问：食堂有23个苹果，如果他们用掉20个后又买了6个。他们现在有多少个苹果？ 模型输出： 答：答案是27可以看到模型无法做出正确的回答。但如果说，我们给模型一些关于解题的思路，就像我们数学考试，都会把解题过程写出来再最终得出答案，不然无法得分。CoT 做的就是这件事，示例如下：CoT Prompting，模型输入：问：罗杰有5个网球，他又买了两盒网球，每盒有3个网球。他现在有多少网球？ 答：罗杰一开始有5个网球，2盒3个网球，一共就是2*3=6个网球，5+6=11。答案是11. 问：食堂有23个苹果，如果他们用掉20个后又买了6个。他们现在有多少个苹果？ 模型输出： 答：食堂原来有23个苹果，他们用掉20个，所以还有23-20=3个。他们又买了6个，所以现在有6+3=9。答案是9 可以看到，类似的算术题，思维链提示会在给出答案之前，还会自动给出推理步骤。思维链提示，就是把一个多步骤推理问题，分解成很多个中间步骤，分配给更多的计算量，生成更多的 token，再把这些答案拼接在一起进行求解。思维树（Tree of Thoughts）思维树（Tree of Thoughts）通过在任务的每一步探索多种推理可能性来扩展思维链。它首先将问题分解为多个思考步骤，并在每个步骤中生成多个想法，从而创建一个树状结构。搜索过程可以是 BFS（广度优先搜索）或 DFS（深度优先搜索）。ToT 做 4 件事：思想分解、思想生成器、状态评估器和搜索算法。ToT Prompt 的例子如下:假设三位不同的专家来回答这个问题。所有专家都写下他们思考这个问题的第一个步骤，然后与大家分享。然后，所有专家都写下他们思考的下一个步骤并分享。以此类推，直到所有专家写完他们思考的所有步骤。只要大家发现有专家的步骤出错了，就让这位专家离开。请问...另一方面，试错和纠错在现实世界的任务决策中是不可避免且至关重要的步骤。自我反思帮助 AI Agent 完善过去的行动决策、纠正以前的错误、从而不断改进。当下的技术包括 ReAct、Reflexion、后见链（Chain of Hindsight）等ReActReAct：将任务中单独的行为和语言空间组合在一起，从而使大模型的推理和行动融为一体。该模式帮助大模型与环境互动（例如使用维基百科搜索 API），并以自然语言留下推理的痕迹。React 论文《ReAct: Synergizing Reasoning and Acting in Language Models》:https://react-lm.github.io/问题：除了Apple遥控器，还有什么其他设备可以控制相关软件？相关软件指的是Apple遥控器最早可以控制的软件。 说明： 1.Apple遥控器最早只能控制Front Row软件。 2.Front Row软件可以被两种设备控制，Apple遥控器和键盘的功能键。 3.所以，正确答案是键盘的功能键。 传统方式1，直接问LLM。得到结果： iPod。 答案错误，显然是在胡言乱语。因为LLM的内容生成，是根据之前所有的字预测后续内容，所以，我推测，出现这个结果很可能因为，LLM其实并不知道相关答案，只是Apple遥控器和iPod的语义很接近，所以才得出iPod这个结论。 传统方法2，思维链。得到结果： 想法：让我们一步一步思考这个问题。Apple遥控器可以控制Apple电视。Apple电视可以被iPhone、iPad和iPod Touch控制。 答案：iPhone、iPad和iPod Touch控制。 答案错误，思维链范式，其实也是在胡编，因为它不知道答案。 传统方法3，动作范式。得到结果： 动作1：搜索【Apple 遥控器】 结果1：Apple遥控器是一种遥控器……最早可以控制“Front Row”…… 动作2：搜索【Front Row】 结果2：无结果 动作3：搜索【Front Row软件】 结果3：FrontRow是一种过时软件…… 动作4：完成【是的】 答案错误，动作范式，即隐式推理，也没有得到正确答案。不难理解，隐式推理对LLM的推理能力要求很高，因为他会隐去思考过程。我觉得当LLM推理能力达到一定程度时，应该也能得出正确答案。 ReAct方法，即推理+动作。得到结果： 想法1：我需要搜索Apple遥控器，并找到Apple遥控器最早可以控制的软件。 动作1：搜索【Apple 遥控器】 结果1：Apple遥控器是一种遥控器……最早可以控制“Front Row”…… 想法2：Apple遥控器最早可以控制Front Row。我需要搜索Front Row下一步，找出还有什么其他设备可以控制他 动作2：搜索【Front Row】 结果2：无结果，可以试试“Front Row Seat to Earth”和“Front Row软件” 想法3：Front Row没有找到，我可以搜索“Front Row软件” 动作3：搜索【Front Row软件】 结果3：FrontRow是一种过时软件……可以被Apple遥控器和键盘功能键控制。 想法4：现在我知道答案了。 动作4：完成【键盘功能键】 答案正确。通过显式推理，加上动作，LLM Agent自主找到了答案。整个过程感觉就像是个不是特别聪明的孩子，要把想法写出来，然后去综合所有想法和观察，接着再做出相应的动作。但显然这个方法很有效，它最终找到了答案。ReflexionReflexion：一个让 AI Agent 具备动态记忆和自我反思能力以提高推理能力的框架。沿用了 ReAct 中的设置，并提供简单的二进制奖励。每次行动后，AI Agent 都会计算一个启发式函数，并根据自我反思的结果决定是否重置环境以开始新的试验。这个启发式的函数可以判断是否当下的路径效率低下（耗时过长却没有成功）或包含幻觉（在环境中遇到一连串导致相同观察结果的相同行动），并在出现这两种情况下终止函数。2.2. 记忆：用有限的上下文长度实现更多的记忆记忆模块负责存储信息，包括过去的交互、学习到的知识，甚至是临时的任务信息。对于一个智能体来说，有效的记忆机制能够保障它在面对新的或复杂的情况时，调用以往的经验和知识。例如，一个具备记忆功能的聊天机器人可以记住用户的偏好或先前的对话内容，从而提供更个性化和连贯的交流体验。对 AI 智能体系统的输入会成为系统的记忆，与人类的记忆模式可实现一一映射。记忆可以定义为用于获取、存储、保留以及随后检索信息的过程。人脑中有多种记忆类型，如感觉记忆、短期记忆和长期记忆。而对于 AI Agent 系统而言，用户在与其交互过程中产生的内容都可以认为是 Agent 的记忆，和人类记忆的模式能够产生对应关系。感觉记忆就是作为学习嵌入表示的原始输入，包括文本、图像或其他模态；短期记忆就是上下文，受到有限的上下文窗口长度的限制；长期记忆则可以认为是 Agent 在工作时需要查询的外部向量数据库，可通过快速检索进行访问。目前 Agent 主要是利用外部的长期记忆，来完成很多的复杂任务，比如阅读 PDF、联网搜索实时新闻等。任务与结果会储存在记忆模块中，当信息被调用时，储存在记忆中的信息会回到与用户的对话中，由此创造出更加紧密的上下文环境。为了解决有限记忆时间的限制，通常会用到外部存储器。常见的做法是将信息的嵌入表示保存到可支持快速的最大内积搜索（MIPS）的向量存储数据库中。向量数据库通过将数据转化为向量存储，解决大模型海量知识的存储、检索、匹配问题。向量是 AI 理解世界的通用数据形式，大模型需要大量的数据进行训练，以获取丰富的语义和上下文信息，导致了数据量的指数级增长。向量数据库利用人工智能中的 Embedding 方法，将图像、音视频等非结构化数据抽象、转换为多维向量，由此可以结构化地在向量数据库中进行管理，从而实现快速、高效的数据存储和检索过程，赋予了 Agent“长期记忆”。同时，将高维空间中的多模态数据映射到低维空间的向量，也能大幅降低存储和计算的成本，向量数据库的存储成本比存到神经网络的成本要低 2 到 4 个数量级。Embedding 技术和向量相似度计算是向量数据库的核心。Embedding 技术是一种将图像、音视频等非结构化数据转化为计算机能够识别的语言的方法，例如常见的地图就是对于现实地理的 Embedding，现实的地理地形的信息其实远远超过三维，但是地图通过颜色和等高线等来最大化表现现实的地理信息。在通过 Embedding 技术将非结构化数据例如文本数据转化为向量后，就可以通过数学方法来计算两个向量之间的相似度，即可实现对文本的比较。向量数据库强大的检索功能就是基于向量相似度计算而达成的，通过相似性检索特性，针对相似的问题找出近似匹配的结果，是一种模糊匹配的检索，没有标准的准确答案，进而更高效地支撑更广泛的应用场景。2.3. 工具：懂得使用工具才会更像人类AI Agent 与大模型的一大区别在于能够使用外部工具拓展模型能力。懂得使用工具是人类最显著和最独特的地方，同样地，也可以为大模型配备外部工具来让模型完成原本无法完成的工作。ChatGPT 的一大缺点在于，其训练数据只截止到了 2021 年底，对于更新一些的知识内容它无法直接做出回答。虽然后续 OpenAI 为 ChatGPT 更新了插件功能，能够调用浏览器插件来访问最新的信息，但是需要用户来针对问题指定是否需要使用插件，无法做到完全自然的回答。AI Agent 则具备了自主调用工具的能力，在获取到每一步子任务的工作后，Agent 都会判断是否需要通过调用外部工具来完成该子任务，并在完成后获取该外部工具返回的信息提供给 LLM，进行下一步子任务的工作。OpenAI 也在 6 月为 GPT-4 和 GPT-3.5 更新了函数调用的功能，开发者现在可以向这两个大模型描述函数，并让模型智能地选择输出包含调用这些函数的参数的 JSON 对象。这是一种更可靠地将 GPT 的功能与外部工具和 API 相连的新方法，允许开发者更可靠地从模型中获得结构化的数据，为 AI 开发者提供了方便。实现调用工具的方法就是编写大量的工具调用数据集来进行模型的微调。总结一下 AI Agent 的原理主要包括感知、分析、决策和执行四大能力。这些能力相互协同，构成了 AI Agent 的基本工作原理。首先是感知能力，通过传感器获取外部环境的信息，使 AI Agent 能够对周围的情况有所了解。其次是分析能力，通过对感知到的信息进行分析和处理，提取有用的特征和模式。然后是决策能力，AI Agent 基于分析结果进行决策，制定相应的行动计划。最后是执行能力，将决策转化为具体的行动，实现任务的完成。这四大能力相互配合，使得 AI Agent 能够在复杂的环境中高效地运行和执行任务。3. AI Agent 的应用进展3.1. AutoGPT：推动 AI Agent 研究热潮AutoGPT 将 AI Agent 概念带 “出圈” 。 2023 年 3 月， 开发人员 Significant Ggravitas 在 GitHub 上发布了开源项目 AutoGPT，它以 GPT-4 为驱动基础， 允许 AI 自主行动，完全无需用户提示每个操作。给 AutoGPT 提出目标，它就能够自主去分解任务、执行操作、完成任务。 AutoGPT 仍存在成本高、响应慢、出现死循环 bug 等缺点。 Auto-GPT 采用的是 GPT-3.5 和 GPT-4 的 API， 而 GPT-4 的单个 token 价格为 GPT-3.5 的 15 倍。 假设每次任务需要 20 个 step（理想状况下），每个 step 会花费 4K tokens 的 GPT-4 使用量， prompt 和回复的平均每一千 tokens 花费是 0.05 美元（因为实际使用中回复使用的 token 远远多于 prompt），假设汇率为 1 美元 = 7 人民币，那么花费就是 2040.05*7=28 元人民币。而这仅是理想状况下，正常使用中经常出现需要拆分出几十上百个 step 的任务，这时单个任务的处理成本就会难以接受。而且 GPT-4 的响应速度远远慢于 GPT-3.5，导致 step 一多的时候任务处理会变得很慢。并且 AutoGPT 在遇到 GPT-4 无法解决的 step 问题时，就会陷入死循环中，不断重复没有意义的 prompt 和输出，造成大量的资源浪费和损失。3.2. 游戏领域应用：西部世界小镇斯坦福西部世界小镇首次创造了多个智能体生活的虚拟环境。 2023 年 4 月， 斯坦福大学的研究者们发表了名为《 Generative Agents: Interactive Simulacra of Human Behavior》 的论文，展示了一个由生成代理（ Generative Agents）组成的虚拟西部小镇。 这是一个交互式的沙盒环境，在小镇上，生活着 25 个可以模拟人类行为的生成式 AI Agent。它们会在公园里散步，在咖啡馆喝咖啡，和同事分享当天的新闻。 甚至一个智能体想举办情人节排队，这些智能体在接下来的两天里，会自动传播派对邀请的消息，结识新朋友，互相约对方一起去派对，还会彼此协调时间，在正确的时间一起出现在派对上。 这种 Agent 具有类似人的特质、独立决策和长期记忆等功能，它们更接近于 “原生 AI Agent”。在这种合作模式下， Agent 不仅仅是为人类服务的工具，它们也能够在数字世界中与其他 Agent 建立社交关系。西部世界小镇中 Agents 的架构 记忆流包含大量的观察、检索过程记忆流是西部世界小镇中 AI Agents 的架构核心。 小镇中的 Agents 包含三大重要的基本要素：记忆、反思和规划，相比前面提到的几个核心组件略有调整。这三大基本要素都基于一个核心：记忆流（ Memory Stream），记忆流存储了 Agent 的所有经历记录，是一个包含了多个观察的列表，每个观察都包含了事件描述、创建时间以及最近一次访问的时间戳， 观察可以是 Agent 自己的行为或从其他人那里感知到的行为。为了检索最重要的记忆以传递给语言模型，研究者确定了检索过程中需要考虑的三个因素：最近性、重要性和相关性。通过确定每条记忆基于这三个因素的分数，最后加总起来得到权重最高的记忆，作为 prompt 的一部分传递给大模型，以此来决定 Agent 的下一步动作。反思和规划都是基于记忆流中的观察来进行更新与创建的。3.3. HyperWrite：推出首个个人 AI 助理 AgentHyperWrite 推出首个个人 AI 助理 Agent。 2023 年 8 月 3 日， 人工智能初创公司 HyperWrite 正式推出了 AI Agent 的应用 Personal Assistant，希望可以成为人类的 “数字助手”。 作为 HyperWrite 的投资者，生成式 AI 初创企业 Cohere 联合创始人 Aidan Gomez 表示：“我们将开始第一次看到真正的个人 AI 助理” 。作为个人助理 Agent，它可以帮助用户整理邮箱并起草回复、帮助用户订机票、订外卖、整理领英上适合的简历等，将 AI 能力无缝接入到用户的日常生活和工作流中。目前该工具还处于试用阶段，主要适用于网页浏览器场景。Personal Assistant 可以自主在浏览器中完成指定任务。 Personal Assistant 现在是以浏览器拓展插件的形式来提供服务的，用户在安装完插件并注册账户后即可开始试用。其初始页面类似于 New Bing 这样的搜索引擎，仅提供一个自然语言交互的聊天框。用户输入其想要完成的目标后，该插件就会新建一个浏览器页面，并在页面以侧边栏形式展示其进行的每一步操作与思路。以 “给我一些美国现在关于 AI Agent 的新观点” 这一目标为例，该个人助理会先去进行相关的搜索，然后打开相关的文章页面进行阅读并总结观点，在完成阅读和总结后，它会将结果汇总并返回到聊天框中，整体用时约为 2 分钟。目前个人 AI 助理能力仍旧有限，但潜力可期。目前 HyperWrite Personal Assistant 仅为 0.01 版本，其功能仍相对有限，也存在一些出错的问题，并且响应过程也较为缓慢。但我们认为， AI Agent 自此迈出了走向个人消费者领域的第一步，随着未来大模型能力的进一步提升，以及算力基础设施的不断普惠，个人 AI 助理的发展潜力值得期待。3.4. ModelScopeGPT：国内大模型调用工具ModelScopeGPT 是阿里云 MaaS 范式在模型使用层的重要映射，旨在建立大模型生态。 阿里云表示，构建 ModelScopeGPT 的数据集和训练方案将会对外开放，供开发者自行调用，开发者可以根据需要对不同的大模型和小模型进行组合， 帮助开发者多、快、好、省地使用大模型。 目前在 AI 开发者圈，魔搭社区已成中国大模型第一门户。所有模型生产者都可以上传自己的模型，验证模型的技术能力和商业化模式，并与其他社区模型进行协作，共同探索模型应用场景。ModelScopeGPT 则实现了将模型生产力进行自由组合，继续强化阿里云在大模型生态建设中的领先地位。3.5. Inflection AI： 高情商个人 AI --- PiInflection AI 推出主打情感陪伴的个人 AI——Pi。 Inflection AI 是一家成立于 2022 年的人工智能初创公司，目前公司的估值已经突破 40 亿美元，在人工智能领域仅次于 OpenAI。在 2023 年 5 月，公司推出了旗下的个人 AI 产品 Pi。 与 ChatGPT 不同， Pi 从未以专业性与替代人工作为宣传。它不能写代码，也不能帮我们生产原创内容，与时下流行的通用聊天机器人相反， Pi 只能进行友好的对话，提供简洁的建议，甚至只是倾听。它的主要特征是富有同情心、 谦虚好奇、幽默创新，具有良好的情商，可以根据用户的独特兴趣和需求提供无限的知识与陪伴。 Inflection 自开发 Pi 开始，就确定了 Pi 将作为个人智能（ Personal Intelligence） ，而不仅仅是辅助人工作的工具。Pi 的核心是公司研发的 Inflection-1 大模型，性能媲美 GPT-3.5。 Inflection-1 是 Inflection AI 推出的大模型，根据公司的评估测试， Inflection-1 在多任务语言理解、常识问题等多项测试中的性能都略胜于 GPT-3.5、 LLaMA 等常用的大模型，但在代码能力上要落后于 GPT-3.5。不过这是公司的差异化竞争所在， Pi 作为一个以情感陪伴为主的 Agent 并不需要拥有很强的代码和辅助工作能力。和辅助工作的 Agent 不同， Pi 能够满足更多的情感陪伴需求。作为一个具有高情商的 AI Agent，Pi 能够以更加日常和生活化的语言和用户进行交流，而不是以一个冰冷的工作 AI 的口吻。 Pi 的回复非常贴近生活， 语气十分得体，而它对你当下状态和事态发展的关心就像心理医生或者你最好的朋友。当 Pi 在回复可能带有负面情绪的问题时，它也会避免使用任何俏皮的表情或者轻快的口吻去冒犯用户。 它甚至会在回复中使用 emoji，让用户觉得更像是和真正的人类在进行对话一样。Pi 还能够记住与用户的对话内容，并随着时间的推移而更加了解用户。 Pi 的出现，弥补了传统型人工智能对人类情绪欲望的忽视。我们认为，类似于 Pi 这样能够提供情绪价值的个人 AI Agent 存在着较大的市场空间。3.6. AgentBench： LLM 的 Agent 能力评估标准AgentBench 评价 LLM 作为 Agent 的能力 常用的 LLM 的 Agent 能力排名 清华大学联合团队提出世界首个大模型 AI Agent 能力的评估标准。 尽管当前 AI 智能体研究异常火热，但 AI 行业缺乏一个系统化和标准化的基准来评估 LLM 作为 Agent 的智能水平。 2023 年 8 月， 清华大学、俄亥俄州立大学、加州大学伯克利分校的研究团队便提出了首个系统性的基准测试——AgentBench，用来评估 LLM 作为 Agent 在各种真实世界挑战和 8 个不同环境中的能力表现（如推理和决策能力）。 这 8 个环境分别是：操作系统、数据库、知识图谱、卡牌对战游戏、家务事、横向思维谜题、 网络购物、网页浏览。基于这 8 个环境，研究团队设计了不同的真实世界挑战，涵盖了代码场景和生活场景，比如用 SQL 语言从一些表格里提取需要的数、 玩卡牌游戏取得胜利、从网页预订机票等。GPT-4 性能遥遥领先，开源模型能力显著弱于闭源模型。 研究者选择了 25 种主流的大模型 API 来进行 Agent 能力评估，涵盖了闭源模型（如 OpenAI 的 GPT-4、 GPT-3.5 等）和开源模型（ LLaMA 2 和 Baichuan 等）。 根据测试结果来看， GPT-4 基本上在所有环境中都占据领先地位，是名副其实的当前大模型能力边界。 闭源模型 Anthropic 的 Claude 以及 OpenAI 的 GPT-3.5 水平相差不大，而常见的一些开源模型 Vicuna、 Dolly 等由于尺寸和闭源模型相差了至少一个数量级，性能评估显著较弱。 我们认为，虽然 LLM 能够在自然语言交流等 NLP 上达到基本的类人水平，但在关注行动有效性、上下文长度记忆、多轮对话一致性和代码生成执行等 Agent 重要能力上的表现仍旧相对落后，基于 LLM 的 AI Agent 的发展空间仍具潜力。3.7. AI Agent 在安全业务里应用场景目前在网络安全垂直领域中，还是以 Microsoft Security Copilot 为主要产品形态的形势出现，还是以 “副驾” 来作为定位，还没有出现安全业务中的 AI Agent，但相信不久一定会有病毒分析的 AI Agent、红军 AI Agent、蓝军 AI Agent 等等。4. AI Agent 未来发展趋势判断结合目前学术界和产业界基于 LLM 开发的 AI Agent 应用情况，我们将目前 AI Agent 划分为两大类：自主智能体，力图实现复杂流程自动化。当给定自主智能体一个目标时，它们能自行创建任务、完任务、创建新任务、重新确定任务列表的优先级、完成新的首要任务，并不断重复这个过程，直到完成目标。准确度要求高，因而更需要外部工具辅助减少大模型不确定性的负面影响。智能体模拟，力图更加拟人可信。 分为强调情感情商的智能体以及强调交互的智能体，后者往往是在多智能体环境中，可能涌现出超越设计者规划的场景和能力，大模型生成的不确定性反而成为优势，多样性使其有望成为 AIGC 重要组成部分。《AIGC 应用层十大趋势》报告中调研表明，所有企业都认为 AI Agent 是 AIGC 发展的确定性方向，50% 的企业已经在某项工作中进行了 AI Agent 的试点，另有 34% 的企业正在制定 AI Agent 的应用计划。这个报告，也对 AI Agent 发展趋势做了两点预测：AI Agent 让 “人机协同” 成为新常态，个人与企业步入 AI 助理时代。AI Agent 能够帮助未来企业构建以 “人机协同” 为核心的智能化运营新常态。AI Agent 变革未来生产力的组织形式，对抗组织熵增。未来企业工作任务将在 AIGC 的助推作用下变得日益原子化和碎片化，复杂的流程将被无限拆解，再进行灵活的编排和组合，每个环节的效能和潜力都将被 AI 持续挖掘。从供给端看，“人 + AI 数字员工”的高效协同模式将为大型企业对抗组织熵增提供理想的解法。4.1. 自主智能体：自动化，新一轮生产力革命自主智能体，力图实现复杂流程自动化。真格基金管理合伙人戴雨森将 AI 和人类协作的程度类比为自动驾驶的不同阶段， AI Agent 约为自动驾驶的 L4 阶段， Agent 完成任务，人进行外部辅助和监督。自主智能体有望带来软件行业交互方式和商业模式变革：交互方式变革： 相比过去的 APP / 软件，从人适应应用变成应用适应人， Agent 的决策 / 规划 / 执行等环节需要更深的用户需求理解以及更强的工程细节打磨。如目前 Agent 运行中常常遇见无休止的扩展、误解输出格式等问题，这类问题不单单依靠大模型能力提升，对 Agent 架构的设计和垂类数据的学习也有要求。商业模式变革： 按服务内容收费转换成按 token 收费，对 Agent 功能实用性要求更高。基座大模型能力固然重要，但其只能解决下限问题，在实际企业应用场景中自主智能体的架构设计、工程能力、垂类数据质量等也至关重要，垂类 / 中间件玩家亦有机会。 准确度和效率是自主智能体重要指标（决策式 AI 更擅长做的事，也意味着更低的容错度），企业对于低门槛定制 AGENT 也存在需求，专注具体领域 / 提供 AGENT 框架的玩家仍有可为。典型代表：AutoGPT代码开发类 GPT Engineer科研类 GPT Researcher创作类 ShortGPT+ 多智能体： AGENT 团队完成复杂开发任务，如 MetaGPT、AutoGEN4.2. 智能体模拟：拟人化，新的精神消费品陪伴类智能体强调情感情商等人类特征，具有 “人格”，且能够记住与用户的历史交流。LLM 在自然语言理解能力上的重要突破使陪伴类智能体在技术上成为可能，GPT4 在情商上显著高于以往其他大模型，随着大模型情商迭代、多模态技术发展，有望出现更加立体拟人可信、能够提供较高情绪价值的陪伴智能体。研究机构认为国内情绪消费市场仍有较大想象空间（社会婚姻观念转变、现代工作生活节奏紧张下，国民孤独感增加），陪伴类智能体或受益于情绪消费趋势红利，成为 LLM 时代重要的 AI 原生应用。从用户陪伴性需求的第一性原理出发， 我们预计陪伴类智能体大部分商业价值集中在 IP 上， 基于此我们更加看好当前具备丰富 IP 储备或者能让用户定制智能体的玩家：参考人的陪伴： 陌生人社交和秀场直播属于线上陪伴代表性应用，前者核心问题在于用户间建立一定情感联系后会转到最常用的社交平台，后者用户价值会逐渐集中到头部主播，而非平台。参考物的陪伴： 潮玩等消费品有一定的陪伴属性，受众大部分支出花在自己喜欢的 IP。典型代表：陪伴类：高情商、具备人格特征，如 Pi平台化娱乐化，如 Character.AI、 Glow 等游戏世界 AI 玩家，如 Voyager+ Smallville 小镇，类西部世界的模拟社会+ 网易《逆水寒》 手游， AI NPC 提高玩家体验昆仑万维《Club Koala》 虚拟世界更可信总结至此，本文的探讨已圆满落幕，我们深入剖析了AI Agent这一前沿科技领域的全貌。从基础概念的澄清，到技术原理的细致解构，再跨越至丰富多样的应用场景探索，直至展望其激动人心的未来发展趋势，每一步都凝聚着对AI Agent技术潜力的无限憧憬。诚然，文中提及的诸多项目尚处于学术研究与实践探索的初期阶段，以论文形式呈现的实验性成果，恰似璀璨星辰，预示着大模型技术未来航向的无限可能。这些星星之火，或将点燃AI应用的燎原之势，催生出前所未见的新领域、新机遇，为社会的每一个角落注入智能的活力。展望未来，AI Agent技术有望在未来五年内实现跨越式发展，其普及程度将远超预期，深刻渗透并重塑千行百业的运作模式。我们期待，这一技术不仅能够在效率上实现质的飞跃，为传统行业带来颠覆性的改变，更能作为创新驱动的核心力量，开启一个智能互联、高效协同的新时代。让我们共同见证，AI Agent技术如何携手各行各业，绘制出一幅幅生动绚丽的智能未来图景。参考链接1.细说复旦大学，斯坦福大学智能代理 AI-Agent（二更） https://www.zhihu.com/tardis/zm/art/657737603?source_id=1003﻿2.AI Agent，启动！复旦 NLP 团队发 86 页长文综述，智能体社会近在眼前 https://cloud.tencent.com/developer/article/2351355https://zhuanlan.zhihu.com/p/6566767173.AI Agent 引爆 AGI 时代，十篇研报透视 AI 智能体的现在与未来 https://mp.weixin.qq.com/s/oc08ID6FUb85_wfNeRrDtw4.一篇文章掌握智能体（Agent ) 产品的分析框架 https://mp.weixin.qq.com/s/k0utZChaXQQJza3YCaxJSw5.《综述：全新大语言模型驱动的 Agent》——4.5 万字详细解读复旦 NLP 和米哈游最新 Agent Survey https://zhuanlan.zhihu.com/p/6566767176.斯坦福的「虚拟小镇」开源了：25 个 AI 智能体照进《西部世界》 https://cloud.tencent.com/developer/article/23259087.OpenAI 现场演示官方版 AutoGPT！创作画画发推一条龙，自主调用外部应用完成任务 https://wallstreetcn.com/articles/36872518.数字员工、超级个体、具身智能，AI Agent 未来发展十大研究方向 https://baike.baidu.com/tashuo/browse/content?id=7e0fcb27cb24c9f4478d8de59.九大最热门的开源 AI Agent 框架 https://www.chatdzq.com/news/1753957671170928641
原文：Efficient Information Retrieval with RAG Workflow - 2023.10.09实现： Implementing RAG with Langchain and Hugging Face - 2023.10.16检索增强生成（RAG）突破了知识限制，融入外部数据，并增强了上下文理解。由于其能够高效整合外部数据而无需持续微调，这一技术正变得越来越受欢迎。LLM Knowledge Limitations大型语言模型在知识的准确性和时效性方面面临诸多挑战，其中两个常见问题是幻觉和知识截断。幻觉（Hallucination）： 这是指模型自信地生成了错误的回应。例如，如果模型声称“googly retriever”是一种真实存在的犬种，这就是一种幻觉，可能会导致误导性信息。![](https://www.aiuai.cn/uploads/2501/b4de3095f380f45f.png)知识截断（Knowledge Cut-off）： 这是指大型语言模型（LLM）基于其训练数据返回过时信息的情况。每个基础模型都有一个知识截断点，这意味着其知识仅限于训练时可用的数据。例如，如果询问模型最近的NBA冠军得主，它可能会给出过时的信息。RAG 提供了一种缓解这些挑战的技术。它使模型能够访问外部数据源，通过引入事实背景来减少幻觉，并通过整合最新信息来克服知识截断的问题。Retrieval-Augmented Generation (RAG)检索增强生成（RAG）是一种灵活的框架，使大型语言模型（LLM）能够访问超出其训练数据范围的外部数据。RAG 并不局限于单一实现，而是可以适应不同任务和数据格式的多种方法。它使 LLM 在运行时能够利用外部数据源，包括知识库、文档、数据库以及互联网。这对于利用外部数据增强语言模型至关重要，有助于弥补其训练数据未涵盖的知识空白。为了高效地从文档中检索信息，常见的做法是使用嵌入向量来捕捉语义信息，并将文档索引到向量数据库中。此外，对大型文档进行分块（chunking）可以提高相关性并减少噪音，从而通过提供更具体的上下文信息来增强模型的响应质量。RAG Framework在 RAG 框架中有两种关键模型：RAG-Sequence Model该模型使用相同的检索文档来生成完整的序列。它将检索到的文档视为单个潜在变量，并通过 Top-K 近似 进行边际化，以获取序列到序列的概率。在此方法中，检索器提取 前 K 个 相关文档，生成器计算每个文档对应的输出序列概率，最终通过边际化合并这些概率。RAG-Token Model在该模型中，每个目标 token（输出的每个词）都可以来自不同的潜在文档，使得生成器在回答时能够从多个文档中选择内容。与 RAG-Sequence 模型类似，它首先检索 前 K 个 相关文档，然后针对每个文档生成 下一个输出 token 的概率分布。这一过程会对每个输出 token 进行重复计算，并相应地进行边际化处理。此外，RAG 还可以用于序列分类任务，将目标类别视为单一序列目标。在这种情况下，RAG-Sequence 模型和 RAG-Token 模型的表现将趋于一致。RAG 组成检索器（Retriever）：检索器（DPR）根据查询和文档索引检索相关文档。该检索组件基于 **Dense Passage Retrieval（DPR）**，采用 **双编码器（bi-encoder）** 结构，其中密集表示（dense representations）和查询表示（query representations）均由 **BERT** 生成。随后，通过 **最大内积搜索（MIPS, Maximum Inner Product Search）** 算法，选择 **前 K 个** 具有最高先验概率的文档。 生成器（Generator）：生成器基于 **BART-large**，负责生成文本序列。它通过 **简单地将输入与检索到的内容拼接（concatenation）**，来增强生成效果。 训练阶段在训练过程中，检索器（Retriever） 和 生成器（Generator） 采用 联合训练（joint training），且 不会对具体应检索的文档进行直接监督。训练目标是最小化每个目标的负边际对数似然（negative marginal log-likelihood）。解码阶段在解码阶段，RAG-Sequence 和 RAG-Token 模型需要不同的方法。RAG-Token 使用标准的自回归序列生成和束搜索解码(beam decoder)。相比之下，RAG-Sequence 对每个文档运行束搜索，并使用生成器概率对假设进行评分。对于较长的输出序列，采用了一种高效的解码方法，以避免过多的前向传播。RAG 实现实施 RAG 工作流程可能很复杂，涉及多个步骤，从接受用户提示到查询数据库、文档分块，以及协调整个过程。框架如 LangChain 通过提供模块化组件来简化这一过程，使其能够与大型语言模型（LLMs）和增强技术（如 RAG）协同工作。LangChain 包括用于各种输入格式的文档加载器、用于分割文档的文档转换器，以及其他组件，以简化 LLM 驱动应用程序的开发。LangChain RAGLangChain 是一个全面的自然语言处理平台，在使 RAG 模型变得可访问和高效方面发挥了关键作用。以下是 LangChain 如何融入 RAG 工作流程的：Document Loaders and TransformersLangChain 提供了广泛的文档加载器，可以从各种来源获取文档，包括私有 S3 存储桶和公共网站。这些文档可以是多种类型，例如 HTML、PDF 或代码。文档转换器组件负责准备这些文档以便检索，包括将大型文档拆分成更小、更易管理的块。Text Embedding ModelsLangChain 中的文本嵌入模型旨在与各种文本嵌入提供者和方法接口，包括 OpenAI、Cohere 和 Hugging Face。这些模型创建文本的向量表示，捕捉其语义含义。这种向量化使得高效检索相似文本片段成为可能。Vector Stores随着嵌入(embeddings)技术的兴起，存储和搜索这些嵌入所需的高效数据库变得至关重要。LangChain 提供与超过 50 种不同向量存储的集成，使得选择最适合您需求的存储方案变得简单RetrieversLangChain中的检索器提供了一个接口，用于根据查询检索相关文档。这些检索器可以使用向量存储作为其基础，但也支持其他类型的检索器。LangChain的检索器在自定义检索算法方面提供了灵活性，范围从简单的语义搜索到增强性能的高级方法。Caching EmbeddingsLangChain 的缓存嵌入(Caching Embeddings)功能允许将嵌入存储或临时缓存，从而减少重新计算的需要，提高整体性能Integration with Hugging FaceHugging Face 是一个领先的基于变换器模型的平台，提供包括 RAG 中使用的预训练模型。这使得 LangChain 可以无缝集成 Hugging Face 的模型，帮助您对其进行微调和适应，以满足特定任务的需求。总结检索增强生成（RAG）模型代表了大型语言模型领域的一项突破性进展。LangChain 和类似的框架使得实现 RAG 及其他增强技术变得更加容易，从而能够快速开发利用大型语言模型（LLMs）全部潜力的应用程序。这些技术之间的协同作用为知识密集型语言任务领域的创新开辟了令人兴奋的可能性。