引言:为什么 2026 年开发 AI Agent 依然充满挑战?

2026 年,AI Agent 的开发已从“概念验证”阶段迈入“工程化落地”阶段。单纯调用 API 已无法构建出稳定、可靠、能解决实际问题的智能体。从零开始开发一个 AI Agent,意味着你需要成为一个“全栈 AI 工程师”,横跨算法、工程、产品与运维。本文将为你拆解 2026 年必备的 10 大核心技能,并辅以代码示例和架构图,助你构建属于自己的智能体。

1. 大语言模型 (LLM) 的深度理解与提示工程

技能描述:超越简单的 systemuser 对话,掌握思维链 (CoT)、少样本学习 (Few-shot)、函数调用 (Function Calling) 以及最新的推理框架(如 OpenAI o1)。

核心要点

  • 提示模板化:将提示词模块化,支持变量注入和条件逻辑。
  • 输出结构化:强制模型返回 JSON、YAML 等可解析格式。
  • 上下文管理:精准控制上下文窗口,避免信息过载。

代码示例:构建一个可复用的提示模板引擎

from typing import Dict, Any
from dataclasses import dataclass
import json

@dataclass
class PromptTemplate:
    system: str
    few_shot_examples: list[Dict[str, str]]
    output_format: Dict[str, Any]

    def render(self, user_input: str, **kwargs) -> list[Dict[str, str]]:
        """渲染完整的对话消息列表"""
        messages = []
        
        # 1. 系统指令(支持变量注入)
        system_msg = self.system.format(**kwargs)
        messages.append({"role": "system", "content": system_msg})
        
        # 2. 少样本示例
        for ex in self.few_shot_examples:
            messages.append({"role": "user", "content": ex["user"]})
            messages.append({"role": "assistant", "content": ex["assistant"]})
        
        # 3. 当前用户输入
        final_input = user_input
        if self.output_format:
            final_input += f"\n\n请严格按照以下 JSON 格式回复:\n{json.dumps(self.output_format, indent=2, ensure_ascii=False)}"
        
        messages.append({"role": "user", "content": final_input})
        return messages

# 使用示例:创建一个天气查询 Agent 的提示模板
weather_template = PromptTemplate(
    system="你是一个专业的天气助手。请根据用户提供的城市名,查询天气信息。",
    few_shot_examples=[
        {
            "user": "北京天气怎么样?",
            "assistant": '{"city": "北京", "weather": "晴", "temperature": 22, "unit": "摄氏度"}'
        }
    ],
    output_format={
        "city": "string",
        "weather": "string",
        "temperature": "number",
        "unit": "string"
    }
)

# 渲染提示词
messages = weather_template.render("上海今天天气如何?")
print(json.dumps(messages, indent=2, ensure_ascii=False))

可视化建议:此处可插入一张图,展示“从用户问题到结构化 JSON 输出”的提示工程处理流水线。

2. 智能体框架的熟练运用(LangChain, LlamaIndex, CrewAI)

技能描述:选择一个主流框架作为开发底座,理解其核心抽象(Agent、Tool、Memory、Chain),并能进行定制化扩展。

核心要点

  • 工具封装:将任何 API、函数或数据库查询封装成 Agent 可调用的工具。
  • 记忆设计:实现短期对话记忆和长期知识存储。
  • 流程编排:用 Chain 或 Crew 编排多个 Agent 的协作流程。

代码示例:使用 LangChain 构建一个具备工具调用能力的简易 Agent

from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain.tools import Tool
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
import requests

# 1. 定义自定义工具:获取当前时间
def get_current_time(timezone: str = "Asia/Shanghai") -> str:
    """获取指定时区的当前时间。"""
    # 这里模拟一个 API 调用
    import datetime
    now = datetime.datetime.now()
    return now.strftime(f"%Y-%m-%d %H:%M:%S ({timezone})")

time_tool = Tool(
    name="get_current_time",
    func=get_current_time,
    description="获取指定时区的当前时间。输入参数 timezone 是时区字符串,例如 'Asia/Shanghai'。"
)

# 2. 定义另一个工具:计算器
def calculator(expression: str) -> str:
    """计算一个数学表达式的结果。"""
    try:
        # 警告:实际生产环境应使用更安全的评估方法
        result = eval(expression)
        return str(result)
    except Exception as e:
        return f"计算错误:{e}"

calc_tool = Tool(
    name="calculator",
    func=calculator,
    description="计算一个数学表达式。输入是一个字符串,例如 '3 + 5 * 2'。"
)

# 3. 构建 Agent
llm = ChatOpenAI(model="gpt-4-turbo", temperature=0)
tools = [time_tool, calc_tool]

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个有帮助的助手,可以回答问题和使用工具。"),
    MessagesPlaceholder(variable_name="chat_history"),
    ("human", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad"),
])

agent = create_openai_tools_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 4. 运行 Agent
result = agent_executor.invoke({
    "input": "现在上海是什么时间?然后计算一下 (15 + 27) / 3 等于多少?",
    "chat_history": []  # 初始为空
})
print(result["output"])

可视化建议:此处可插入一张 LangChain Agent 执行循环的流程图,展示 LLM -> 思考 -> 选择工具 -> 执行 -> 观察 -> 再思考 的过程。

3. 向量数据库与语义检索

技能描述:让 Agent 拥有“长期记忆”和“知识库”,能够从海量文档中精准检索相关信息。

核心要点

  • 嵌入模型选择:根据文本类型(代码、长文档、短查询)选择合适的嵌入模型。
  • 检索策略:掌握相似性搜索、最大边际相关性 (MMR) 重排序、混合搜索(关键词+向量)。
  • 索引优化:理解分块、元数据过滤、多向量索引等高级概念。

代码示例:使用 ChromaDB 为 Agent 构建一个本地知识库

import chromadb
from chromadb.config import Settings
from langchain_openai import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import TextLoader

# 1. 初始化客户端和嵌入函数
chroma_client = chromadb.PersistentClient(path="./my_agent_knowledge_base")
embedding_function = OpenAIEmbeddings(model="text-embedding-3-small")

# 2. 准备文档并分块
loader = TextLoader("./project_requirements.txt")
documents = loader.load()

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50,
    separators=["\n\n", "\n", "。", "!", "?", ";", ",", "、", " "]
)
chunks = text_splitter.split_documents(documents)

# 3. 创建集合(相当于数据库表)并添加文档
collection = chroma_client.get_or_create_collection(
    name="project_docs",
    embedding_function=embedding_function.embed_documents  # 适配 Chroma 的调用方式
)

# 添加文档块,包含文本和元数据
for i, chunk in enumerate(chunks):
    collection.add(
        documents=[chunk.page_content],
        metadatas=[{"source": "requirements.txt", "chunk_id": i}],
        ids=[f"chunk_{i}"]
    )

# 4. 检索:为 Agent 的当前问题寻找相关上下文
def retrieve_context_for_agent(query: str, n_results: int = 3):
    """检索与查询最相关的文档块"""
    # 将查询转换为向量
    query_embedding = embedding_function.embed_query(query)
    
    results = collection.query(
        query_embeddings=[query_embedding],
        n_results=n_results,
        include=["documents", "metadatas", "distances"]
    )
    
    context = ""
    for doc, meta in zip(results['documents'][0], results['metadatas'][0]):
        context += f"[来源:{meta['source']}]\n{doc}\n\n"
    return context.strip()

# 模拟 Agent 在回答前先检索知识库
user_question = "我们项目的登录模块有哪些安全要求?"
relevant_context = retrieve_context_for_agent(user_question)
print("检索到的相关上下文:")
print(relevant_context)
print("\n--- Agent 可以将上述上下文注入提示词中,再生成回答 ---")

可视化建议:此处可插入一张 RAG (检索增强生成) 架构图,展示“用户问题 -> 向量化 -> 向量数据库检索 -> 上下文注入 -> LLM 生成答案”的完整流程。

4. 函数/工具调用与工作流编排

技能描述:将外部能力(API、数据库、本地函数)安全、可靠地暴露给 Agent,并设计复杂的工作流。

核心要点

  • 工具描述:编写清晰、准确的工具描述,让 LLM 能正确理解和使用。
  • 错误处理:设计工具调用的重试、降级和超时机制。
  • 流程编排:使用状态机或工作流引擎(如 Prefect、Airflow)管理多步骤任务。

代码示例:定义一个包含多种工具的工具箱,并实现自动重试

import tenacity
from typing import Any, Dict, List
from pydantic import BaseModel, Field
import httpx

class Toolbox:
    """Agent 的工具箱,封装了所有可用的外部能力"""
    
    @tenacity.retry(
        stop=tenacity.stop_after_attempt(3),
        wait=tenacity.wait_exponential(multiplier=1, min=4, max=10),
        retry=tenacity.retry_if_exception_type((httpx.RequestError,))
    )
    def search_web(self, query: str) -> str:
        """使用搜索引擎搜索网络信息(模拟)"""
        print(f"[工具调用] 正在搜索:{query}")
        # 模拟网络请求和响应
        return f"关于 '{query}' 的搜索结果摘要:...(此处为模拟数据)"
    
    def send_email(self, to: str, subject: str, body: str) -> str:
        """发送电子邮件"""
        print(f"[工具调用] 发送邮件给 {to},主题:{subject}")
        # 模拟发送逻辑
        return f"邮件已成功发送至 {to}"
    
    def query_database(self, sql: str) -> List[Dict[str, Any]]:
        """执行 SQL 查询"""
        print(f"[工具调用] 执行 SQL: {sql}")
        # 模拟数据库查询结果
        return [{"id": 1, "name": "示例数据"}]
    
    def get_tool_descriptions(self) -> List[Dict]:
        """生成供 LLM 使用的工具描述列表"""
        return [
            {
                "type": "function",
                "function": {
                    "name": "search_web",
                    "description": "使用搜索引擎搜索最新的网络信息。",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "query": {"type": "string", "description": "搜索关键词"}
                        },
                        "required": ["query"]
                    }
                }
            },
            {
                "type": "function",
                "function": {
                    "name": "send_email",
                    "description": "发送一封电子邮件。",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "to": {"type": "string", "description": "收件人邮箱地址"},
                            "subject": {"type": "string", "description": "邮件主题"},
                            "body": {"type": "string", "description": "邮件正文"}
                        },
                        "required": ["to", "subject", "body"]
                    }
                }
            }
            # ... 其他工具描述
        ]

# 使用示例
toolbox = Toolbox()
# 这些描述可以被注入到 LLM 的 system prompt 中,或用于自动生成 OpenAI 的 tools 参数
print("可用工具描述:")
print(toolbox.get_tool_descriptions())

可视化建议:此处可插入一张“工具调用决策与执行”的序列图,展示 Agent 分析问题、选择工具、执行、处理结果的完整交互。

5. 记忆与状态管理

技能描述:设计 Agent 的“大脑”,使其能记住对话历史、用户偏好和任务状态。

核心要点

  • 短期记忆:管理对话上下文,避免 token 超限。
  • 长期记忆:将重要信息向量化后存入知识库,供未来检索。
  • 状态持久化:将会话状态保存到数据库,支持断点续跑。

代码示例:实现一个基于向量数据库的长期记忆系统

from typing import List, Dict
import json
from datetime import datetime

class LongTermMemory:
    """基于向量数据库的长期记忆系统"""
    
    def __init__(self, collection_name: str = "agent_memory"):
        self.chroma_client = chromadb.PersistentClient(path="./agent_memory_db")
        self.embedding_function = OpenAIEmbeddings(model="text-embedding-3-small")
        self.collection = self.chroma_client.get_or_create_collection(
            name=collection_name,
            embedding_function=self.embedding_function.embed_documents
        )
    
    def store_memory(self, content: str, memory_type: str = "fact", metadata: Dict = None):
        """存储一段记忆"""
        if metadata is None:
            metadata = {}
        
        memory_id = f"memory_{datetime.now().timestamp()}_{hash(content) % 10000}"
        
        metadata.update({
            "type": memory_type,
            "timestamp": datetime.now().isoformat(),
            "content_preview": content[:100]
        })
        
        self.collection.add(
            documents=[content],
            metadatas=[metadata],
            ids=[memory_id]
        )
        print(f"[长期记忆] 已存储:{content[:50]}...")
        return memory_id
    
    def recall_memories(self, query: str, n_results: int = 5, memory_type: str = None) -> List[Dict]:
        """回忆与查询相关的记忆"""
        query_embedding = self.embedding_function.embed_query(query)
        
        where_clause = None
        if memory_type:
            where_clause = {"type": memory_type}
        
        results = self.collection.query(
            query_embeddings=[query_embedding],
            n_results=n_results,
            where=where_clause,
            include=["documents", "metadatas", "distances"]
        )
        
        memories = []
        for doc, meta, dist in zip(results['documents'][0], results['metadatas'][0], results['distances'][0]):
            memories.append({
                "content": doc,
                "metadata": meta,
                "relevance_score": 1 - dist  # 简单转换,距离越小越相关
            })
        
        # 按相关性排序
        memories.sort(key=lambda x: x['relevance_score'], reverse=True)
        return memories
    
    def summarize_conversation(self, conversation_history: List[Dict]) -> str:
        """总结一段对话,并存储为长期记忆"""
        # 简单实现:将最后几轮对话拼接
        summary = "对话摘要:\n"
        for msg in conversation_history[-5:]:  # 取最后5条
            role = msg.get("role", "unknown")
            content = msg.get("content", "")[:100]
            summary += f"{role}: {content}\n"
        
        self.store_memory(
            content=summary,
            memory_type="conversation_summary",
            metadata={"source": "auto_summary"}
        )
        return summary

# 使用示例
memory = LongTermMemory()

# 存储一些事实
memory.store_memory("用户张三喜欢喝美式咖啡,不加糖。", memory_type="user_preference", metadata={"user": "zhangsan"})
memory.store_memory("项目的 API 密钥是 sk-...(已脱敏)", memory_type="project_config", metadata={"sensitivity": "high"})

# 回忆
print("回忆与‘咖啡’相关的记忆:")
related_memories = memory.recall_memories("咖啡", memory_type="user_preference")
for mem in related_memories:
    print(f"- {mem['content']} (相关性:{mem['relevance_score']:.2f})")

可视化建议:此处可插入一张“Agent 记忆系统架构图”,区分短期记忆(对话上下文)、长期记忆(向量存储)和外部知识库。

6. 评估、测试与监控

技能描述:建立科学的评估体系,确保 Agent 的行为符合预期,并在生产环境中保持稳定。

核心要点

  • 单元测试:对工具、提示词、链进行独立测试。
  • 端到端评估:设计测试用例,评估 Agent 的
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐