关于 Fast LLM & Agents & MCPs
这是一个学习资料仓库,包含 LLM、Agent、MCP 工具和 Skills 等概念的理论说明与示例代码,示例基于 LangChain & LangGraph、AWS Strands Agents 和 Google ADK。适合希望动手学习 Agent 开发的开发者。
主要功能
- 01LangChain 与 LangGraph 的 Agent 示例代码
- 02AWS Strands Agents 示例,包括 MCP 文件操作
- 03Google ADK 多 Agent 模式示例
- 04涵盖 RAG、微调和 LLM 基础概念
适用场景
- 01学习 Agent 的工具调用与记忆机制
- 02对比 LangGraph、Strands 与 ADK 的多 Agent 编排方式
- 03参考 MCP 工具接入 Agent 的示例代码
MCP 相关
仓库中包含连接本地与远程 MCP 工具的 Agent 示例,例如 AWS Strands 和 Google ADK 的 MCP 文件服务与搜索工具示例,但其本身不是 MCP 服务。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
快速了解 LLM、Agent 和 MCP
本仓库从理论和实践两方面介绍 LLM、Agent、MCP 工具和技能的概念:
- LLM 架构、RAG、微调、Agent、工具、MCP、Agent 框架、参考文档。
- 使用 LangChain & LangGraph(> v1.0.0,生产版本) 的 Agent 示例代码。
- 使用 AWS Strands Agents 的 Agent 示例代码。
- 使用 Google Agent Development Kit(ADK) 的 Agent 示例代码。
LangChain & LangGraph(v1.0.0)- Agent 示例代码与项目
- 示例-00:基础 Agent
- 示例-01:使用静态工具的 Agent
- 示例-02:使用工具和结构化输出的 Agent
- 示例-03:Agent 短期记忆
- 示例-04:Agent 消息
- 示例-05:Agent PII 中间件防护栏
- 示例-06:将 Agent 子 Agent 用作工具
- 示例-07:Agent 技能
- 示例-08:LangGraph 多 Agent 顺序模式
- 示例-09:LangGraph 多 Agent 生成器-评估器模式
- 示例-10:LangGraph 多 Agent 路由器模式
AWS Strands - Agent 示例代码与项目
- 示例-00:使用 AWS Strands Agents 创建第一个 Agent
- 示例-01:带有 Streamlit UI 的 Agent Strands
- 示例-02:Agent Strands 本地 MCP FileOps、Streamlit
- 示例-03:Agent Strands、带有 Streamlit 的远程 MCP Serper Google 搜索工具
- 示例-04:Agent Strands、在 Sqlite.DB 上进行会话管理
- 示例-05:Agent Strands、多 Agent 顺序工作流
- 示例-06:Agent Strands、多 Agent 生成器-评估器模式
Google ADK - Agent 示例代码与项目
- 示例-00:使用 Google ADK 和 ADK Web 构建 Agent
- 示例-01:使用 Google ADK、FastAPI 和 Streamlit GUI 构建 Agent 容器
- 示例-02:使用 Google ADK、FastAPI 和 Streamlit GUI 构建 Agent 本地 MCP 工具(FileServer)
- 示例-03:使用 Google ADK、FastAPI 和 Streamlit GUI 构建 Agent 远程 MCP 工具(网页搜索:Serper)
- 示例-04:使用 Streamlit GUI 构建 Agent 记忆和内置 Google 搜索工具
- 示例-05:使用 Streamlit GUI 构建 Agent LiteLLM - AWS Bedrock(Llama3.1-405B)、Ollama
- 示例-06:多 Agent 顺序工作流,Streamlit GUI
- 示例-07:多 Agent 并行工作流,Streamlit GUI
- 示例-08:多 Agent 循环工作流,Streamlit GUI
- 示例-09:多 Agent 层级结构,Streamlit GUI
目录
动机
为什么要使用、学习或开发大模型和应用?
- 🔍 自动化复杂任务: 大规模完成摘要、翻译、编码、研究和内容创作。
- 🧠 打造智能应用: 通过自然语言界面构建聊天机器人、副驾驶、搜索引擎和数据探索工具。
- 🚀 提高生产力: 通过处理重复性或基于知识的任务,为用户和企业节省时间。
- 💰 市场需求旺盛: SaaS、企业工具、客户支持和教育领域对大模型应用的需求日益增长。
- 🧩 灵活集成: 结合工具、API、数据库和 Agent,打造强大的工作流。
- 🛠️ 针对边缘场景定制: 根据特定领域的需求(金融、法律、医疗等)进行微调或适配。
- 📈 职业发展: 带来 AI 工程、MLOps、产品创新和技术领导等领域的职业机会。
- 🌍 全球影响: 让信息和自动化更易于获取,尤其是对非技术用户而言。
大模型架构与大模型
- 大模型(大型语言模型)是一种人工智能模型,通过海量文本数据训练,以理解和生成人类般的语言。
- “大型”:指训练过程中使用的数十亿个参数和海量数据集。
- “语言模型”:根据输入的上下文预测并生成文本。
- 大模型基于 Transformer 架构 构建(使用自注意力理解上下文)。
- 大模型是 仅解码器 Transformer。
大模型的核心组件:
- 嵌入层: 将单词/词元转换为向量。
- 位置编码: 添加词序信息。
- 自注意力机制: 捕捉词元之间的关系。
- 前馈层: 处理词元级信息。
- 层归一化与残差连接: 稳定并提升训练效果。
- 输出头: 预测下一个词元或分类结果。
使用大模型有两种方式:API(来自 AI 和云服务提供商)、本地
API(来自 AI 和云服务提供商)
- 可使用以下服务提供商的服务:OpenAI、Claude、Gemini、AWS Bedrock 等。
- https://chatgpt.com/
- https://aistudio.google.com/
- https://platform.claude.com/
- https://aws.amazon.com/bedrock/
本地
Ollama
- 在本地计算机上拉取/运行小型大模型的最简单方式。
- https://ollama.com/
HuggingFace
- 另一种方式是从 HuggingFace 下载开源的小型和大型大模型。
- https://huggingface.co/models
使用 vLLM 提供大模型服务
- 下载开源模型后,如果要服务更多用户(>10),应使用服务引擎运行。
- vLLM 是一个用于大模型推理和服务的快速易用库。
- https://github.com/vllm-project/vllm
提示词工程
- 提示词工程是设计和完善输入提示词,以便从大模型(大型语言模型)获得最佳响应的实践。
- 编写清晰、具体的指令。
- 使用结构化格式(例如列表、JSON、示例)。
- 应用以下技巧:
- 零样本提示(直接提问)
- 少样本提示(提供示例)
- 思维链提示(要求模型逐步解释)
- 为什么这很重要?
- 提升输出质量: 精心设计的提示词可引导大模型生成相关且准确的结果。
- 提高模型准确性: 帮助大模型遵循复杂指令。明确的指令可减少错误或编造的信息。
- 实现特定任务的性能: 只需编写完善的提示词,就能让模型总结、翻译、生成代码或遵循工作流。
- 节省成本: 无需重新训练或微调大模型,就能改善结果。
- 对生成式 AI 应用至关重要: 对构建聊天机器人、Agent、搜索助手和副驾驶至关重要。
- 支持 RAG 和工具使用: 帮助在高级系统中协调大模型与工具、API 或知识库。
RAG:检索增强生成
RAG(检索增强生成)是一种将外部知识检索与基于大模型的文本生成相结合的技术。 工作原理:
- 检索: 使用查询搜索知识库(例如文档、PDF、数据库)。通常使用基于嵌入的向量搜索(例如 FAISS、Elasticsearch)。
- 增强: 将检索到的文本注入提示词。
- 生成: 大模型利用此上下文生成更准确、有依据的回答。
RAG 的重要性:
- 减少幻觉,让大模型的回答以真实数据为依据。
- 保持回答的时效性(大模型无需为每次更新重新训练)。
- 提高可信度和透明度(可以展示来源)。
- 适用于企业级扩展: 用于聊天机器人、搜索、文档问答、Agent。
RAG 常用工具:
- 嵌入模型
- OpenAI(text-embedding-ada-002),
- HuggingFace(all-MiniLM-L6-v2,sentence-transformers/all-mpnet-base-v2),
- AWS Titan embeddings
- 重排序模型
- 生成模型
- 向量存储与数据库:
- FAISS,
- Pinecone,
- Weaviate,
- Chroma,
- Milvus,
- Qdrant
微调
微调是指通过在规模较小、经过专门整理的数据集上进一步训练预训练大模型,使其适应特定任务或领域。其目标是在无需从头开始训练的情况下,让模型更好地满足特定要求。
微调的工作原理:
- 从预训练模型开始: 选择一个经过海量通用数据(PDF)训练的大型模型(Llama3.3、Mistral),使其具备语言理解能力。
- 使用领域专属数据: 提供一个与目标任务或领域相关的小型数据集(例如法律文本、医疗数据、客户服务)。
- 训练模型: 使用这些新的专门数据更新模型参数,使其在目标领域表现更好,同时保留从更大的训练数据集中学到的通用知识。
- 应用微调后的模型: 现在,模型能够基于专门领域生成或分类文本,其表现通常远高于通用模型。
微调为何重要:
- 提高准确性: 模型在特定用例中的表现会更加精确,例如医疗文本分析或客户支持聊天机器人。
- 节省时间和资源: 无需从头开始训练新模型(这需要海量计算资源和数据)。
- 定制行为: 微调可让你调整模型的行为,使其符合应用目标(例如语气、上下文、风格)。
微调方法:
- 全量微调: 针对特定任务,对预训练模型的所有参数进行微调。它能实现最大程度的定制,但消耗资源较多,且需要大型数据集。
- 基于特征的微调: 仅对预训练模型的最后几层进行微调,其余部分保持冻结。与全量微调相比,这种方法更快、资源消耗更少,但可能无法达到同等程度的任务专项优化。
- PFET(渐进式微调): 微调分阶段进行,从较简单的任务开始,逐步过渡到更复杂的任务。这种方法可以减少灾难性遗忘,并提升模型逐步学习复杂任务的能力,但耗时更长。
- 适配器微调: 在预训练模型中加入小型可训练层(适配器),并仅对这些适配器进行微调。这种方法在多任务学习中效率很高,但灵活性不如全量微调,且可能并非适用于所有任务。
- LoRA(低秩适配): 在预训练模型的特定层中加入低秩矩阵,并仅对这些矩阵进行微调。这种方法在内存和计算方面效率很高,适合大型模型,但对非常复杂的任务可能效果不佳。
- QLoRA(量化 LoRA): 将 LoRA 与量化技术结合,进一步缩小模型体积并降低其内存需求。低秩矩阵经过量化后,内存效率更高。
大模型应用框架与库
大模型(LLM)应用框架与库是用于简化由 GPT、Claude、Gemini 或 LLaMA 等大模型驱动的应用开发、编排和部署的工具。这些工具提供了抽象层,用于管理提示词、记忆、Agent、工具、工作流,以及与外部数据或系统的集成。
LangChain 与 LangGraph
- LangChain 是一个用于构建大模型应用的框架,可将模型与工具、提示词、记忆和数据源结合起来。LangGraph 是 LangChain 的扩展,它将大模型工作流建模为有状态的图,从而更便于构建带有循环和控制流的多步骤或多 Agent 系统。
- https://python.langchain.com/docs/introduction/
LlamaIndex
- LlamaIndex 是一个框架,可帮助将大模型(如 OpenAI GPT)连接到 PDF、数据库或 API 等外部数据源。它专注于数据摄取、索引和检索,使 LLM 应用(例如 RAG 系统)能够高效查询私有或结构化数据。
- https://developers.llamaindex.ai/python/framework/
Agent 框架
Agent 框架是专门用于构建、管理和编排基于 LLM 的 Agent 的软件工具或库。这些框架可帮助你创建智能 Agent,使其能够自主推理、规划,并使用外部工具或与其他 Agent 协同采取行动。
Agent 框架提供哪些功能?
- Agent 抽象: 定义 Agent 的身份、目标、记忆、行为和权限。
- 工具接口: 注册 Agent 可使用的外部工具(API、函数、数据库等)。
- 执行逻辑: 处理规划、决策、工具调用、重试和反馈循环。
- 多 Agent 编排: 管理多个 Agent 之间的通信和任务委派。
- 记忆与上下文: 支持持久记忆、历史记录跟踪和上下文推理。
- 可观测性: 提供追踪、日志记录和逐步推理输出,以便调试。
LangChain & LangGraph
- LangChain & LangGraph 也提供强大的 Agent 框架。LangChain 提供强大的 Agent 框架,使 LLM 能够动态决定使用哪些工具、API 或操作来完成任务。LangGraph 则通过基于图的执行模型支持有状态的多 Agent 工作流和复杂控制流(循环、分支),进一步扩展了这一能力。
- https://python.langchain.com/docs/introduction/
AWS Strands
- Strands Agents SDK 可帮助开发者快速构建、管理、评估和部署 AI Agent。
- https://strandsagents.com/latest/
Google Agent Development Kit
- Agent Development Kit(ADK)是一个灵活、模块化的框架,用于开发和部署 AI Agent。虽然它针对 Gemini 和 Google 生态系统进行了优化,但 ADK 不依赖特定模型或部署方式,并且兼容其他框架。
- ADK 旨在让 Agent 开发更接近软件开发,使开发者能够更轻松地创建、部署和编排从简单任务到复杂工作流的 Agent 架构。
- https://google.github.io/adk-docs/
CrewAI
CrewAI 是一个完全从头构建的 Python 框架,完全独立于 LangChain 或其他 Agent 框架。CrewAI 兼具简洁的高级操作和精确的底层控制,适合创建能够适应各种场景的自主 AI Agent:
- CrewAI Crews: 专注于自主性和协作智能,让你能够创建 AI 团队,其中每个 Agent 都有特定的角色、工具和目标。
- CrewAI Flows: 支持精细的事件驱动控制,通过单次 LLM 调用实现精准的任务编排,并原生支持 Crews。
- https://docs.crewai.com/introduction
PydanticAI
- PydanticAI 是一个 Python Agent 框架,旨在降低使用生成式 AI 构建生产级应用的难度。 https://ai.pydantic.dev/
Agent
大模型 Agent 是一种自主或半自主系统,它使用大语言模型(如 GPT、Claude 或 Gemini)进行推理、决策,并借助外部工具或 API 采取行动以实现目标。
大模型 Agent 通常包括:
- 大模型核心: 负责理解任务并生成推理过程的“大脑”。
- 记忆(可选): 存储操作、输入和输出的历史记录,以支持上下文感知行为。
- 工具: Agent 可调用的外部 API、数据库、网络搜索、代码执行功能或自定义函数。
- 环境: Agent 运行所依托的运行时或框架(例如 LangChain、CrewAI、Google ADK)。
# Define a tool function
def get_capital_city(country: str) -> str:
"""Retrieves the capital city for a given country."""
# Replace with actual logic (e.g., API call, database lookup)
capitals = {"france": "Paris", "japan": "Tokyo", "canada": "Ottawa"}
return capitals.get(country.lower(), f"Sorry, I don't know the capital of {country}.")
# Add the tool to the agent
capital_agent = LlmAgent(
model="gemini-3.0-pro",
name="capital_agent",
description="Answers user questions about the capital city of a given country.",
instruction="""You are an agent that provides the capital city of a country... (previous instruction text)""",
tools=[get_capital_city]
)
工具
工具代表 AI Agent 的一项特定能力,使其能够执行操作,并与自身文本生成和推理能力之外的世界交互。
- 函数工具: 将函数转换为工具,是将自定义逻辑集成到 Agent 中的简单方法。
- Agent-as-Tool: 这项强大的功能允许你通过将其他 Agent 作为工具调用,在系统中利用它们的能力。Agent-as-a-Tool 可让你调用另一个 Agent 执行特定任务,从而有效地委派职责。
- Google ADK 内置工具: 这些内置工具提供开箱即用的功能,例如 Google 搜索或代码执行器,为 Agent 提供常用能力。
- Langchain 工具: 也作为 Langchain 工具用于 Google ADK。
- CrewAI 工具: 也作为 CrewAI 工具用于 Google ADK。
- MCP 工具: 将 MCP 服务应用连接到 MCP 客户端(Claude App、VSCode 等)或 Agent(Google ADK)。
MCP:模型上下文协议
- 模型上下文协议(MCP)是一项开放标准,旨在规范 Gemini 和 Claude 等大模型与外部应用、数据源和工具的通信方式。
- MCP 采用客户端-服务端架构,定义 MCP 服务如何提供数据(资源)、交互式模板(提示词)和可执行功能(工具),以及 MCP 客户端(可以是大模型宿主应用或 AI Agent)如何使用它们。
- https://www.anthropic.com/engineering/building-effective-agents
Agent 技能
- Agent 技能是 AI Agent 可调用的预定义能力或工具,用于完成任务(例如运行代码、查询数据库或阅读文档)。它们通常打包为可复用的单元,其中包含指令、脚本和辅助文件,以便 Agent 知道何时以及如何使用它们。在许多框架中,技能可以包含用于执行的脚本(Python/JS)以及描述使用说明的 Markdown 文件。这使 Agent 无需更改核心 Agent 逻辑即可扩展功能。
技能结构示例:
skills/
└─ query_parquet/
├─ skill.md
└─ run_query.py
skill.md:
# Query Parquet Skill
Use this skill when you need to run SQL queries on Parquet files.
Input:
- SQL query
Output:
- Query results as a table
run_query.py:
import duckdb
def run_query(sql, file_path):
con = duckdb.connect()
return con.execute(f"SELECT * FROM read_parquet('{file_path}') WHERE {sql}").fetchall()
A2A:Agent 到 Agent 协议
Agent2Agent(A2A)协议有助于独立 AI Agent 之间进行通信。以下是核心概念:
- Agent Card: 一个公开的元数据文件(通常位于 /.well-known/agent.json),用于描述 Agent 的能力、技能、端点 URL 和身份验证要求。客户端使用它来发现 Agent。
- A2A 服务端: 一个公开 HTTP 端点并实现 A2A 协议方法(在 json 规范中定义)的 Agent。它接收请求并管理任务执行。
- A2A 客户端: 使用 A2A 服务的应用程序或其他 Agent。它向 A2A 服务端的 URL 发送请求(例如 tasks/send)。
- 任务: 工作的核心单位。客户端通过发送消息(tasks/send 或 tasks/sendSubscribe)来启动任务。任务具有唯一 ID,并会经历不同状态(submitted、working、input-required、completed、failed、canceled)。
- 消息: 表示客户端(角色:“user”)与 Agent(角色:“agent”)之间的通信轮次。消息包含 Part。
- Part: Message 或 Artifact 中的基本内容单位。可以是 TextPart、FilePart(包含内联字节或 URI),也可以是 DataPart(用于结构化 JSON,例如表单)。
- Artifact: 表示 Agent 在任务期间生成的输出(例如生成的文件、最终结构化数据)。Artifact 也包含 Part。
- 流式传输: 对于长时间运行的任务,支持流式传输功能的服务端可以使用 tasks/sendSubscribe。客户端会接收包含 TaskStatusUpdateEvent 或 TaskArtifactUpdateEvent 消息的服务器发送事件(SSE),以实时获取进度。
- 推送通知: 支持 pushNotifications 的服务端可以主动向客户端提供的 webhook URL 发送任务更新,该 URL 通过 tasks/pushNotification/set 进行配置。
- 链接: https://github.com/google/A2A
与大模型、Agent、MCP 相关的其他实用资源
- https://www.promptingguide.ai/
- https://docs.langchain.com/oss/python/langchain/overview
- https://docs.langchain.com/oss/python/langgraph/overview
- https://strandsagents.com/latest/
- https://google.github.io/adk-docs/
- https://docs.crewai.com/
- https://modelcontextprotocol.io/
- https://smithery.ai/
- https://developer.nvidia.com/blog/category/generative-ai/
- https://huggingface.co/
参考资料
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。