从零构建AI智能体:基于LangChain的规划、工具调用与记忆实战
最近在尝试将大模型能力集成到实际业务中时,发现一个普遍痛点:虽然大模型本身很强大,但如何让它像“智能员工”一样,自主理解任务、使用工具、并完成复杂工作流,是项目落地的关键瓶颈。网上关于Agent的资料要么过于学术化,要么就是零散的代码片段,缺乏一套从零到一、手把手带你构建可运行智能体的完整教程。
本文正是为了解决这个问题。我将结合最新的开源框架和实战经验,为你拆解AI Agent的核心概念、主流框架、以及从环境搭建到项目部署的全流程。无论你是刚接触大模型的新手,还是想将Agent能力融入现有系统的开发者,都能从本文中找到可复现的代码、清晰的配置和避坑指南。学完本文,你将能独立搭建一个具备规划、工具调用和记忆能力的智能体应用。
1. AI Agent:从概念到价值
在深入代码之前,我们必须先厘清一个核心问题: AI Agent究竟是什么,以及它为何能成为大模型应用的下一个爆发点?
简单来说,AI Agent(智能体)是一个能够感知环境、自主决策并执行行动以实现特定目标的软件实体。它不同于传统的“一问一答”式聊天机器人。你可以把它想象成一个拥有“大脑”(大模型)、“双手”(工具调用)和“记忆”(历史上下文)的虚拟助手。这个“大脑”负责理解你的意图、制定计划;“双手”可以操作各种软件工具(如搜索、计算、写文件);“记忆”则让它能记住对话历史和任务上下文,进行连贯的多轮交互。
为什么开发者需要关注Agent?
- 解决复杂任务 :大模型单次交互的上下文长度和推理能力有限。Agent通过“思考-行动-观察”的循环,可以将一个复杂问题(如“分析本季度销售数据并生成报告”)拆解为多个可执行的子步骤(查询数据库、数据清洗、生成图表、撰写总结)。
- 连接现实世界 :大模型本身是“虚拟”的,它无法直接操作你的数据库、发送邮件或调用API。Agent通过工具调用(Tool Calling)能力,成为了大模型与现实世界应用程序之间的“桥梁”。
- 实现自动化与个性化 :结合长期记忆(如向量数据库),Agent可以学习用户偏好,提供持续、个性化的服务,成为真正的个人工作助理或智能客服。
核心组件拆解: 一个典型的AI Agent系统通常包含以下几个核心模块:
- 规划模块(Planner) :将用户目标分解为任务序列或决策路径。
- 记忆模块(Memory) :包括短期记忆(对话历史)和长期记忆(向量知识库)。
- 工具模块(Tools) :Agent可以调用的函数集合,如搜索引擎、计算器、代码执行器、API客户端等。
- 行动模块(Action) :根据规划和工具调用结果,执行具体操作。
- 反思模块(Reflection) :对执行结果进行评估,必要时调整计划。
理解了这些,我们就知道,搭建一个Agent,本质上是为一个大模型配备一套使其“能动起来”的机制。
2. 环境准备与核心工具选型
工欲善其事,必先利其器。在开始编码前,我们需要搭建一个稳定且高效的开发环境。本文将使用目前最主流、社区最活跃的Python技术栈。
2.1 基础环境配置
首先确保你的系统已安装以下基础软件:
-
Python : Agent开发强烈推荐使用Python 3.10或3.11版本,它们在兼容性和性能上最为平衡。避免使用Python 3.12等过新版本,可能遇到一些库的兼容性问题。
# 检查Python版本 python --version # 或 python3 --version -
包管理工具 : 使用
pip进行包管理。建议先升级到最新版,并考虑使用虚拟环境(如venv或conda)来隔离项目依赖,避免全局污染。# 升级pip pip install --upgrade pip # 创建虚拟环境(以venv为例) python -m venv agent_env # 激活虚拟环境 # Windows: .\agent_env\Scripts\activate # Linux/Mac: source agent_env/bin/activate
2.2 大模型接入选择
Agent的“大脑”需要一个大模型。你有多种选择:
- 云端API(推荐新手/快速原型) :直接调用OpenAI GPT、百度文心、智谱GLM等提供的API。优点是稳定、省心,无需担心算力。
- 关键点 :你需要准备相应的API Key,并注意费用和网络可达性。
- 本地部署模型(追求数据隐私/定制化) :使用
Ollama、vLLM、Transformers等框架在本地或私有服务器上部署开源模型,如Llama 3、Qwen、ChatGLM等。- 关键点 :需要一定的GPU资源,并熟悉模型加载和推理优化。
为了教程的通用性,我们将以 OpenAI API 和 Ollama本地模型 两种方式分别演示,你可以根据自身条件选择。
2.3 Agent框架选型
这是本教程的核心。目前社区有多个优秀的Agent框架,它们封装了规划、工具调用、记忆等复杂逻辑,让我们能更专注于业务。
- LangChain / LangGraph : 生态最庞大、功能最全面的框架,模块化设计,学习曲线稍陡,但极其灵活强大。
- AutoGen : 由微软推出,专注于多智能体协作对话,适合构建复杂的多角色对话系统。
- CrewAI : 在LangChain基础上构建,更侧重于角色扮演和团队协作,概念清晰,易于上手。
- Semantic Kernel (SK) : 微软出品,与.NET生态结合紧密,也支持Python,强调“插件”和“规划器”的概念。
本教程选择 LangChain ,因为其文档最全、社区案例最多,学会了它再迁移到其他框架也更容易。同时,我们会简要介绍 CrewAI 的快速上手方式。
安装核心依赖:
# 激活虚拟环境后,安装LangChain及常用组件
pip install langchain langchain-community langchain-openai langchain-chroma
# 如果需要网页搜索等工具,可以安装
pip install duckduckgo-search
# 用于本地知识库(向量数据库)
pip install chromadb
# 用于与Ollama交互
pip install langchain-ollama
3. 从零构建你的第一个智能体:天气预报查询助手
让我们从一个具体的、可运行的例子开始。我们将构建一个能理解用户关于天气的模糊提问(如“北京明天暖和吗?”),并调用工具查询具体天气信息,最后组织成友好回复的Agent。
3.1 项目结构初始化
创建一个新的项目目录,结构如下:
weather_agent/
├── main.py # 主程序入口
├── tools/ # 自定义工具目录
│ └── weather_tool.py
├── .env # 存储API密钥等敏感信息(记得加入.gitignore)
└── requirements.txt # 依赖列表
在 requirements.txt 中写入:
langchain
langchain-openai
langchain-community
python-dotenv
requests
运行 pip install -r requirements.txt 安装依赖。
3.2 创建自定义工具(Tools)
工具是Agent的手臂。我们首先创建一个模拟的天气查询工具。在实际项目中,你可以替换为真实的天气API(如和风天气、OpenWeatherMap)。
文件: tools/weather_tool.py
from langchain.tools import BaseTool
from pydantic import BaseModel, Field
from typing import Optional, Type
import requests
# 定义工具的输入参数模型
class WeatherQueryInput(BaseModel):
location: str = Field(description="城市名称,例如:北京、上海")
date: Optional[str] = Field(default="今天", description="查询日期,例如:今天、明天、2024-10-27")
class WeatherQueryTool(BaseTool):
name = "get_weather"
description = "根据城市和日期查询天气情况。如果日期是‘今天’或‘明天’,工具会进行转换。"
args_schema: Type[BaseModel] = WeatherQueryInput
def _run(self, location: str, date: str = "今天") -> str:
"""执行工具调用的核心逻辑。"""
# 这里是模拟数据,真实情况应调用天气API
# 例如:response = requests.get(f"https://api.weatherapi.com/v1/forecast.json?key=YOUR_KEY&q={location}&days=2")
print(f"[工具调用] 正在查询 {location} 在 {date} 的天气...")
# 模拟API返回
mock_data = {
"北京": {"今天": "晴,15~25℃,微风", "明天": "多云,18~27℃,东南风3级"},
"上海": {"今天": "小雨,20~28℃,东风4级", "明天": "阴,22~30℃,微风"},
}
city_weather = mock_data.get(location)
if not city_weather:
return f"抱歉,未找到 {location} 的天气信息。"
weather_info = city_weather.get(date, city_weather.get("今天", "信息暂不可用"))
return f"{location}在{date}的天气情况是:{weather_info}"
async def _arun(self, location: str, date: str = "今天") -> str:
"""异步版本(可选)。"""
raise NotImplementedError("此工具不支持异步调用")
关键点解释 :
BaseTool: LangChain中所有工具的基类。args_schema: 使用Pydantic模型严格定义工具的输入参数和描述,这能帮助大模型更准确地理解如何调用该工具。name和description: 至关重要!大模型根据这些描述来决定在什么情况下调用哪个工具。描述要清晰、具体。_run: 工具的实际执行函数。
3.3 配置大模型与构建Agent
文件: main.py
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain_core.prompts import PromptTemplate
from tools.weather_tool import WeatherQueryTool
# 1. 加载环境变量(从.env文件读取API Key)
load_dotenv()
openai_api_key = os.getenv("OPENAI_API_KEY")
# 如果没有设置,可以临时写在这里(仅用于测试,生产环境务必用.env)
if not openai_api_key:
# 提示:请先在项目根目录创建.env文件,并写入 OPENAI_API_KEY=your_key_here
openai_api_key = "your-openai-api-key-here" # 请替换
# 2. 初始化大语言模型
llm = ChatOpenAI(
model="gpt-3.5-turbo", # 或 "gpt-4"
temperature=0.1, # 较低的温度使输出更稳定、更倾向于调用工具
openai_api_key=openai_api_key
)
# 3. 准备工具列表
tools = [WeatherQueryTool()]
# 4. 定义Agent的提示词模板
# ReAct框架的提示词会引导模型进行“思考(Thought)-行动(Action)-观察(Observation)”的循环
prompt_template = """
你是一个乐于助人的天气查询助手。你的目标是回答用户关于天气的任何问题。
你可以使用以下工具:
{tools}
请严格按照以下格式回答:
问题:用户提出的原始问题
思考:分析用户问题,决定是否需要使用工具,以及使用哪个工具
行动:需要调用的工具名称,以及一个格式正确的输入JSON对象。格式:```json
{{"action": “{tool_name}”, "action_input": {{"location": “城市名”, "date": “日期”}}}}
观察:工具返回的结果 ... (这个思考-行动-观察的循环可以重复多次) 思考:我现在有最终答案了吗? 最终答案:对用户问题的清晰、完整、友好的总结回答。
现在,开始!
问题:{input} 思考: """ prompt = PromptTemplate.from_template(prompt_template)
5. 创建Agent
agent = create_react_agent(llm=llm, tools=tools, prompt=prompt)
6. 创建Agent执行器
agent_executor = AgentExecutor( agent=agent, tools=tools, verbose=True, # 设置为True可以看到Agent的详细思考过程,调试非常有用 handle_parsing_errors=True, # 处理解析错误 max_iterations=5, # 限制最大循环次数,防止死循环 early_stopping_method="generate", # 提前停止策略 )
7. 运行Agent
if name == " main ": # 示例查询 queries = [ “北京今天天气怎么样?”, “帮我看看上海明天是否需要带伞?” ] for query in queries: print(f"\n{'='*50}") print(f"用户问题: {query}") print(f"{'='*50}") try: result = agent_executor.invoke({"input": query}) print(f"\n助手回复: {result['output']}") except Exception as e: print(f"执行出错: {e}")
### 3.4 运行与结果分析
在项目根目录下,创建 `.env` 文件并填入你的OpenAI API Key:
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
然后运行程序:
```bash
python main.py
你将看到类似以下的输出(verbose模式):
==================================================
用户问题: 北京今天天气怎么样?
==================================================
> 进入新的Agent执行链...
思考:用户想了解北京今天的天气。我有一个工具可以查询天气。我应该使用这个工具。
行动:
```json
{"action": "get_weather", "action_input": {"location": "北京", "date": "今天"}}
观察:[工具调用] 正在查询 北京 在 今天 的天气... 北京在今天天气情况是:晴,15~25℃,微风 思考:我已经获得了所需的天气信息,可以给出最终答案。 最终答案:北京今天的天气是晴天,气温在15到25摄氏度之间,有微风。
助手回复: 北京今天的天气是晴天,气温在15到25摄氏度之间,有微风。
**恭喜!** 你已经成功创建了一个具备基础推理和工具调用能力的AI Agent。它能够理解自然语言问题,规划需要调用“天气查询工具”,并以正确的格式调用它,最后将结果组织成通顺的回复。
## 4. 进阶实战:构建具备记忆与知识库的智能客服
单一工具和单轮对话的Agent能力有限。接下来,我们构建一个更复杂的Agent,它具备**对话记忆**和**自定义知识库检索**能力,模拟一个智能客服场景。
### 4.1 设计目标与架构
目标:创建一个客服Agent,它能:
1. **记住对话历史**:在多轮对话中引用之前提到的信息。
2. **检索内部知识库**:从公司产品文档(例如一个PDF手册)中查找信息来回答问题。
3. **综合回答**:结合对话历史和检索到的知识生成回答。
架构流程:
用户提问 -> Agent思考 -> [可选:检索知识库] -> [可选:调用其他工具] -> 生成回答 -> 更新记忆
### 4.2 实现对话记忆(Memory)
LangChain提供了多种记忆后端。这里使用最简单的 `ConversationBufferMemory`。
安装额外依赖:
```bash
pip install tiktoken # 用于计算Token,管理记忆长度
更新 main.py 或新建 customer_service_agent.py :
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationalRetrievalChain
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
load_dotenv()
# 1. 初始化LLM和Embeddings
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
embeddings = OpenAIEmbeddings() # 用于将文本转换为向量
# 2. 创建知识库(以PDF为例)
def create_knowledge_base(pdf_path: str):
"""加载PDF文档并创建向量数据库。"""
print("正在加载知识库文档...")
loader = PyPDFLoader(pdf_path)
documents = loader.load()
# 将长文档切分成小块,便于检索
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000, # 每个块的大小
chunk_overlap=200, # 块之间的重叠,避免语义断裂
length_function=len,
)
splits = text_splitter.split_documents(documents)
print(f"文档被切分为 {len(splits)} 个片段。")
# 创建向量存储(这里使用Chroma,轻量级且可持久化)
vectorstore = Chroma.from_documents(
documents=splits,
embedding=embeddings,
persist_directory="./chroma_db" # 指定持久化目录
)
vectorstore.persist() # 保存到磁盘,下次可直接加载
print("知识库创建完成并已保存。")
return vectorstore
# 假设我们有一个“产品手册.pdf”
# 首次运行需要创建知识库
# knowledge_base = create_knowledge_base(“产品手册.pdf”)
# 后续运行可以直接加载
knowledge_base = Chroma(
persist_directory="./chroma_db",
embedding_function=embeddings
)
# 3. 创建记忆
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True, # 返回消息对象而非字符串
output_key='answer' # 指定输出对应的key
)
# 4. 创建对话检索链(这是LangChain的高级Chain,封装了记忆和检索)
qa_chain = ConversationalRetrievalChain.from_llm(
llm=llm,
retriever=knowledge_base.as_retriever(
search_kwargs={"k": 3} # 每次检索返回最相关的3个片段
),
memory=memory,
verbose=True, # 查看检索和生成过程
return_source_documents=True, # 返回参考来源,便于验证
)
# 5. 运行对话
if __name__ == "__main__":
print("智能客服已启动。输入‘退出’或‘quit’结束对话。")
while True:
user_input = input("\n用户: ")
if user_input.lower() in ["退出", "quit", "exit"]:
print("客服对话结束。")
break
# 调用链
result = qa_chain.invoke({"question": user_input})
print(f"\n客服: {result['answer']}")
# 如果需要,可以查看检索到的来源
# for doc in result['source_documents']:
# print(f" 来源: {doc.metadata['source']} - 页码 {doc.metadata.get('page', 'N/A')}")
关键点解释 :
- 记忆(Memory) :
ConversationBufferMemory保存了完整的对话历史。在每次调用时,它会自动将历史记录和当前问题组合起来发送给LLM,从而实现上下文连贯。 - 检索器(Retriever) :
knowledge_base.as_retriever()将向量数据库转换为检索器。当用户提问时,它会从知识库中查找最相关的文本片段,并将这些片段作为“参考材料”提供给LLM,让LLM基于此生成答案。这解决了大模型“胡编乱造”的问题,使其回答有据可依。 - 链(Chain) :
ConversationalRetrievalChain是一个高级抽象,它把LLM、记忆、检索器串联起来,形成了一个完整的“问答流水线”。
4.3 使用本地模型(Ollama)替代OpenAI
如果你希望完全在本地运行,可以使用Ollama部署开源模型。
-
安装并运行Ollama :访问 Ollama官网 下载安装。然后在终端拉取一个模型,例如
Llama 3:ollama pull llama3:8b ollama run llama3:8b # 测试运行 -
修改代码,切换LLM :
# 替换 from langchain_openai import ChatOpenAI from langchain_ollama import ChatOllama # 替换 llm = ChatOpenAI(...) llm = ChatOllama( model="llama3:8b", # 与ollama run使用的模型名一致 base_url="http://localhost:11434", # Ollama默认地址 temperature=0.1 ) # 注意:本地模型的Embeddings也需要替换,例如使用sentence-transformers # pip install sentence-transformers # from langchain_huggingface import HuggingFaceEmbeddings # embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
5. 常见问题与排查指南(FAQ)
在开发Agent过程中,你一定会遇到各种问题。以下是一些高频问题及其解决方案。
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| Agent不调用工具,直接回答问题 | 1. 工具描述( description )不够清晰。 2. LLM的 temperature 参数过高,导致随机性太强。 3. 提示词(Prompt)未明确要求使用工具。 |
1. 检查并重写工具描述,确保其准确描述了工具的功能和使用场景。 2. 将 temperature 调低(如0.1),增加输出的确定性。 3. 优化提示词,在模板中加入强引导,如“你必须使用可用工具来回答问题”。 |
| 工具调用参数格式错误 | 1. args_schema 定义与 _run 方法参数不匹配。 2. LLM未能正确解析用户意图为JSON。 |
1. 确保Pydantic模型的字段名和类型与 _run 方法参数完全一致。 2. 开启 verbose=True 查看Agent的原始“行动”输出,检查JSON是否合法。可以使用 handle_parsing_errors=True 让执行器尝试自动修复。 |
| 本地模型(Ollama)响应慢或报错 | 1. 模型未正确加载或内存不足。 2. Ollama服务未启动或端口被占用。 3. 模型不支持Tool Calling格式。 |
1. 检查终端运行 ollama run 是否正常。确保机器有足够内存(如7B模型约需14GB+)。 2. 运行 ollama serve 确保服务在运行,并检查 base_url 是否正确。 3. 并非所有开源模型都原生支持工具调用。可尝试使用 ReAct 提示词框架(如本文示例),或选用明确支持工具调用的模型(如 Qwen2.5-Coder )。 |
| 知识库检索结果不相关 | 1. 文档切分(Chunk)策略不合理。 2. Embedding模型不匹配或效果差。 3. 检索数量 k 值设置不当。 |
1. 调整 chunk_size 和 chunk_overlap 。对于技术文档,可以尝试按标题切分( MarkdownHeaderTextSplitter )。 2. 尝试不同的Embedding模型(如 text-embedding-3-small , bge-large-zh-v1.5 )。 3. 适当增加 k 值(如从3调到5),但注意可能引入噪声。 |
| 对话记忆混乱或丢失 | 1. 记忆对象未在对话循环中正确传递。 2. 对话轮次太多,超出上下文长度。 |
1. 确保在Chain或Agent执行时,每次都传入同一个 memory 对象。 2. 使用 ConversationSummaryMemory 或 ConversationBufferWindowMemory 来限制记忆长度,只保留最近几轮对话。 |
| 遇到“Rate limit”或“Authentication”错误 | 1. OpenAI API密钥错误或余额不足。 2. 请求频率超限。 |
1. 检查 .env 文件中的密钥是否正确,并在OpenAI官网检查用量。 2. 为代码添加重试逻辑和请求间隔(如使用 tenacity 库),或升级API套餐。 |
6. 工程化最佳实践与进阶方向
当你掌握了基础构建方法后,将这些原型投入生产环境或进行复杂项目开发时,需要关注以下工程化实践。
6.1 提示词工程优化
提示词是Agent的“指挥棒”。一个好的提示词能极大提升表现。
- 角色设定 :明确告诉Agent它扮演的角色(“你是一个专业的天气分析师”)。
- 步骤约束 :强制其按照“思考-行动-观察”的格式输出,便于解析。
- 输出格式 :明确指定最终答案的格式(如“请用中文,以要点列表形式回答”)。
- 负面约束 :告诉它不要做什么(“不要假设用户未提供的信息”)。
- 使用少样本示例(Few-Shot) :在提示词中提供1-2个完整的输入输出示例,能显著提升模型在复杂任务上的表现。
6.2 智能体架构模式
对于复杂任务,单个Agent可能力不从心,可以考虑以下模式:
- 主管模式(Manager-Agent) :一个主管Agent接收用户任务,将其拆解并分配给多个具备特定技能的“子Agent”(如研究Agent、写作Agent、审核Agent),最后汇总结果。
- 工作流模式(Sequential) :使用
LangGraph或CrewAI定义明确的任务执行流程图,让Agent按固定流程工作,适合标准化业务流程。 - 辩论模式(Debate) :多个Agent从不同角度分析同一问题,通过“辩论”得出更全面、可靠的结论。
6.3 可观测性与评估
Agent系统是动态的,必须监控。
- 日志记录 :详细记录每个Agent的思考过程、工具调用(输入/输出)、最终结果。这不仅是调试的需要,也是后续优化和评估的数据基础。
- 链路追踪(Tracing) :使用
LangSmith(LangChain官方平台)或OpenTelemetry等工具,可视化整个Agent调用的链路,方便定位性能瓶颈和错误节点。 - 评估体系 :建立评估标准,可以是:
- 基于规则的评估 :检查输出是否包含关键词、是否符合格式。
- 基于LLM的评估 :用另一个LLM(如GPT-4)作为裁判,评估答案的相关性、正确性、友好度。
- 人工评估 :对关键输出进行抽样人工检查。
6.4 安全与合规
这是企业级应用的生命线。
- 工具权限控制 :不是所有工具都应对所有用户开放。例如,删除数据库的工具需要极高的权限。在工具调用前加入身份验证和权限校验层。
- 输入输出过滤与审查 :对用户的输入和Agent的输出进行内容安全过滤,防止生成有害、偏见或敏感信息。
- 数据隐私 :如果使用云端API,确保传输的数据不包含用户个人身份信息(PII)。考虑对敏感数据进行脱敏或使用本地模型。
- 防止无限循环与资源耗尽 :严格设置
max_iterations(最大循环次数)和max_execution_time(最大执行时间),并在代码层面做好异常捕获和资源清理。
6.5 性能优化
- 缓存 :对频繁且结果不变的LLM调用或工具调用(如查询静态知识)实施缓存,可以大幅降低成本和延迟。LangChain内置了
LLMCache支持。 - 异步处理 :如果Agent需要调用多个独立的外部API,使用异步(
asyncio)可以并行执行,显著减少总等待时间。 - 模型选择 :在链的不同环节使用不同规格的模型。例如,用小型/快速模型处理意图分类和路由,用大型/强力模型处理需要深度推理的最终生成。
从构建一个简单的天气查询助手,到创建一个具备记忆和知识库的客服系统,你已经走完了AI Agent开发的核心路径。这条路径的核心在于理解“规划-工具-记忆”这个铁三角,并学会使用像LangChain这样的框架来组装它们。
接下来的学习路线可以沿着两个方向深入:
- 纵向深入框架 :深入研究
LangGraph来构建有状态、多分支的复杂工作流;学习CrewAI来设计角色明确的多智能体团队。 - 横向扩展能力 :为你的Agent集成更多强大的工具,如网络搜索、代码执行、数据分析(
pandas)、图像生成等,使其成为一个真正的“全能助手”。
记住,所有的复杂系统都是从简单的模块开始的。最好的学习方式就是动手实践:选择一个你感兴趣的具体场景(比如自动整理周报、智能代码审查、个性化学习伴侣),从定义一个工具、设计一个提示词开始,逐步迭代,最终构建出属于你自己的智能体应用。
更多推荐



所有评论(0)