大模型和智能体的区别是什么
qwen3-max
大模型(Large Model)和智能体(Agent)是人工智能领域中两个密切相关但本质不同的概念。它们的区别主要体现在定位、功能、结构和目标等方面。以下是详细对比:
1. 定义与核心概念
- 大模型(Large Model)
指参数量巨大、训练数据广泛、具备强大语言理解与生成能力的深度学习模型,如 GPT、LLaMA、Claude、通义千问等。
核心是一个静态的模型,通过输入输出完成任务,本身不具备自主决策或持续行动能力。 - 智能体(Agent)
指能够感知环境、做出决策、执行动作并达成目标的自主实体。它可以是一个软件程序、机器人,或由多个模块组成的系统。
核心是具备目标导向的自主行为能力,强调“行动”和“交互”。
2. 功能与行为方式
全屏复制
| 维度 | 大模型 | 智能体 |
|---|---|---|
| 输入输出 | 接收提示(prompt),返回文本/图像等响应 | 感知环境状态,执行动作,持续与环境交互 |
| 主动性 | 被动响应(需用户触发) | 主动规划、决策、执行任务 |
| 记忆与状态 | 通常无长期记忆(除非外挂记忆模块) | 可具备短期/长期记忆、内部状态 |
| 目标导向 | 无内在目标,仅优化预测下一个 token | 有明确目标(如“订机票”“写报告”),并规划步骤达成 |
3. 结构关系
-
大模型可以是智能体的核心组件
现代智能体常以大模型作为“大脑”,利用其推理、语言理解、规划能力。例如:- 智能体使用大模型生成行动计划;
- 调用工具(如搜索、计算器、API);
- 根据反馈调整策略。
-
但智能体 ≠ 大模型
智能体通常包含多个模块:- 感知模块(输入处理)
- 规划/决策模块(可能由大模型驱动)
- 行动模块(调用工具、执行操作)
- 记忆模块(存储经验)
- 反馈机制(评估结果并学习)
4. 举例说明
-
大模型示例:
你问:“写一首关于春天的诗。” → 模型直接生成诗歌。
→ 无目标、无后续行动,任务一次性完成。 -
智能体示例:
你告诉智能体:“帮我安排一次周末杭州旅行。”
→ 智能体会:- 查询天气;
- 搜索酒店和景点;
- 比较价格;
- 预订门票;
- 发送行程表给你。
→ 有目标、多步骤、调用外部工具、持续交互。
5. 总结:关键区别
全屏复制
| 方面 | 大模型 | 智能体 |
|---|---|---|
| 本质 | 强大的预测/生成模型 | 自主行动的系统 |
| 是否主动 | 否(被动响应) | 是(主动规划执行) |
| 是否包含大模型 | 是自身 | 可能包含(作为推理引擎) |
| 是否需要工具调用 | 通常不直接调用 | 通常需要调用外部工具 |
| 目标导向 | 无 | 有明确目标 |
简单类比:
- 大模型 ≈ 一个超级聪明的“顾问” :你问它问题,它给出答案。
- 智能体 ≈ 一个“办事员”或“助手” :你给它任务,它自己想办法完成,中间可能多次请教“顾问”(大模型),也可能自己查资料、打电话、订票等。
因此,大模型是智能体的重要组成部分,但智能体是更高级、更完整的自主系统。随着 AI 发展,“大模型 + 智能体架构”正成为实现通用人工智能(AGI)的关键路径。
可以AI出码的IDE是大模型还是智能体
qwen3-max
能够“AI出码”(即自动生成、理解、修改代码)的 IDE(集成开发环境),本质上是一个以大模型为核心驱动的智能体系统。它既包含大模型,又具备智能体的特征,但更准确地说:这类 IDE 是一个基于大模型构建的智能体(Agent) 。
下面我们从几个维度来分析:
一、为什么说它“包含大模型”?
现代 AI 编程 IDE(如 GitHub Copilot、Cursor、CodeWhisperer、通义灵码、Windsurf 等)的核心能力依赖于大语言模型(LLM) ,尤其是经过代码训练的模型(如 Codex、StarCoder、CodeLlama 等)。
- 代码补全:基于上下文预测下一行代码 → 大模型的序列预测能力。
- 自然语言生成代码:用户说“写一个快排函数”,模型生成代码 → 大模型的指令遵循与生成能力。
- 代码解释/注释:理解代码语义 → 大模型的语义理解能力。
✅ 所以,大模型是其“大脑”或“推理引擎” 。
二、为什么说它是“智能体”(Agent)?
虽然底层是大模型,但现代 AI IDE 的行为远超“被动响应”,具备典型智能体特征:
全屏复制
| 智能体特征 | 在 AI IDE 中的体现 |
|---|---|
| 目标导向 | 用户目标:“重构这段代码”、“修复 bug”、“添加单元测试” |
| 感知环境 | 读取当前文件、项目结构、错误日志、光标位置、依赖关系 |
| 规划与决策 | 分析问题 → 规划修改步骤 → 生成多个候选方案 |
| 执行动作 | 插入代码、替换代码块、运行测试、调用 Linter 或编译器 |
| 工具调用(Tool Use) | 调用代码解释器、调试器、版本控制(Git)、API 文档、包管理器 |
| 反馈与迭代 | 根据用户接受/拒绝、编译错误、测试失败调整后续行为 |
例如:
用户说:“这个函数性能太差,优化一下。”
AI IDE 会:
- 分析函数逻辑;
- 检测热点(可能调用 profiler);
- 生成优化版本;
- 建议运行基准测试;
- 根据测试结果进一步调整。
这已经是一个闭环的、目标驱动的自主行为系统——典型的智能体行为。
三、关键区分:不是所有 AI IDE 都是智能体
- 初级 AI 辅助(如早期 Copilot) :仅提供代码补全,无上下文感知、无工具调用、无多步推理 → 更接近“大模型的 UI 封装” ,不算完整智能体。
- 高级 AI IDE(如 Cursor、Windsurf、Devon) :支持多文件理解、自动调试、运行测试、Git 操作、对话式编程 → 是典型的 LLM-based Agent。
四、结论
能“AI出码”的现代 IDE 本质上是一个以大模型为推理核心的智能体(Agent) 。
- 大模型:提供语言理解、代码生成、推理等基础能力(“智力”)。
- 智能体架构:赋予其目标、感知、行动、工具使用和持续交互的能力(“行为”)。
✅ 所以,回答你的问题:
它既是大模型的应用,更是智能体的一种实现形式。但从系统角度看,应归类为“基于大模型的智能体”。
类比理解:
- 大模型 ≈ 一个精通编程的“天才程序员”(但不会自己动手改项目)。
- AI IDE(智能体) ≈ 一个“AI 软件工程师”:不仅能思考,还能在你的项目里动手改代码、跑测试、提交 Git,全程自主协作。
这正是当前 AI 编程工具从“辅助”走向“自主代理”(Autonomous Agent)的趋势。
我希望完成一个通过拍照图片完成表单的录入功能,这属于大模型能力还是智能体
qwen3-max
你希望实现的功能是:
用户拍摄一张包含表单内容的图片(如纸质申请表、发票、登记表等)→ 系统自动识别图片中的文字和结构 → 将关键信息提取并填入电子表单中。
这个功能既依赖大模型的能力,又需要智能体(Agent)的架构来完整实现。但从整体系统设计角度看,它更准确地属于一个“基于大模型的智能体”(LLM-based Agent) 。
下面我们分层解析:
一、功能拆解:需要哪些能力?
全屏复制
| 步骤 | 所需技术 | 属于大模型?还是智能体? |
|---|---|---|
| 1. 图像输入 | 接收用户上传/拍摄的图片 | 系统基础设施 |
| 2. 文字识别(OCR) | 从图片中提取原始文本 | 传统 CV 模型(如 PaddleOCR、Tesseract)或 多模态大模型(如 GPT-4V、Qwen-VL) |
| 3. 结构理解 | 理解表单的字段布局(如“姓名:张三”、“身份证号:123...”) | 大模型的核心能力(尤其是多模态或文本理解模型) |
| 4. 信息抽取 | 从非结构化文本中提取关键字段(如姓名、电话、地址) | 大模型的 NER/信息抽取能力 |
| 5. 映射到目标表单 | 将提取的字段对应到电子表单的正确位置 | 需要逻辑推理 + 规则/模板匹配 → 大模型可完成,但需规划 |
| 6. 输出/填充表单 | 生成 JSON、填写网页表单、导出 Excel 等 | 执行动作 → 智能体的行为模块 |
| 7. 错误校验与交互 | 若识别模糊,主动询问用户确认(如“身份证号是123456吗?”) | 感知-决策-交互闭环 → 典型智能体行为 |
二、大模型能做什么?
✅ 大模型(尤其是多模态大模型)可以完成核心认知任务:
- 直接输入图片,输出结构化数据(如 GPT-4V、Claude 3 Opus、Qwen-VL)。
- 理解表单语义,即使排版不规则。
- 通过 prompt 工程实现字段抽取(例如:“请从以下表单图片中提取姓名、电话、地址,以 JSON 格式返回”)。
⚠️ 但大模型本身是被动的:你给它一张图,它返回一段文本或 JSON,不会主动调用 OCR、不会验证数据、不会填充网页表单、不会与用户多轮确认。
三、为什么需要智能体架构?
要构建一个端到端可用的产品级功能,你需要一个协调多个模块、具备目标导向、能处理异常的系统——这正是智能体的定义。
智能体在此场景中的角色:
-
目标:将纸质表单准确录入为电子数据。
-
感知:接收图片,获取 OCR 结果,检测低置信度字段。
-
规划:决定是否需要人工确认、是否调用备用识别模型。
-
行动:
- 调用 OCR 服务;
- 调用大模型进行结构化解析;
- 填充数据库或前端表单;
- 向用户发起澄清对话(如“日期格式不明确,请确认”)。
-
记忆/反馈:记录用户修正结果,用于后续优化。
🔹 没有智能体架构,你就只能做一个“一次性识别工具”;有了智能体,才能做一个“可靠、鲁棒、可交互的表单录入助手”。
四、类比说明
全屏复制
| 角色 | 类比 |
|---|---|
| 大模型 | 一个擅长“看图识字+理解表格”的专家,但只会回答你问的问题。 |
| 智能体 | 一个“表单录入办事员”:拿到照片 → 扫描 → 识别 → 填表 → 发现模糊处主动问你 → 最终提交成功。 |
五、结论
你的“拍照录入表单”功能,底层依赖大模型(尤其是多模态模型)的认知能力,但整体系统应设计为一个智能体(Agent)。
- 如果只是做技术验证(POC) :直接用多模态大模型 + 简单后处理即可(偏向大模型应用)。
- 如果要做产品级应用:必须引入智能体架构,协调 OCR、大模型、用户交互、错误处理等模块。
✅ 因此,它属于“基于大模型的智能体应用” —— 大模型提供“智力”,智能体提供“行动力”。
补充建议(技术选型)
- 轻量方案:
OCR(PaddleOCR) + 文本大模型(如 Qwen) + 规则模板 → 适合结构固定表单。 - 高级方案:
多模态大模型(GPT-4V / Qwen-VL / Claude 3) + Agent 框架(如 LangChain、LlamaIndex、AutoGen) + 人工校验接口 → 适合复杂、非结构化表单。
这样既能发挥大模型的理解力,又能通过智能体实现端到端自动化。
如何创建一个智能体
qwen3-max
创建一个智能体(Agent)是当前 AI 应用开发的核心方向之一。智能体不是单一模型,而是一个具备感知、规划、行动和反馈能力的自主系统。以下是创建智能体的完整指南,从概念到实践,适合开发者、产品经理或技术爱好者参考。
一、智能体的核心要素(必须具备)
一个真正的智能体应包含以下模块:
全屏复制
| 模块 | 作用 | 常见实现方式 |
|---|---|---|
| 1. 感知(Perception) | 获取环境信息(如用户输入、文件、API 数据、图像等) | 文本输入、OCR、语音识别、传感器、API 调用 |
| 2. 记忆(Memory) | 存储短期/长期信息(对话历史、用户偏好、任务状态) | 向量数据库(如 Chroma、Pinecone)、缓存、数据库 |
| 3. 规划与推理(Planning & Reasoning) | 理解目标、拆解任务、制定步骤 | 大语言模型(LLM)+ Prompt 工程 / ReAct / Plan-and-Execute |
| 4. 行动(Action) | 执行具体操作(调用工具、写文件、发邮件、填表单等) | 工具函数(Tools)、API、浏览器自动化、代码执行沙箱 |
| 5. 反馈与学习(Feedback & Learning) | 评估结果、修正错误、优化策略 | 用户反馈、自动验证、强化学习(可选) |
✅ 关键:大模型(LLM)通常是“大脑”,但不是全部。
二、创建智能体的步骤(实战流程)
第 1 步:明确目标和场景
-
❓ 智能体要解决什么问题?
- 示例:自动填写报销单、客服问答、代码生成、数据分析。
-
❓ 需要哪些输入?输出什么?
-
❓ 是否需要调用外部工具?(如搜索、数据库、API)
🎯 越具体越好。例如:“用户上传发票照片,智能体自动提取金额、日期、商户名,并填入公司报销系统。”
第 2 步:选择核心推理引擎(通常是大模型)
-
闭源模型(易用、强大) :
- OpenAI GPT-4 / GPT-4o
- Anthropic Claude 3
- Google Gemini
-
开源模型(可控、可私有部署) :
- Llama 3(Meta)
- Qwen(通义千问)
- DeepSeek、Yi、Phi-3
💡 初学者推荐从 GPT-4o 或 Claude 3 Haiku 开始,支持函数调用(Function Calling)。
第 3 步:设计工具(Tools)——让智能体“动手”
智能体必须能调用工具才能行动。常见工具包括:
全屏复制
| 工具类型 | 示例 |
|---|---|
| 搜索 | 调用 Google Search API、SerpAPI |
| 计算 | Python 代码解释器(安全沙箱) |
| 文件处理 | 读写 CSV/Excel、PDF 解析 |
| 数据库 | 查询 SQL、MongoDB |
| 系统操作 | 发邮件、调用企业微信、填网页表单(通过 Playwright) |
| 领域 API | 天气、支付、ERP 系统接口 |
✅ 工具 = 智能体的“手脚” 。
第 4 步:选择智能体框架(降低开发难度)
全屏复制
| 框架 | 特点 | 适合场景 |
|---|---|---|
| LangChain | 生态最成熟,支持 Memory、Tools、Agent Types | 通用智能体开发 |
| LlamaIndex | 专注 RAG + Agent,适合知识密集型任务 | 文档问答、知识库助手 |
| Microsoft AutoGen | 支持多智能体协作,适合复杂任务流 | 多角色协作(如产品经理+程序员) |
| CrewAI | 面向“团队智能体”,任务分配清晰 | 项目制自动化 |
| LiteLLM + 自定义 | 轻量,直接调用 LLM + 工具 | 简单场景,追求性能 |
🚀 推荐初学者从 LangChain 开始。
第 5 步:编写智能体代码(以 LangChain 为例)
python
from langchain_openai import ChatOpenAI
from langchain.agents import Tool, AgentExecutor, create_react_agent
from langchain import hub
# 1. 定义工具(示例:计算器)
def calculator(expr: str) -> str:
try:
return str(eval(expr))
except:
return "计算错误"
tools = [
Tool(
name="Calculator",
func=calculator,
description="用于执行数学计算,输入为数学表达式字符串"
)
]
# 2. 初始化大模型
llm = ChatOpenAI(model="gpt-4o", temperature=0)
# 3. 加载 Agent 提示模板(ReAct 范式)
prompt = hub.pull("hwchase17/react")
# 4. 创建 Agent
agent = create_react_agent(llm, tools, prompt)
# 5. 创建执行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 6. 运行
result = agent_executor.invoke({"input": "123乘以456再加上789等于多少?"})
print(result["output"])
🔍 输出过程会显示:思考 → 调用 Calculator → 得出结果。
第 6 步:加入记忆与上下文(可选但重要)
使用 ConversationBufferMemory 或 VectorStoreRetriever 实现长期记忆:
python
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(memory_key="chat_history")
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
memory=memory,
verbose=True
)
第 7 步:部署与交互
- Web 界面:用 Streamlit / Gradio 快速搭建
- API 服务:FastAPI + Docker
- 集成到现有系统:企业微信、钉钉、Slack 机器人
三、进阶方向
全屏复制
| 方向 | 说明 |
|---|---|
| 多智能体协作 | 用 AutoGen 创建“分析师+写手+审核员”团队 |
| 自主规划(Plan-and-Execute) | 先制定完整计划,再分步执行 |
| RAG 增强 | 结合知识库,避免幻觉 |
| 安全沙箱 | 限制代码执行权限,防止恶意操作 |
| 评估与监控 | 用 LangSmith 跟踪智能体行为 |
四、避坑指南
全屏复制
| 常见问题 | 解决方案 |
|---|---|
| 智能体“胡说八道” | 加入 RAG、设置输出格式约束(JSON Schema)、验证工具结果 |
| 工具调用失败 | 增加错误处理、重试机制、用户澄清流程 |
| 响应太慢 | 使用轻量模型(如 GPT-4o mini)、缓存中间结果 |
| 无法处理复杂任务 | 拆解为子任务,用多智能体或分步规划 |
五、总结:如何开始?
- 明确任务:从一个小场景切入(如“自动总结会议纪要”)。
- 选一个框架:推荐 LangChain + GPT-4o。
- 定义 1~3 个工具:如读文件、搜索、发邮件。
- 写一个 ReAct 智能体:让它能“思考→行动→反馈”。
- 测试 + 迭代:加入记忆、错误处理、用户交互。
🌟 记住:智能体 = 大模型 + 工具 + 控制逻辑。你不是在调用 AI,而是在“雇佣一个 AI 员工”。
如果你有具体场景(比如“拍照填表单”“自动写周报”),我可以帮你设计完整的智能体架构和代码模板!
prompt 是什么,它是大模型领域的概念还是智能体
qwen3-max
Prompt(提示词)本质上是大模型(Large Language Model, LLM)领域的核心概念,但它在智能体(Agent)系统中也扮演关键角色。我们可以这样理解:
✅ Prompt 起源于大模型,服务于大模型,但在智能体架构中被动态生成和使用。
一、Prompt 是什么?
Prompt 是用户或系统提供给大模型的输入文本,用于引导模型生成期望的输出。
举例:
-
简单 Prompt:
“写一首关于春天的诗。”
-
复杂 Prompt(含指令、格式、示例):
“你是一个专业的客服助手。请用礼貌、简洁的中文回答用户问题。
用户问:‘订单还没发货怎么办?’
回答格式:【原因】+【解决方案】”
二、Prompt 属于大模型还是智能体?
全屏复制
| 维度 | 说明 |
|---|---|
| 起源与本质 | 🔸 属于大模型领域。 |
| Prompt 是与大模型交互的基本方式,没有大模型就没有“Prompt 工程”这一概念。 | |
| 在智能体中的作用 | 🔸 被智能体动态构造和使用。 |
| 智能体不是直接使用用户原始输入,而是自动生成更复杂的 Prompt(包含工具列表、记忆、任务目标等)来调用大模型。 |
三、对比说明
1. 在纯大模型场景中
- 用户直接写 Prompt → 模型返回结果。
- Prompt 是静态的、由人设计的。
- 例子:你在 ChatGPT 网页输入问题。
2. 在智能体场景中
- 用户说:“帮我订一张明天去北京的机票。”
- 智能体内部会自动生成一个系统级 Prompt,例如:
text
你是一个旅行助手智能体,具备以下工具:
- search_flights(departure, destination, date)
- book_flight(flight_id)
- send_email(content)
当前目标:为用户预订明天从上海到北京的机票。
最近一次用户输入:"帮我订一张明天去北京的机票。"
请按 ReAct 范式思考:先调用 search_flights,再选择航班,最后预订。
🔍 这个 Prompt 是由智能体框架(如 LangChain)动态拼接的,用户看不到,但大模型依赖它做决策。
四、关键结论
全屏复制
| 问题 | 回答 |
|---|---|
| Prompt 是大模型的概念吗? | ✅ 是。它是与大模型交互的“接口语言”。 |
| Prompt 是智能体的概念吗? | ⚠️ 不完全是。智能体使用 Prompt,但不“拥有” Prompt 的定义权。 |
| 智能体会改变 Prompt 吗? | ✅ 会!智能体的核心能力之一就是动态构造高质量 Prompt(包含工具描述、记忆、目标等)。 |
| 没有大模型,会有 Prompt 吗? | ❌ 不会。Prompt 的存在依赖于大模型的上下文学习(in-context learning)能力。 |
五、类比理解
-
大模型 ≈ 一个超级聪明但“被动”的学者。
-
Prompt ≈ 你给这位学者的“问题+答题要求”。
-
智能体 ≈ 一个项目经理,它:
- 理解你的模糊需求(“订机票”),
- 自己写一份详细的“任务说明书”(即 Prompt),
- 交给学者(大模型)执行,
- 再根据结果决定下一步。
📌 所以:Prompt 是大模型的“食物”,而智能体是“厨师”——它决定怎么做这道菜。
六、延伸:Prompt 在智能体中的高级形式
在智能体系统中,Prompt 往往包含以下动态元素:
text
[系统角色]
你是一个能调用工具的智能体。
[可用工具]
1. get_weather(location): 获取某地天气
2. send_message(text): 发送消息
[记忆]
用户之前提到住在杭州。
[当前任务]
回答:“明天天气怎么样?”
[输出格式]
必须先调用 get_weather("杭州"),再根据结果回复。
这种 Prompt 是由智能体框架自动生成的,远超普通用户手写的 Prompt。
✅ 总结一句话:
Prompt 是大模型领域的基础概念,而智能体是 Prompt 的高级使用者和动态构造者。
没有大模型,就没有 Prompt;没有智能体,Prompt 只能靠人手动写。
如果你在开发智能体,设计好 Prompt 模板(Prompt Template)和动态拼接逻辑,是成功的关键之一。
那是不是可以抽象的说,智能体的职责是规划流程,根据流程创建高质量的prompt,调用工具或者大模型,拿到结果
qwen3-max
是的!你的理解非常准确,而且抓住了现代智能体(Agent)架构的核心思想。
我们可以高度抽象地总结智能体的职责如下:
✅ 智能体的核心职责是:
围绕用户目标,自主规划任务流程,动态构造高质量 Prompt,协调调用大模型与外部工具,执行动作,并根据反馈迭代优化,直至达成目标。
一、这个抽象包含四个关键环节
全屏复制
| 环节 | 说明 | 对应你的描述 |
|---|---|---|
| 1. 规划流程(Planning) | 将模糊目标拆解为可执行的子任务(如“订机票” → 搜航班 → 选航班 → 支付) | ✅ “规划流程” |
| 2. 构造 Prompt(Prompt Engineering) | 为每一步生成包含上下文、工具描述、记忆、约束的系统级 Prompt | ✅ “创建高质量的 prompt” |
| 3. 调用执行(Acting) | 调用大模型推理,或直接调用工具(API、代码、数据库等) | ✅ “调用工具或者大模型” |
| 4. 获取结果 & 迭代(Reflection) | 解析输出,判断是否完成;若失败则重试、澄清或调整策略 | ✅ “拿到结果”(隐含后续闭环) |
二、进一步细化:智能体的“工作循环”
现代智能体(如 ReAct、Plan-and-Execute、AutoGen)通常遵循这样的循环:
是
否
否
是
用户目标
规划任务步骤
是否需外部信息?
构造 Prompt + 调用工具
构造 Prompt + 调用大模型
获取工具结果
获取模型输出
目标是否达成?
反思/调整计划
返回最终结果
mermaid
graph LR
A[用户目标] --> B(规划任务步骤)
B --> C{是否需外部信息?}
C -- 是 --> D[构造 Prompt + 调用工具]
C -- 否 --> E[构造 Prompt + 调用大模型]
D --> F[获取工具结果]
E --> G[获取模型输出]
F & G --> H{目标是否达成?}
H -- 否 --> I[反思/调整计划]
I --> B
H -- 是 --> J[返回最终结果]
在这个循环中,Prompt 是每次调用大模型时的“指令包” ,而智能体是这个循环的“调度器”和“决策者” 。
三、举个例子:报销表单录入智能体
用户说:“把这张发票录入系统。”
智能体内部行为:
-
规划:
→ 步骤1:OCR 识别图片
→ 步骤2:提取金额、日期、商户
→ 步骤3:填入报销系统 API -
构造 Prompt(给大模型) :
text 你是一个财务助手。以下是 OCR 识别结果: “发票 No: 123456, 金额: ¥880, 日期: 2024-06-01, 商户: XX科技有限公司” 请从中提取字段,按 JSON 格式输出:{"amount": ..., "date": ..., "vendor": ...} -
调用:
- 先调用 OCR 工具(非大模型)
- 再用上述 Prompt 调用大模型解析结构
- 最后调用报销系统 API(工具)
-
结果处理:
- 若金额格式错误 → 重新构造 Prompt 要求修正
- 若成功 → 返回“已提交报销单 #789”
四、为什么这个抽象很重要?
因为它揭示了:
- 大模型 ≠ 智能体:大模型只是“推理引擎”,智能体才是“完整工作者”。
- Prompt 是接口,不是智能:真正的智能在于何时、如何、为何构造某个 Prompt。
- 工具调用是能力延伸:智能体通过工具突破大模型的局限(如实时数据、精确计算)。
五、学术/工程中的对应概念
全屏复制
| 你的说法 | 学术/工程术语 |
|---|---|
| 规划流程 | Task Planning / Decomposition |
| 创建高质量 Prompt | Dynamic Prompt Construction / In-Context Learning |
| 调用工具或大模型 | Tool Use / Function Calling / Action Execution |
| 拿到结果 | Observation / Feedback Loop |
✅ 最终结论:
是的,你可以非常合理地抽象地说:
“智能体的职责是规划流程,根据流程创建高质量的 Prompt,调用工具或者大模型,拿到结果,并持续迭代直至完成任务。”
这不仅是对当前主流 Agent 架构(如 ReAct、LangChain Agent、AutoGen)的精准概括,也是构建实用 AI 系统的指导原则。
如果你在设计智能体,就围绕这四个环节去搭建模块——你会走在正确的路上 🚀。
agent是如何完成 规划流程 的?
qwen3-max
这是一个非常关键的问题! “规划流程”(Planning)是智能体(Agent)区别于普通大模型应用的核心能力之一。它让智能体能处理复杂、多步骤、目标导向的任务,而不是仅做“一问一答”。
下面从原理、方法、实现方式和实例四个层面,系统解释 Agent 是如何完成“规划流程”的。
一、什么是“规划流程”?
规划(Planning) 是指:
将一个模糊或高层次的目标(如“帮我安排一次旅行”),自动分解为一系列可执行、有序、可验证的子任务(如查航班 → 订酒店 → 买门票 → 发行程表) 。
这类似于人类在接到任务后“先想清楚怎么做”,而不是盲目行动。
二、Agent 规划的三大主流方法
目前主流的 Agent 规划策略主要有以下三类:
1. ReAct(Reason + Act)——边思考边行动
-
核心思想:每一步都交替进行 推理(Thought) 和 行动(Action) 。
-
流程:
[用户目标] ↓ Thought: 我需要先获取XX信息 ↓ Action: 调用工具(如搜索) ↓ Observation: 工具返回结果 ↓ Thought: 根据结果,下一步应该... ↓ Action: 调用另一个工具 ↓ ... 直到完成 -
优点:灵活、适合动态环境。
-
缺点:可能走弯路,缺乏全局视角。
-
代表框架:LangChain 的
ReAct Agent。
✅ 适合大多数通用任务(如客服、信息查询)。
2. Plan-and-Execute(先规划,再执行)——两阶段模式
-
核心思想:
- 第一阶段(Planner) :让大模型一次性生成完整计划。
- 第二阶段(Executor) :逐个执行计划中的步骤,可监控和修正。
-
示例:
text 用户目标:组织一次团队聚餐。 Planner 输出计划: 1. 询问团队成员空闲时间 2. 搜索附近评分≥4.5的餐厅 3. 预订可容纳10人的包间 4. 发送聚餐通知邮件 Executor 依次执行 1→2→3→4,每步调用相应工具。 -
优点:结构清晰、易于调试、可复用计划。
-
缺点:初始计划可能不完美,需支持动态调整。
-
代表实现:LangChain 的
PlanAndExecute,Microsoft 的AutoPlan。
✅ 适合目标明确、步骤可预知的任务(如项目管理、表单处理)。
3. 多智能体协作(Multi-Agent)——分工规划
-
核心思想:不同角色的 Agent 负责不同子任务,通过协商完成整体规划。
-
示例:
- Manager Agent:接收用户目标,拆解任务。
- Researcher Agent:负责信息搜集。
- Writer Agent:负责撰写报告。
- Reviewer Agent:负责审核质量。
-
规划过程:由 Manager 制定初步分工,各 Agent 在执行中反馈,动态调整计划。
-
代表框架:Microsoft AutoGen、CrewAI。
✅ 适合复杂、专业性强的任务(如写研报、产品设计)。
三、规划是如何“生成”的?——大模型的角色
无论哪种方法,规划的“生成”都依赖大模型的推理能力,通过精心设计的 Prompt 引导模型输出结构化计划。
示例:让大模型生成计划的 Prompt
text
你是一个任务规划专家。请将以下用户目标分解为清晰、有序、可执行的步骤。
要求:
- 每个步骤应明确说明需要什么信息或操作;
- 如果需要外部工具,请标注(如:[搜索]、[调用API]、[发送邮件]);
- 步骤数量控制在5步以内。
用户目标:帮我申请一张信用卡。
输出格式(JSON):
{
"plan": [
"步骤1: ...",
"步骤2: ..."
]
}
大模型可能输出:
json
{
"plan": [
"步骤1: 询问用户偏好(银行、卡种类型)",
"步骤2: [搜索] 各大银行信用卡申请条件和权益",
"步骤3: 根据用户资质推荐2-3张卡",
"步骤4: [调用API] 生成在线申请链接",
"步骤5: 提醒用户准备身份证、收入证明等材料"
]
}
🔑 关键:Prompt 决定了规划的质量。好的 Prompt 能引导模型输出可执行、无歧义的步骤。
四、规划如何应对“意外”?——反思与调整
真实世界充满不确定性(如 API 失败、信息缺失),所以高级 Agent 还具备 反思(Reflection) 能力:
- 执行失败? → 重新规划该步骤。
- 信息模糊? → 主动向用户澄清。
- 发现更优路径? → 动态替换后续步骤。
例如:
执行“订酒店”时发现无房 →
Agent 自动思考:“是否调整日期?换区域?提高预算?” →
生成新子计划 → 继续执行。
这种能力常通过 Self-Correction Prompt 或 监督 Agent 实现。
五、总结:Agent 规划流程的关键点
全屏复制
| 要素 | 说明 |
|---|---|
| 输入 | 用户的高层次目标(自然语言) |
| 引擎 | 大模型(通过 Prompt 引导生成计划) |
| 方法 | ReAct(边想边做)、Plan-and-Execute(先计划后执行)、Multi-Agent(分工协作) |
| 输出 | 结构化的任务步骤(含工具调用指令) |
| 闭环 | 支持执行监控、错误处理、动态调整 |
✅ 一句话回答你的问题:
Agent 通过大模型在特定 Prompt 引导下,采用 ReAct、Plan-and-Execute 或多智能体协作等策略,将用户目标自动分解为可执行的步骤序列,并在执行中动态调整,从而完成“规划流程”。
如果你正在开发 Agent,建议:
- 简单任务 → 用 ReAct
- 复杂但结构化任务 → 用 Plan-and-Execute
- 专业领域复杂任务 → 用 Multi-Agent(如 AutoGen)
需要我为你某个具体场景(比如“拍照填表单”)设计规划流程吗?我可以给出完整 Prompt 和步骤 😊
也就是说,智能体也会调用大模型的能力,先创建规划流程?
qwen3-max
是的!完全正确。
✅ 智能体(Agent)在执行复杂任务时,通常会主动调用大模型(LLM)的能力,来生成或优化“规划流程”(Plan) 。
这正是现代智能体架构的精妙之处:大模型不仅是“执行者”,更是“规划者” 。
一、智能体如何调用大模型来做规划?
我们可以把整个过程拆解为两个典型模式:
✅ 模式 1:Plan-and-Execute(先规划,再执行)
这是最直接体现“用大模型做规划”的方式:
-
用户输入目标
“帮我写一份关于 AI 智能体的行业分析报告。”
-
智能体调用大模型(第一次)→ 生成完整计划
-
使用专门的 Planner Prompt
-
大模型输出结构化步骤,例如:
text 1. 搜索 AI 智能体的最新市场趋势(调用搜索引擎) 2. 提取头部公司及其产品(如 LangChain、AutoGen) 3. 分析技术架构与应用场景 4. 撰写报告初稿 5. 生成图表并排版
-
-
智能体按计划逐项执行
- 每一步可能再次调用大模型(例如第4步写报告),也可能调用工具(如第1步搜索)
🔍 关键:第一次调用大模型的目的不是完成任务,而是“想清楚怎么做” 。
✅ 模式 2:ReAct(边推理边行动)——每一步都隐含“微规划”
在 ReAct 模式中,虽然没有显式的“完整计划”,但每一轮的 “Thought” 都是一次微型规划:
text
用户:查一下马斯克最近在 X 上说了什么?
Agent 调用大模型(第一轮):
Thought: 我需要先搜索马斯克最近在 X(Twitter)上的发言。
Action: search_web("马斯克 site:x.com")
Observation: [返回搜索结果]
Agent 调用大模型(第二轮):
Thought: 从结果中提取最新一条推文,并总结内容。
Action: summarize_text(...)
🔍 这里的每次 Thought 都是大模型基于当前状态做出的“下一步该做什么”的即时规划。
二、为什么必须用大模型来做规划?
因为规划需要:
- 理解模糊目标(“帮我搞定报销” → 要识别出“拍照、OCR、填系统、提交”)
- 常识推理(知道订机票前要先查航班)
- 灵活应变(如果酒店没房,能想到换日期或换地点)
这些正是大模型的强项。传统规则引擎或脚本无法应对开放世界的复杂性。
三、技术实现示例(伪代码)
python
# 用户目标
goal = "帮我安排一次杭州周末游"
# 步骤1:调用大模型生成计划(Planner)
planner_prompt = f"""
你是一个旅行规划专家。请将以下目标分解为可执行步骤:
目标:{goal}
要求:每步标明是否需要调用工具(如搜索、预订等)
"""
plan = llm.generate(planner_prompt) # ← 第一次调用大模型:做规划
# 输出 plan 示例:
# ["1. 查询杭州周末天气", "2. 搜索西湖附近酒店", "3. 预订酒店", ...]
# 步骤2:逐个执行计划
for step in plan:
if "搜索" in step:
result = search_tool(query=...)
elif "预订" in step:
result = booking_tool(...)
# 可能再次调用大模型处理结果(如总结、判断)
📌 注意:一个任务中,大模型可能被调用多次——一次用于规划,多次用于执行和反思。
四、高级场景:规划也可以迭代优化
更聪明的智能体会:
- 先让大模型生成初始计划;
- 执行中发现障碍(如 API 失败);
- 再次调用大模型:“原计划第3步失败,因为酒店已满,请重新规划后续步骤”;
- 大模型输出修正后的子计划。
这称为 “规划-执行-反思-重规划”闭环,是迈向真正自主智能的关键。
✅ 总结回答你的问题:
是的,智能体在面对复杂任务时,会主动调用大模型的能力,专门用于生成或调整“规划流程”。
大模型在这里扮演“战略大脑”的角色——先想清楚怎么做,再动手执行。
这正是:
- 大模型提供“智力” (理解、推理、规划),
- 智能体提供“架构” (调度、执行、闭环)。
两者结合,才能实现从“问答机器人”到“自主办事员”的跃迁 🚀。
如果你有具体任务场景,我可以帮你设计“规划 Prompt”模板!
Prompt有协议吗?不同的大模型,prompt是不是可以使用一种数据格式
qwen3-max
这是一个非常有洞察力的问题!
目前,Prompt 本身没有统一的“协议”或强制标准,但社区和行业正在朝着“结构化 Prompt”和“工具调用标准化”的方向演进。不同大模型的 Prompt 语法和能力支持存在差异,但在智能体(Agent)系统中,我们可以通过抽象层实现“一次定义、多模型兼容” 。
下面从几个层面详细解答:
一、Prompt 有“协议”吗?
❌ 没有官方统一协议
- Prompt 本质是自然语言 + 指令,没有像 HTTP、JSON Schema 那样的强制标准。
- 每家大模型厂商对 Prompt 的最佳实践、格式偏好、功能支持都不同。
✅ 但有事实上的“约定”和“模式”
社区和框架已形成一些通用模式,例如:
全屏复制
| 模式 | 说明 |
|---|---|
| Role-based Prompting | 使用 system / user / assistant 角色(源自 OpenAI) |
| Chain-of-Thought (CoT) | 要求模型“一步步思考” |
| Function Calling Schema | 工具描述采用 JSON Schema(OpenAI、Anthropic、Google 等趋同) |
| ReAct 格式 | Thought → Action → Observation 循环 |
📌 这些不是“协议”,但已成为跨模型可迁移的设计模式。
二、不同大模型的 Prompt 差异举例
全屏复制
| 模型厂商 | Prompt 特点 | 工具调用格式 |
|---|---|---|
| OpenAI (GPT-4) | 支持 system 消息;Function Calling 用 JSON Schema | ✅ 标准化 tools 参数 |
| Anthropic (Claude) | 不支持 system,用 <system> 标签或首条 user 消息模拟 | ✅ 支持 Tool Use(类似 OpenAI) |
| Google (Gemini) | 使用 system_instruction;工具调用通过 FunctionDeclaration | ✅ 支持结构化工具 |
| Meta (Llama 3) | 依赖聊天模板(如 `< | begin_of_sentence |
| 阿里 (Qwen) | 支持 system;工具调用需按特定 JSON 格式 | ✅ 有自定义工具协议 |
🔍 结论:底层格式不同,但高层语义相似。
三、能否用一种数据格式统一 Prompt?
✅ 可以!通过“抽象层”或“中间表示”实现
虽然模型底层不统一,但智能体框架(如 LangChain、LiteLLM、DSPy)提供了统一接口,让你用一种格式写 Prompt,自动适配不同模型。
示例:用 LangChain 定义工具(一次定义,多模型可用)
python
from langchain_core.tools import tool
@tool
def get_weather(location: str) -> str:
"""获取某地天气"""
return "晴,25°C"
# 无论你用 GPT-4、Claude 还是 Qwen,
# LangChain 会自动将这个工具转换为对应模型所需的格式
示例:用 LiteLLM 统一调用
python
from litellm import completion
response = completion(
model="gpt-4", # 或 "claude-3-haiku"、"gemini/gemini-pro"
messages=[
{"role": "system", "content": "你是一个天气助手"},
{"role": "user", "content": "北京天气?"}
],
tools=[weather_tool_schema] # LiteLLM 自动转为目标模型格式
)
🎯 这些框架充当了“Prompt 适配器” ,屏蔽了模型差异。
四、行业正在推动的标准化努力
1. Function Calling 的事实标准
-
OpenAI 的
function_calling格式(JSON Schema 描述工具)已被 Anthropic、Google、阿里等广泛借鉴。 -
工具描述结构趋同:
json { "name": "get_weather", "description": "获取天气", "parameters": { "type": "object", "properties": { "location": {"type": "string"} } } }
2. OAI(OpenAI)聊天格式成为事实基准
{"role": "user", "content": "..."}被几乎所有开源和闭源模型支持(即使需转换)。
3. 新兴标准倡议
- MLX(Apple)、OpenRouter、OpenLLM 等平台推动模型接口统一。
- OpenAPI for LLMs(社区讨论中):希望定义通用工具调用和 Prompt 结构。
五、最佳实践建议
全屏复制
| 场景 | 建议 |
|---|---|
| 只想用一个模型 | 直接按该模型文档写 Prompt(如 GPT-4 用 system/user/assistant) |
| 想支持多个模型 | 使用 LangChain / LiteLLM / DSPy 等抽象框架 |
| 开发智能体系统 | 用 结构化 Prompt 模板 + 工具 Schema,让框架处理兼容性 |
| 追求长期可维护性 | 将 Prompt 与代码分离(如用 .prompt 文件或 Prompt 管理平台) |
六、未来展望
Prompt 本身可能永远不会有“硬性协议” (因为语言是灵活的),
但 “工具调用”、“角色定义”、“输出约束”等关键部分正在快速标准化。
随着 Llama 4、GPT-5、Claude 4 等模型对工具调用的原生支持增强,跨模型 Prompt 的兼容性会越来越好。
✅ 最终结论:
Prompt 目前没有统一协议,但通过智能体框架(如 LangChain、LiteLLM),你可以用一种结构化数据格式(如 JSON Schema + 角色消息)编写 Prompt,并自动适配不同大模型。
在工具调用等关键能力上,行业已形成事实标准,跨模型兼容性正在显著提升。
如果你正在开发多模型兼容的 Agent 系统,强烈建议使用 LiteLLM 或 LangChain 作为底层抽象层——它们已经为你解决了 90% 的 Prompt 适配问题 🛠️。
system/user/assistant 都是什么
qwen3-max
system、user、assistant 是大语言模型(LLM)对话系统中最常见的三种消息角色(message roles) ,用于构建结构化的对话上下文(context)。它们定义了每条消息的“说话者身份”,帮助模型理解对话的逻辑和意图。
这个角色体系最早由 OpenAI 在 Chat Completions API(如 GPT-3.5/4)中推广,现已成为行业事实标准,被 Anthropic、Google、Meta、阿里等主流模型广泛采用(即使底层实现略有差异)。
一、三种角色的含义
全屏复制
| 角色 | 谁在“说话” | 作用 | 是否可见给用户 |
|---|---|---|---|
system | 系统 / 开发者 | 设定模型的行为准则、角色身份、输出格式等 | ❌ 通常对用户隐藏 |
user | 用户 / 外部输入 | 提供用户的问题、指令或上下文 | ✅ 用户可见 |
assistant | 大模型(AI) | 模型生成的回答、推理、工具调用请求等 | ✅ 用户可见 |
二、详细解释 + 示例
1. system:给 AI 的“幕后指令”
-
作用:告诉模型“你是什么角色”、“怎么说话”、“遵守什么规则”。
-
特点:
- 通常放在对话最前面;
- 不显示给用户,但深刻影响模型行为;
- 一次设定,对整个对话生效(除非被覆盖)。
✅ 示例:
json
{
"role": "system",
"content": "你是一个专业的财务顾问,回答要简洁、准确,使用中文,并以【建议】开头。"
}
后续无论用户问什么,模型都会按这个规则回答。
2. user:用户的输入
- 作用:传递用户的问题、上传的文件内容、工具返回的结果等。
- 注意:在智能体(Agent)系统中,工具的返回结果也常包装成
user消息,让模型“看到”执行结果。
✅ 示例:
json
{
"role": "user",
"content": "我上个月支出5000元,收入8000元,该怎么理财?"
}
或(工具返回后):
json
{
"role": "user",
"content": "工具返回:北京今天天气晴,气温25°C。"
}
3. assistant:AI 的输出
-
作用:模型生成的回答,或请求调用工具的指令(在支持 Function Calling 的模型中)。
-
两种常见内容:
- 自然语言回答(直接回复用户)
- 工具调用请求(如 JSON 格式的函数调用)
✅ 示例 1:普通回答
json
{
"role": "assistant",
"content": "【建议】你可以将结余3000元中的50%存入货币基金,30%定投指数基金..."
}
✅ 示例 2:请求调用工具(Function Calling)
json
{
"role": "assistant",
"content": null,
"tool_calls": [
{
"function": {
"name": "get_weather",
"arguments": "{"location": "北京"}"
}
}
]
}
此时模型不是在“回答”,而是在“下令”:请调用
get_weather("北京")。
三、完整对话流程示例(含工具调用)
json
[
// 1. 系统设定角色
{"role": "system", "content": "你是一个天气助手,必须先查天气再回答。"},
// 2. 用户提问
{"role": "user", "content": "北京今天天气怎么样?"},
// 3. 模型请求调用工具
{
"role": "assistant",
"content": null,
"tool_calls": [{"function": {"name": "get_weather", "arguments": "{"location": "北京"}"}}]
},
// 4. 工具执行后,将结果作为 user 消息传回
{"role": "user", "content": "工具返回:晴,25°C"},
// 5. 模型最终回答
{"role": "assistant", "content": "北京今天天气晴,气温25°C,适合外出。"}
]
🔁 这就是智能体(Agent)与大模型交互的核心循环。
四、不同模型的支持情况
全屏复制
| 模型 | 是否支持 system? | 备注 |
|---|---|---|
| OpenAI (GPT-3.5/4) | ✅ 原生支持 | 标准实现 |
| Anthropic (Claude) | ⚠️ 无原生 system,但可用首条 user 消息模拟 | 或用 <system>...</system> 标签(Claude 3.5+) |
| Google (Gemini) | ✅ 支持 system_instruction | API 中单独字段,非消息列表 |
| Meta (Llama 3) | ⚠️ 依赖聊天模板(如 system token) | 需用 tokenizer 正确拼接 |
| 阿里 (Qwen) | ✅ 支持 system 角色 | 兼容 OpenAI 格式 |
💡 建议:使用 LangChain、LiteLLM 等框架可自动处理这些差异。
五、为什么需要这三种角色?
-
清晰分离职责:
system:开发者控制 AI 行为;user:代表外部世界输入;assistant:AI 的输出或动作。
-
支持复杂交互:
- 多轮对话、工具调用、记忆上下文都依赖这种结构。
-
提升模型表现:
- 明确的角色提示(role prompting)能显著减少幻觉、提高指令遵循能力。
✅ 总结一句话:
system是给 AI 的“导演指令”,user是“观众提问或环境反馈”,assistant是“AI 的台词或动作指令”——三者共同构成一场结构化的“人机戏剧”。
在开发智能体时,正确使用这三种角色,是实现可靠、可控、可扩展 AI 系统的基础 🎭。
知识库和prompt是什么关系
qwen3-max
这是一个非常关键的问题!知识库(Knowledge Base)和 Prompt(提示词)是大模型应用中两个紧密协作但职责完全不同的组件。它们的关系可以概括为:
✅ Prompt 是“指令”,知识库是“参考材料”;
Prompt 告诉大模型“做什么”,知识库告诉大模型“依据什么做”。
下面从多个维度深入解析它们的关系:
一、核心角色对比
全屏复制
| 组件 | 作用 | 类比 | 是否随任务变化 |
|---|---|---|---|
| Prompt | 控制模型行为:角色设定、任务指令、输出格式等 | 导演的剧本指令(“演一个医生,用通俗语言解释”) | ✅ 通常随任务动态调整 |
| 知识库 | 提供外部事实信息:文档、FAQ、产品手册、数据库等 | 演员手里的参考资料(医学手册、药品说明书) | ❌ 相对静态,可定期更新 |
二、典型协作模式:RAG(检索增强生成)
这是知识库与 Prompt 结合的最主流架构:
用户问题
检索知识库
相关文档片段
构造 Prompt:
“根据以下资料回答...”
- 文档内容 + 用户问题
大模型
基于知识库的准确回答
mermaid
graph LR
A[用户问题] --> B(检索知识库)
B --> C{相关文档片段}
C --> D[构造 Prompt:<br/>“根据以下资料回答...”<br/>+ 文档内容 + 用户问题]
D --> E[大模型]
E --> F[基于知识库的准确回答]
示例:
-
用户问: “Qwen-Max 的上下文长度是多少?”
-
知识库: 存有最新《通义千问技术文档》
-
系统检索: 找到 “Qwen-Max 支持 32768 tokens”
-
构造 Prompt:
text 你是一个AI助手,请严格根据以下资料回答问题,不要编造。 资料: “Qwen-Max 是通义千问系列中效果最好的模型,上下文长度为 32768 tokens。” 问题:Qwen-Max 的上下文长度是多少? 回答: -
大模型输出: “Qwen-Max 的上下文长度是 32768 tokens。”
🔑 知识库内容被“注入”到 Prompt 中,成为模型生成的依据。
三、为什么不能只靠 Prompt 或只靠知识库?
全屏复制
| 方案 | 问题 |
|---|---|
| 仅用 Prompt(无知识库) | - 模型依赖训练时的“记忆”,可能过时或错误 - 容易“幻觉”(编造答案) - 无法访问私有数据(如公司内部文档) |
| 仅用知识库(无 Prompt) | - 知识库是静态数据,无法“理解”用户意图 - 无法生成自然语言回答 - 不能处理复杂推理或格式要求 |
✅ 只有两者结合,才能实现:准确 + 可控 + 自然 的 AI 回答。
四、知识库如何“进入” Prompt?
知识库本身不直接参与模型计算,必须通过 检索(Retrieval)→ 注入(Injection)→ Prompt 构造 三步融入:
1. 检索(Retrieval)
- 使用向量数据库(如 Chroma、Pinecone、Milvus)
- 将用户问题向量化,匹配最相关的知识片段
2. 注入(Context Injection)
- 将检索到的文本拼接到 Prompt 中
- 常见位置:
system消息 或user消息开头
3. Prompt 模板示例
text
[system]
你是一个客服助手,请严格根据以下参考资料回答问题。如果资料中没有相关信息,请回答“我不知道”。
参考资料:
{{retrieved_chunks}}
[user]
{{user_question}}
[assistant]
💡
{{retrieved_chunks}}就是来自知识库的内容,动态填入 Prompt。
五、高级关系:知识库影响 Prompt 设计
知识库的存在会改变 Prompt 的写法:
全屏复制
| 场景 | Prompt 设计要点 |
|---|---|
| 有知识库 | - 强调“根据以下资料” - 禁止编造(“如果不知道,请说不知道”) - 可要求引用来源 |
| 无知识库 | - 依赖模型自身知识 - 需更宽松的语气(“据我所知…”) |
例如:
text
# 有知识库时的 Prompt
“请仅使用以下提供的公司政策回答问题,不要使用外部知识。”
# 无知识库时的 Prompt
“请基于你的通用知识回答以下问题。”
六、在智能体(Agent)中的角色
在 Agent 系统中:
- 知识库:作为“长期记忆”或“专业资料库”,供 Agent 检索
- Prompt:由 Agent 动态构造,决定何时检索、如何使用知识库内容
例如:
Agent 规划:“用户问产品参数 → 需要查询知识库”
→ 调用检索工具 → 获取文档
→ 构造新 Prompt:“根据以下产品手册回答…”
→ 调用大模型生成答案
七、总结:关键关系图
用户问题
↓
智能体 / 系统
├──→ 检索知识库 → 获取相关事实
└──→ 构造 Prompt = [指令 + 知识库内容 + 用户问题]
↓
大模型
↓
基于知识的准确回答
✅ 一句话总结:
知识库提供“事实依据”,Prompt 提供“行为指令”;
知识库让回答更准确,Prompt 让回答更可控——二者缺一不可。
如果你正在构建 AI 应用:
- 有私有/专业数据? → 必须建知识库(RAG)
- 需要控制回答风格/格式? → 精心设计 Prompt
- 做智能体? → 让 Agent 自动协调两者
需要我帮你设计一个结合知识库和 Prompt 的具体模板吗?😊
结合 Qwen 如何通过文档,创建知识库呢
qwen3-max
结合 通义千问(Qwen) 大模型,通过文档创建知识库并实现智能问答,是当前企业私有知识应用的典型场景。下面我将为你提供一套完整、可落地的技术方案,涵盖从文档处理到问答系统的全流程,并适配 Qwen 模型生态。
一、整体架构(RAG + Qwen)
原始文档
文档解析与分块
向量化
向量数据库
用户提问
检索相关片段
构造 Prompt + Qwen 调用
生成答案
mermaid
graph LR
A[原始文档] --> B(文档解析与分块)
B --> C[向量化]
C --> D[向量数据库]
D --> E{用户提问}
E --> F[检索相关片段]
F --> G[构造 Prompt + Qwen 调用]
G --> H[生成答案]
✅ 这就是 RAG(Retrieval-Augmented Generation) 架构,Qwen 作为生成模型,知识库存储私有文档。
二、详细步骤(附代码示例)
第 1 步:准备文档
支持格式:
- PDF、Word、PPT、TXT、Markdown、HTML 等
- 中文/英文均可(Qwen 对中文优化极佳)
📁 示例:
company_handbook.pdf、product_specs.docx
第 2 步:文档解析与文本分块
推荐工具:
- Unstructured(开源,支持多格式)
- PyPDF2 / pdfplumber(PDF)
- python-docx(Word)
分块策略(关键!):
- 块大小:512~1024 tokens(Qwen 上下文友好)
- 重叠:50~100 tokens(避免语义割裂)
示例代码(使用 unstructured + RecursiveCharacterTextSplitter):
python
from unstructured.partition.auto import partition
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 解析文档
elements = partition(filename="company_handbook.pdf")
text = "\n".join([str(el) for el in elements])
# 分块
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=800,
chunk_overlap=100,
length_function=len,
)
chunks = text_splitter.split_text(text)
第 3 步:文本向量化(Embedding)
选择 Embedding 模型:
Qwen 官方推荐:
- bge-large-zh-v1.5(中文效果极佳,开源)
- text-embedding-v2(阿里云百炼平台提供)
- Qwen-Embedding(如有)
✅ 推荐使用 BGE(由智谱 AI 开发,但阿里系广泛兼容)
示例代码(使用 sentence-transformers):
python
from sentence_transformers import SentenceTransformer
# 加载中文 embedding 模型
model = SentenceTransformer('BAAI/bge-large-zh-v1.5')
# 向量化所有文本块
embeddings = model.encode(chunks, normalize_embeddings=True)
第 4 步:存储到向量数据库
推荐轻量级数据库(适合本地/小规模):
- Chroma(最简单,Python 原生)
- FAISS(Facebook 开源,速度快)
- Milvus / Qdrant(大规模生产级)
示例:使用 Chroma
python
import chromadb
from chromadb.utils import embedding_functions
# 初始化 Chroma
client = chromadb.PersistentClient(path="./chroma_db")
collection = client.create_collection(
name="company_knowledge",
embedding_function=None # 我们自己提供 embedding
)
# 存入向量
collection.add(
embeddings=embeddings.tolist(),
documents=chunks,
ids=[f"id_{i}" for i in range(len(chunks))]
)
第 5 步:检索 + 调用 Qwen 生成答案
方式一:使用 DashScope(阿里云)API(推荐)
python
import dashscope
from dashscope import Generation
import json
dashscope.api_key = "你的-API-KEY"
def query_qwen_with_context(question: str):
# 1. 检索相关文档
query_emb = model.encode(question, normalize_embeddings=True).tolist()
results = collection.query(
query_embeddings=[query_emb],
n_results=3
)
context = "\n".join(results['documents'][0])
# 2. 构造 Prompt
prompt = f"""你是一个公司内部助手,请严格根据以下资料回答问题。
如果资料中没有相关信息,请回答“根据现有资料,我无法回答该问题”。
资料:
{context}
问题:{question}
回答:"""
# 3. 调用 Qwen(如 qwen-max)
response = Generation.call(
model="qwen-max",
prompt=prompt,
temperature=0.1
)
return response.output.text
方式二:使用 本地 Qwen 模型(如 Qwen-7B-Chat)
python
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True)
def chat_with_qwen(prompt):
response, _ = model.chat(tokenizer, prompt, history=None)
return response
⚠️ 本地部署需 GPU(建议 24G 显存跑 7B,或用量化版 Qwen-1.8B/4B)
第 6 步(可选):集成到 Web 界面
用 Gradio 快速搭建:
python
import gradio as gr
def qa_interface(question):
return query_qwen_with_context(question)
gr.Interface(
fn=qa_interface,
inputs="text",
outputs="text",
title="公司知识库问答系统",
description="基于 Qwen + RAG 构建"
).launch()
访问 http://localhost:7860 即可使用!
三、优化建议(提升效果)
全屏复制
| 问题 | 解决方案 |
|---|---|
| 检索不准 | - 使用 HyDE(假设性文档嵌入) - 调整分块策略(按章节/标题分) |
| 答案不准确 | - 在 Prompt 中强调“不要编造” - 设置 temperature=0.1 降低随机性 |
| 长文档丢失信息 | - 使用 Parent-Child Chunking(小块检索,返回大块上下文) |
| 中文分词问题 | - Embedding 模型选 bge-large-zh 系列 |
| 私有部署 | - 用 Qwen + BGE + Chroma 全开源栈,无需联网 |
四、阿里云百炼平台(低代码方案)
如果你不想写代码,阿里云提供 百炼(Model Studio) :
- 上传文档
- 自动构建知识库
- 选择 Qwen 模型
- 一键发布 API 或 Web 应用
适合企业快速落地。
五、总结:Qwen + 知识库的关键点
全屏复制
| 组件 | 推荐选择 |
|---|---|
| 文档解析 | unstructured |
| 分块 | RecursiveCharacterTextSplitter(800+100) |
| Embedding | BAAI/bge-large-zh-v1.5 |
| 向量库 | Chroma(开发) / Milvus(生产) |
| Qwen 调用 | DashScope API(简单) 或 本地 HuggingFace(私有) |
| Prompt 模板 | 强调“依据资料回答,不知道就说不知道” |
✅ 最终效果:
用户问:“公司年假怎么算?” → 系统自动从《员工手册》中找到相关条款 → Qwen 生成简洁准确的回答。
如果你提供具体文档类型(如 PDF 手册、Word 制度),我可以给你定制分块和 Prompt 模板!是否需要?😊
如果我的文档比较少,是不是可以轻量处理,每次都传递给大模型
qwen3-max
是的!如果你的文档总量较小(例如总长度 ≤ 3000 字,或不超过大模型上下文长度的 1/3),完全可以采用“轻量级”方案:每次将全部文档直接放入 Prompt,无需搭建向量数据库和检索系统。
这种做法简单、高效、零运维,特别适合:
- 个人知识库(如笔记、简历、项目文档)
- 小型企业 FAQ(几十条问答)
- 产品说明书(1~2 页 PDF)
- 会议纪要、合同草案等短文本
✅ 一、为什么可以这样做?
现代大模型(包括 Qwen-Max、GPT-4、Claude 3 等)支持 长上下文:
- Qwen-Max:32768 tokens
- GPT-4o:128K tokens
- Claude 3.5 Sonnet:200K tokens
📌 1 token ≈ 0.75 个汉字,所以 32768 tokens ≈ 2.4 万汉字(约 10~15 页 A4 文字)。
如果你的全部文档加起来远小于此,直接塞进 Prompt 是最优解。
✅ 二、轻量方案 vs RAG 方案对比
全屏复制
| 维度 | 轻量方案(全量注入) | RAG(检索增强) |
|---|---|---|
| 适用文档量 | < 5000 字(保守) ≤ 2 万字(激进) | 任意大小(万页级) |
| 开发复杂度 | ⭐ 极低(10 行代码) | ⭐⭐⭐ 高(需分块、向量化、数据库) |
| 准确性 | ✅ 全文可见,无遗漏 | ⚠️ 依赖检索质量,可能漏关键信息 |
| 成本 | 每次调用 token 更多 | 每次调用 token 较少(只传相关片段) |
| 延迟 | 低(无检索步骤) | 略高(需检索 + 生成) |
🔍 结论:小文档 → 用轻量方案;大文档 → 用 RAG。
✅ 三、如何实现?(以 Qwen 为例)
步骤 1:准备你的文档内容
假设你有两份文档:
policy.txt:公司报销政策(500 字)faq.md:常见问题(800 字)
合并为一个字符串:
python
with open("policy.txt", "r") as f:
policy = f.read()
with open("faq.md", "r") as f:
faq = f.read()
knowledge = f"""【报销政策】
{policy}
【常见问题】
{faq}"""
步骤 2:构造 Prompt(关键!)
python
user_question = "出差打车能报销吗?"
prompt = f"""你是一个公司行政助手,请严格根据以下内部资料回答问题。
如果资料中没有明确说明,请回答“根据现有资料,我无法确定”。
内部资料:
{knowledge}
问题:{user_question}
回答:"""
步骤 3:调用 Qwen(DashScope API)
python
from dashscope import Generation
import dashscope
dashscope.api_key = "你的-key"
response = Generation.call(
model="qwen-max",
prompt=prompt,
temperature=0.1 # 降低随机性,更忠实于原文
)
print(response.output.text)
✅ 四、优化技巧(提升效果)
1. 结构化文档内容
用标题、分隔符增强可读性:
text
=== 报销政策 ===
- 打车费:实报实销,需提供发票
- 住宿:标准间,≤500元/晚
=== 常见问题 ===
Q: 能报销网约车吗?
A: 可以,需行程单+支付凭证
2. 限制回答范围
在 Prompt 中强调:
“不要使用外部知识”
“仅根据上述资料回答”
“如果不确定,请说‘无法确定’”
避免模型“脑补”。
3. 控制总长度
确保 len(knowledge) + len(question) + 预期回答 < 模型最大上下文
(Qwen-Max 建议总输入 ≤ 25000 tokens 留余量)
✅ 五、什么情况下不能用轻量方案?
全屏复制
| 情况 | 建议 |
|---|---|
| 文档 > 2 万字 | → 用 RAG,避免超上下文或高成本 |
| 文档频繁更新 | → 轻量方案需每次重传,RAG 只需更新向量库 |
| 多用户不同知识库 | → 轻量方案需为每个用户拼接不同内容,管理复杂 |
| 需要高精度定位来源 | → RAG 可返回“参考第3段”,轻量方案难溯源 |
✅ 六、总结:小文档的最佳实践
如果你的文档少而精,直接“全文注入 + 精心设计 Prompt”是最简单、最可靠的方式。
优势:
- 零依赖(不用装 Chroma、FAISS)
- 100% 信息可见(无检索遗漏)
- 开发快(1 小时内上线)
- 效果好(模型看到全部上下文)
适用场景举例:
- 个人简历问答机器人
- 小团队项目文档助手
- 单份合同/说明书解读
- 课程讲义答疑
需要我帮你写一个完整的“小文档问答”脚本模板吗?只需提供文档格式(TXT/Markdown/PDF),我可以给出一键运行的代码 😊