最近在尝试将大模型应用到实际业务中,从简单的对话到复杂的知识库问答,踩了不少坑。网上资料虽然多,但要么太零散不成体系,要么只讲理论缺乏实操。为了帮助大家系统性地掌握 AI 应用开发的核心链路,我花了大量时间整理和实战,最终形成了这份覆盖从基础到进阶的完整教程。
本教程将围绕AI 大模型应用开发的核心路径展开,内容涵盖Python 基础、Prompt Engineering、RAG 技术、Coze 智能体、Dify 工作流等关键模块,共计 21 节。无论你是零基础的开发者,还是希望将 AI 能力集成到现有系统的工程师,都能从中找到清晰的步骤和可运行的代码。学完后,你将能够独立搭建一个具备私有知识问答、自动化工作流能力的 AI 应用。
1. 课程全景与学习路线图
在深入细节之前,我们先对 AI 应用开发的全景有一个整体认识。一个典型的、面向生产的 AI 应用,其技术栈可以抽象为以下几个层次:
- 基础层(Infrastructure): 提供算力和模型服务。包括云厂商的模型 API(如 OpenAI GPT、百度文心、智谱 GLM)、开源模型本地部署(如 Llama、Qwen)、以及向量数据库(如 Milvus、Chroma)。
- 能力层(Capabilities): 核心 AI 功能的实现。主要包括Prompt Engineering(让模型理解并执行指令)、RAG(为模型注入外部知识)、以及Agent(让模型具备规划和使用工具的能力)。
- 编排与开发层(Orchestration & Development): 将底层能力组装成完整应用。低代码平台如Coze、Dify在此发挥作用,而使用Python框架(如 LangChain、LlamaIndex)进行编程开发则提供了更高的灵活性。
- 应用层(Application): 最终呈现给用户的界面或服务。可能是聊天机器人、内容生成工具、数据分析助手等。
本课程的学习路线正是自底向上,从夯实基础开始,逐步构建复杂能力:
- 第一阶段(第1-5节): 打好 Python 和 Prompt 基础。这是与模型“对话”的起点。
- 第二阶段(第6-12节): 深入 RAG 技术。解决模型“知识截止”和“幻觉”问题,构建私有知识库应用。
- 第三阶段(第13-17节): 探索 AI Agent 与工作流。让模型学会思考、规划和调用工具。
- 第四阶段(第18-21节): 工程化与平台化。使用 Coze、Dify 等平台快速构建应用,并了解生产环境的最佳实践。
接下来,我们从最核心的“对话”技能——Prompt Engineering 开始。
2. Prompt Engineering:与大模型高效沟通的艺术
很多人认为调用大模型就是发一段文本,然后等待回复。但实际上,Prompt(提示词)的质量直接决定了模型输出的效果。糟糕的 Prompt 会导致答案答非所问、格式混乱、甚至包含错误信息。本节将系统讲解 Prompt 的核心原则与高级技巧。
2.1 核心原则:清晰、具体、结构化
一个有效的 Prompt 通常包含以下几个部分:
- 角色(Role): 定义模型需要扮演的角色,如“你是一位资深 Python 开发专家”。
- 任务(Task): 清晰、具体地描述你希望模型完成什么。
- 上下文(Context): 提供完成任务所需的背景信息。
- 输入(Input): 需要模型处理的具体数据或问题。
- 输出格式(Output Format): 明确指定回答的格式,如 JSON、Markdown 列表、代码块等。
示例:一个糟糕的 Prompt vs 一个优秀的 Prompt
# 糟糕的 Prompt:模糊、不具体 prompt_bad = "帮我写个函数。" # 优秀的 Prompt:清晰、具体、结构化 prompt_good = """ 你是一位经验丰富的 Python 开发工程师。请根据以下要求,编写一个函数。 **任务**: 编写一个函数,用于安全地删除一个文件。如果文件不存在,则记录警告信息而不抛出异常;如果删除成功,则记录信息。 **上下文**: - 项目使用 Python 3.8+。 - 使用内置的 `os` 和 `logging` 模块。 - 函数需要具备良好的错误处理机制。 **输入**: - `file_path`:字符串类型,表示要删除的文件路径。 **输出格式**: - 返回一个布尔值:`True` 表示删除成功或文件不存在,`False` 表示删除过程中发生其他错误。 - 在函数内部使用 `logging.warning` 和 `logging.info` 进行记录。 - 请提供完整的函数代码,包含函数定义、文档字符串(docstring)和必要的导入语句。 """2.2 高级技巧:Few-Shot 与 Chain-of-Thought
当简单指令无法达到效果时,我们需要更高级的技巧。
- Few-Shot Prompting(少样本提示): 通过提供几个输入-输出的例子,让模型“照葫芦画瓢”。这对于格式固定、逻辑复杂的任务非常有效。
# Few-Shot Prompting 示例:让模型学习将用户查询转换为搜索引擎关键词 few_shot_prompt = """ 请将用户的问题转换成更适合搜索引擎查询的关键词列表。 示例1: 用户问题: “北京最近有什么好看的科幻电影上映?” 搜索引擎关键词: [“北京”, “科幻电影”, “上映”, “近期”] 示例2: 用户问题: “如何用Python爬取天气数据并保存到Excel?” 搜索引擎关键词: [“Python”, “爬虫”, “天气数据”, “保存”, “Excel”] 现在,请转换以下问题: 用户问题: “学习机器学习需要哪些数学基础?” 搜索引擎关键词: """- Chain-of-Thought(CoT,思维链): 引导模型展示其推理步骤,而不是直接给出最终答案。这能显著提升模型在复杂逻辑、数学问题上的准确性。你可以直接要求模型“逐步思考”,或提供 CoT 的示例。
# Chain-of-Thought Prompting 示例 cot_prompt = """ 请逐步推理解决以下数学问题。 问题:一个篮子里有15个苹果。小明拿走了3个,小红又放入了比小明拿走的多2倍的苹果。现在篮子里有多少个苹果? 让我们一步步思考: 1. 最初有15个苹果。 2. 小明拿走了3个,所以剩下 15 - 3 = 12 个苹果。 3. 小红放入的苹果数量是“比小明拿走的多2倍”。小明拿走了3个,“多2倍”意味着是 3 * (2+1) = 9 个吗?不,这里需要仔细理解。“比A多2倍”通常理解为 A + 2A = 3A。所以比3个多2倍,就是 3 + 3*2 = 9 个。或者直接是 3 * 3 = 9 个。 4. 小红放入了9个苹果。现在篮子里的苹果是 12 + 9 = 21 个。 5. 所以,现在篮子里有21个苹果。 答案:21掌握了如何与模型沟通后,我们面临下一个核心问题:如何让模型知晓它训练数据之外的最新信息或私有知识?这就需要引入 RAG 技术。
3. RAG 技术详解:为模型注入“新鲜记忆”
RAG(Retrieval-Augmented Generation,检索增强生成)是当前构建企业级知识库问答系统的核心技术。它通过“检索”相关文档片段,并将其作为上下文“增强”给生成模型,从而让模型能够基于特定知识库给出准确回答。
3.1 RAG 的核心工作流程
一个标准的 RAG 流程包含以下关键步骤:
- 文档加载与切分: 将 PDF、Word、TXT、网页等原始文档加载进来,并切分成大小适中的“块”(Chunks)。切分策略(按段落、按字符数、重叠窗口)直接影响检索效果。
- 文本向量化(Embedding): 使用嵌入模型(如 text-embedding-ada-002、BGE、M3E)将文本块转换为高维向量。语义相似的文本,其向量在空间中的距离也更近。
- 向量存储: 将向量和对应的原始文本块存入向量数据库(如 Chroma、Milvus、Qdrant、PGVector)。
- 检索: 当用户提问时,将问题同样转换为向量,并在向量数据库中搜索与之最相似的 K 个文本块。
- 增强生成: 将检索到的文本块作为上下文,与用户问题一起组合成最终的 Prompt,发送给大语言模型(LLM)生成答案。
3.2 动手搭建一个简易 RAG 系统
下面我们使用langchain和chromadb库,快速实现一个本地 RAG 问答系统。
环境准备:确保你已安装 Python 3.8+,并使用以下命令安装依赖:
pip install langchain langchain-community langchain-chroma chromadb # 我们使用 OpenAI 的 Embedding 和 Chat 模型,需要安装 openai 库并配置 API_KEY pip install openai核心代码实现:
# file: simple_rag.py import os from langchain_community.document_loaders import TextLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings, ChatOpenAI from langchain_chroma import Chroma from langchain_core.prompts import ChatPromptTemplate from langchain_core.runnables import RunnablePassthrough from langchain_core.output_parsers import StrOutputParser # 1. 设置你的 OpenAI API Key (请替换为你的真实密钥,或使用环境变量) os.environ["OPENAI_API_KEY"] = "your-api-key-here" # 2. 加载并切分文档 loader = TextLoader("./knowledge_base.txt", encoding="utf-8") # 假设你有一个知识库文件 documents = loader.load() text_splitter = RecursiveCharacterTextSplitter( chunk_size=500, # 每个块的大小 chunk_overlap=50, # 块之间的重叠字符,避免语义割裂 separators=["\n\n", "\n", "。", "!", "?", ",", "、", " "] ) docs = text_splitter.split_documents(documents) print(f"文档被切分为 {len(docs)} 个块") # 3. 创建向量存储 embeddings = OpenAIEmbeddings() vectorstore = Chroma.from_documents( documents=docs, embedding=embeddings, persist_directory="./chroma_db" # 向量数据库持久化目录 ) # 创建检索器 retriever = vectorstore.as_retriever(search_kwargs={"k": 3}) # 检索最相关的3个块 # 4. 定义 Prompt 模板 template = """请根据以下上下文回答用户的问题。如果你不知道答案,就说你不知道,不要编造。 上下文: {context} 问题:{question} 请用中文给出有帮助的答案:""" prompt = ChatPromptTemplate.from_template(template) # 5. 初始化 LLM llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) # 6. 构建 RAG 链 rag_chain = ( {"context": retriever, "question": RunnablePassthrough()} | prompt | llm | StrOutputParser() ) # 7. 进行问答 if __name__ == "__main__": while True: user_question = input("\n请输入你的问题 (输入 'quit' 退出): ") if user_question.lower() == 'quit': break answer = rag_chain.invoke(user_question) print(f"\n答案:{answer}")运行与验证:
- 在脚本同目录下创建一个
knowledge_base.txt文件,写入一些知识内容,例如关于你公司产品的介绍。 - 运行脚本
python simple_rag.py。 - 输入问题,观察模型是否能根据你的文本内容回答。
这个简易系统涵盖了 RAG 的核心流程。但在生产环境中,我们还需要考虑更多因素,例如检索质量优化。
3.3 RAG 的优化策略:重排序与混合检索
基础的向量相似度检索有时会返回相关但不精确的片段。重排序(Re-ranking)技术可以对此进行优化。它使用一个更精细的交叉编码器模型对初步检索到的结果进行二次评分和排序,将最相关的结果排在前面。
# 伪代码展示重排序思路 # 假设我们已有一个初步检索结果列表 `initial_docs` from sentence_transformers import CrossEncoder # 加载一个重排序模型 reranker = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2') # 为每个(查询,文档)对打分 pairs = [[user_question, doc.page_content] for doc in initial_docs] scores = reranker.predict(pairs) # 根据分数对文档重新排序 ranked_docs = [doc for _, doc in sorted(zip(scores, initial_docs), reverse=True)] # 将排名最高的文档用于生成此外,混合检索(Hybrid Search)结合了稠密检索(向量相似度)和稀疏检索(如 BM25 关键词匹配),能同时捕捉语义相似性和关键词匹配,在多样化的查询上表现更鲁棒。许多现代向量数据库(如 Weaviate, Qdrant)已原生支持混合检索。
4. 从脚本到应用:使用 Dify 构建可视化 AI 工作流
当我们掌握了 RAG、Prompt 等核心能力后,如何快速将其产品化,并提供一个友好的用户界面?Dify这样的 AI 应用开发平台提供了完美的解决方案。它是一个开源的 LLM 应用开发平台,允许你通过可视化工作流的方式,编排模型、提示词、知识库和工具。
4.1 Dify 核心概念与本地部署
Dify 将 AI 应用开发抽象为几个核心概念:
- 提示词编排: 提供强大的 Prompt 编辑器,支持变量、上下文、条件判断。
- 知识库: 内置文档处理、向量化、检索能力,轻松创建 RAG 应用。
- 工作流: 通过拖拽节点(LLM调用、代码执行、条件分支、API调用等)构建复杂的 AI 业务流程。
- 模型与工具: 支持接入数十种主流模型,并可自定义 API 工具。
本地部署 Dify(使用 Docker Compose):这是最推荐的部署方式,适合开发和测试。
- 环境准备: 确保服务器已安装 Docker 和 Docker Compose。
- 克隆仓库并启动:
# 克隆 dify 仓库 git clone https://github.com/langgenius/dify.git cd dify/docker # 启动所有服务 docker-compose up -d - 访问与初始化: 等待几分钟后,在浏览器访问
http://localhost:3000。首次访问会进入初始化页面,设置管理员账号并配置初始模型(如 OpenAI API)。
4.2 实战:在 Dify 中构建一个智能客服助手
我们将构建一个结合了知识库(RAG)和对话能力的客服助手。
步骤 1:创建知识库
- 在 Dify 侧边栏进入“知识库” -> “创建知识库”。
- 输入名称,如“产品手册”。
- 在“处理方式”中,选择分段规则和嵌入模型(可使用 Dify 内置或配置自己的)。
- 点击“创建”,然后进入知识库,通过“上传文件”或“同步网站”添加你的产品文档(PDF、Word等)。Dify 会自动完成切分、向量化和索引。
步骤 2:构建工作流
- 进入“工作流” -> “创建空白工作流”。
- 从左侧节点区拖拽组件构建流程:
- 开始节点: 接收用户问题。
- 知识库检索节点: 连接到上一步创建的“产品手册”知识库。将“开始节点”的
query变量输入到此节点。 - LLM 节点: 选择你的对话模型(如 GPT-3.5-Turbo)。在提示词框中编写 Prompt,例如:
你是一个专业的客服助手。请严格根据以下提供的产品知识来回答用户的问题。 如果知识库内容不足以回答问题,请礼貌地告知用户你暂时无法解答,并建议其通过其他渠道咨询。 产品知识: {{#context#}} <!-- 这是知识库检索节点返回的上下文变量 --> 用户问题:{{query}} - 结束节点: 将 LLM 节点的回答输出。
- 连接各个节点(从节点的输出端口拖拽到下一个节点的输入端口)。
- 点击右上角“发布”,为工作流命名并保存。
步骤 3:创建 AI 应用并发布
- 进入“应用” -> “创建应用”,选择“工作流”类型。
- 选择你刚刚创建的工作流。
- 进入应用后,你可以测试对话效果。Dify 会自动生成一个 Web 聊天界面。
- 在“发布”选项卡,你可以获取 API 端点,以便集成到自己的业务系统中,也可以将聊天窗口以 iframe 形式嵌入网站。
通过 Dify,我们无需编写大量后端和前端代码,就快速搭建了一个具备私有知识问答能力的 AI 应用。接下来,我们看看另一个热门平台——Coze。
5. Coze 实战:快速创建与分发 AI 智能体
如果说 Dify 侧重于企业级应用开发和编排,那么Coze则更侧重于快速创建和分享个性化的 AI 智能体(Bot)。Coze 提供了丰富的插件、工作流和知识库能力,让每个人都能像搭积木一样构建自己的 AI 助手。
5.1 Coze 智能体核心构成
一个 Coze 智能体主要由以下几部分组成:
- 人设与回复逻辑: 定义 Bot 的身份、性格和基础对话风格。
- 提示词: 核心指令,定义 Bot 的能力范围和回答规则。
- 知识库: 上传文件,让 Bot 拥有特定领域的专业知识。
- 插件: 扩展 Bot 的能力边界,例如搜索网页、生成图片、查询天气、执行代码等。
- 工作流: 当任务需要多步骤完成时,可以用工作流来定义复杂的逻辑。例如,用户说“总结今天AI领域的新闻”,工作流可以依次调用“搜索插件”获取新闻、“总结插件”提炼内容、“发布插件”发送到群组。
- 开场白与建议问题: 优化用户体验。
5.2 案例:创建一个“技术文档翻译与润色专家” Bot
目标:创建一个 Bot,用户上传英文技术文档(如 API 文档),Bot 能将其翻译成流畅、专业的中文,并确保技术术语准确。
创建步骤:
- 进入 Coze 官网,创建新的 Bot。
- 设定人设与提示词:
- 名称: TechDoc Translator
- 简介: 专注于技术文档的翻译与润色专家。
- 提示词:
你是一位资深技术文档工程师和翻译专家。你的任务是将用户提供的英文技术文档(如 API 文档、产品说明书、开发指南)翻译成中文。 请遵循以下原则: 1. **准确性第一**:技术术语必须准确翻译,可参考行业通用译法。不确定的术语在括号内保留英文原文。 2. **符合中文技术文档风格**:语言简洁、客观、逻辑清晰。避免口语化。 3. **格式保持**:尽量保留原文的标题层级(如 #, ##)、列表、代码块等 Markdown 格式。 4. **语句流畅**:翻译后的中文应通顺自然,避免生硬的直译。可以对长句进行合理切分。 5. **专业润色**:检查并修正原文中可能存在的拼写或语法错误(在不改变原意的前提下)。 如果用户提供的是文档片段,请直接输出翻译结果。如果用户提供的是整个文档文件,请告知用户你已开始处理,并分部分提供翻译。
- 添加知识库:
- 点击“知识库” -> “创建”,上传一份你认可的优质技术文档中文翻译范例(如某开源项目的官方中文文档)。这有助于 Bot 学习专业的翻译风格和术语。
- 配置插件(可选增强):
- 添加“网页搜索”插件。当遇到非常新的、知识库中未收录的技术术语时,Bot 可以尝试联网搜索以确认准确译法。
- 发布与分享:
- 配置完成后,点击发布。你可以将 Bot 发布到 Coze 平台,获取链接分享给他人;也可以将其接入 Discord、飞书、微信等平台。
通过 Coze,我们在几分钟内就创建了一个功能聚焦的 AI 智能体,无需关心服务器、模型部署等底层细节。这非常适合快速原型验证和轻量级场景。
6. 工程化与生产环境最佳实践
无论是使用 Python 自行开发,还是借助 Dify/Coze 等平台,当 AI 应用走向生产环境时,我们必须关注稳定性、安全性、成本和可维护性。
6.1 稳定性与容错
- API 调用重试与退避: 网络波动或模型服务商限流可能导致调用失败。必须实现带有指数退避机制的自动重试。
import time from tenacity import retry, stop_after_attempt, wait_exponential @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10)) def call_llm_with_retry(prompt): # 这里是调用 LLM API 的代码 response = client.chat.completions.create(...) return response - 设置超时: 为所有外部调用(模型 API、向量数据库检索)设置合理的超时时间,避免线程阻塞。
- 熔断与降级: 当模型服务持续不可用时,应触发熔断机制,并切换到降级方案(如返回缓存答案、使用更简单的规则引擎)。
6.2 安全与合规
- 输入输出过滤与审查: 对用户的输入和模型的输出进行安全检查,防止注入攻击、敏感信息泄露或生成有害内容。
- 权限控制: 在 RAG 系统中,确保用户只能检索其有权访问的知识库文档。这需要在向量检索前或后加入权限过滤层。
- 数据隐私: 如果使用第三方模型 API,需确认其隐私政策。对敏感数据,优先考虑使用本地部署的开源模型。
- 审计日志: 记录所有用户查询和模型响应,用于问题排查、效果分析和合规审计。
6.3 成本优化
- 缓存策略: 对相同或相似的查询结果进行缓存,避免重复调用昂贵的模型 API。
- 提示词优化: 精简 Prompt,移除不必要的指令。使用
max_tokens参数限制生成长度。 - 模型选型: 根据任务复杂度选择合适的模型。简单的分类、提取任务可以使用更便宜、更快的模型(如 GPT-3.5-Turbo),复杂的创作、推理任务再使用能力更强的模型(如 GPT-4)。
- 异步与批处理: 对于非实时任务,可以将请求队列化,进行批量处理,有时能获得更优的费率。
6.4 可观测性与持续改进
- 全面监控: 监控 API 延迟、错误率、Token 消耗、知识库检索命中率等关键指标。
- 效果评估: 建立评估体系,定期用测试集评估 AI 应用的回答准确率、相关性和有用性。可以结合人工评审和自动指标(如 ROUGE, BLEU)。
- 反馈闭环: 提供用户反馈渠道(如“点赞/点踩”),将标注后的低质量回答加入改进流程,用于优化 Prompt、知识库或模型微调。
从基础的 Python 和 Prompt 编写,到复杂的 RAG 系统搭建,再到利用 Coze、Dify 实现快速开发,最后关注生产环境的工程实践,这条路径涵盖了 AI 大模型应用开发的核心技能栈。技术的迭代日新月异,但掌握这些核心概念和实操能力,能让你在快速变化的领域中保持竞争力。真正的掌握源于动手实践,建议你从第一个 Python 脚本和第一个 Prompt 开始,逐步构建起属于自己的 AI 应用。