2026/6/1 11:59:00
网站建设
项目流程
网站被qq拦截 做301,北京市建设集团有限公司,逐鹿网站建设,建设部网站怎么查岗位人员前言#xff1a;为何需要超越简单的提示词工程#xff1f;
在构建AI智能体的征途中#xff0c;精准的意图识别#xff08;Intent Detection#xff09;是决定成败的第一道关卡。它负责将用户自由形式的输入#xff08;Query#xff09;映射到系统预定义的具体任务上为何需要超越简单的提示词工程在构建AI智能体的征途中精准的意图识别Intent Detection是决定成败的第一道关卡。它负责将用户自由形式的输入Query映射到系统预定义的具体任务上例如“查询天气”、“预订机票”或“播放音乐”。随后的槽位抽取Slot Filling则从输入中提取执行任务所需的关键参数如“北京”、“明天”或“周杰伦”。最常见的初级方案提示词工程即将所有意图定义、少量示例Few-Shot和思维链CoT逻辑都塞进一个庞大的提示词Prompt中是一种简单快捷的“冷启动”方法。此方案的弊端显而易见提示词膨胀与性能瓶颈随着意图数量的增加提示词会变得异常冗长超出模型的上下文窗口限制并导致推理成本和延迟飙升。泛化能力受限模型的能力完全受限于提示词中有限的示例对于用户千变万化的口语化、模糊化甚至错误的表达方式识别准确率会急剧下降。维护噩梦每次增加新意图或修复一个错误的识别案例Bad Case都需要重写和调试复杂的提示词牵一发而动全身。为了构建真正智能、鲁棒且可维护的AI智能体我们引入更先进的范式——检索增强生成Retrieval-Augmented Generation, RAG。RAG通过从外部知识库中动态检索与当前用户问题最相关的信息来“增强”LLM的能力从而实现更精准、更具扩展性的意图识别。核心架构RAG如何赋能意图识别RAG的核心思想是“先检索再生成”。它将意图识别任务从一个封闭的“记忆力测试”依赖LLM内部知识和有限的提示词示例转变为一个开放的“开卷考试”允许LLM参考外部知识库。其核心工作流程如下接下来我们将分步详解如何从零开始构建这样一个系统并提供相应的实战代码。深度实践从零构建RAG意图识别系统第一步构建高质量的意图知识库知识库的质量直接决定了RAG系统的上限。这个知识库不仅是意图的简单罗列更是一个包含丰富、多样化表达方式的“意图语料库”。1. 定义意图与泛化语料首先明确智能体需要支持的所有意图。然后针对每个意图我们需要收集和生成大量的同义句Query覆盖各种可能的表达方式。人工构造根据业务经验手动编写种子语料。线上数据挖掘从真实用户日志中清洗和标注数据。LLM数据增强利用LLM的生成能力对种子语料进行扩充和泛化这是最高效的方式。代码实战使用LLM进行意图数据泛化下面的Python代码展示了如何调用LLM API为一个给定的意图如“查询公交线路”和一些种子Query生成更多样化的同义句。import os from openai import OpenAI import json # 建议使用环境变量来管理API密钥避免硬编码 # client OpenAI(api_keyos.environ.get(OPENAI_API_KEY)) # 为方便演示此处直接提供一个虚拟key client OpenAI(api_keyYOUR_API_KEY_HERE, base_urlYOUR_API_BASE_URL_HERE) # 替换为你的API Key和Base URL defgenerate_similar_queries(intent_name, intent_description, seed_queries, count10): 使用LLM为一个意图生成多样化的同义查询。 Args: intent_name (str): 意图名称。 intent_description (str): 意图的详细描述。 seed_queries (list): 种子查询列表作为示例。 count (int): 希望生成的查询数量。 Returns: list: 生成的同义查询列表。 # 构建一个强大的提示词引导LLM进行高质量的生成 prompt f 你是一个AI智能体的数据增强专家。你的任务是为一个特定的意图生成多样化的用户查询。 **意图名称:** {intent_name} **意图描述:** {intent_description} **请参考以下示例查询:** {, .join(seed_queries)} **要求:** 1. 生成 {count} 条与上述意图相关、但表达方式不同的用户查询。 2. 风格需要口语化、简洁并模拟真实用户的提问习惯。 3. 覆盖不同的句式例如陈述句、疑问句、甚至省略部分信息的短语。 4. 不要包含礼貌用语如“请”、“谢谢”。 5. 仅输出一个JSON格式的列表不要包含任何其他解释性文字。例如[查询1, 查询2, ...] print(--- Sending Prompt to LLM ---) print(prompt) print(-----------------------------) try: response client.chat.completions.create( modelgpt-4-turbo, # 可以替换为你选择的模型 messages[{role: user, content: prompt}], temperature0.8, # 提高一点温度以增加多样性 response_format{type: json_object}, ) # 假设模型会返回一个包含 queries 键的JSON对象 generated_text response.choices[0].message.content # 由于 response_formatjson_object可以直接解析 # 但为了稳健我们还是做一下检查 result_data json.loads(generated_text) # 假设返回的JSON结构是 {queries: [..., ...]} # 如果不是你可能需要根据实际返回调整这里的解析逻辑 ifqueriesin result_data and isinstance(result_data[queries], list): return result_data[queries] else: # 尝试直接解析列表 return json.loads(generated_text) except Exception as e: print(fAn error occurred: {e}) return [] # --- 示例 --- intent_name 查询公交线路 intent_description 用户想要查询某条公交线路的详细信息比如途经的站点。 seed_queries [ 911路公交车都经过哪些站, 查一下15路, 告诉我虹桥枢纽4路的路线 ] augmented_queries generate_similar_queries(intent_name, intent_description, seed_queries, 20) print(\n--- Generated Queries ---) print(json.dumps(augmented_queries, indent2, ensure_asciiFalse))通过这种方式我们可以为每个意图轻松生成数百甚至数千条高质量的语料为构建一个强大的RAG知识库打下坚实的基础。2. 知识库的构建与向量化生成语料后我们需要将其存储并转化为向量以便进行高效的相似度检索。数据整理将所有意图的语料整理成结构化数据每条数据至少包含query用户问题和intent对应意图两个字段。文本嵌入选择一个合适的文本嵌入模型Text Embedding Model将每一条query文本转换成一个高维向量。存入向量数据库将文本及其对应的向量存储到向量数据库中如FAISS, Milvus, Pinecone等。第二步实现端到端的RAG意图识别流程现在我们将把所有部分串联起来构建一个完整的意图识别流程。代码实战使用LangChain实现完整的RAG意图识别流程这个例子将使用LangChain框架来简化向量化和检索的过程。我们使用 FAISS 作为内存向量数据库OpenAIEmbeddings 作为嵌入模型。在生产环境中可以轻松替换为其他向量数据库如 Milvus, Pinecone和嵌入模型。import json import os from openai import OpenAI # LangChain 相关库 # 需要安装: pip install langchain langchain-openai faiss-cpu tiktoken from langchain_community.vectorstores import FAISS from langchain_openai import OpenAIEmbeddings from langchain.schema import Document # --- 0. 准备工作 --- # 假设这是我们通过第一步构建的知识库 knowledge_base [ {query: 明天天气怎么样, intent: 查询天气, slots: {city: 默认, time: 明天}}, {query: 查一下北京的天气, intent: 查询天气, slots: {city: 北京, time: 今天}}, {query: 后天上海会下雨吗, intent: 查询天气, slots: {city: 上海, time: 后天}}, {query: 给我放一首周杰伦的歌, intent: 播放音乐, slots: {artist: 周杰伦, song: 任意}}, {query: 我想听七里香, intent: 播放音乐, slots: {artist: 周杰伦, song: 七里香}}, {query: 来点音乐, intent: 播放音乐, slots: {artist: 任意, song: 任意}}, {query: 订一张明天去上海的机票, intent: 预订机票, slots: {departure_city: 当前城市, destination_city: 上海, date: 明天}}, {query: 从北京到广州的航班, intent: 预订机票, slots: {departure_city: 北京, destination_city: 广州, date: 今天}}, ] # --- 配置 API --- # LangChain 会自动从环境变量 OPENAI_API_KEY 和 OPENAI_BASE_URL 读取配置 # 建议使用环境变量而不是在代码中硬编码 # os.environ[OPENAI_API_KEY] YOUR_API_KEY_HERE # os.environ[OPENAI_BASE_URL] YOUR_API_BASE_URL_HERE # 为方便演示我们在这里实例化 client 和 embeddings # 替换为你的API Key和Base URL api_key YOUR_API_KEY_HERE base_url YOUR_API_BASE_URL_HERE client OpenAI(api_keyapi_key, base_urlbase_url) embeddings OpenAIEmbeddings(openai_api_keyapi_key, openai_api_base_urlbase_url) # --- 1. 使用 LangChain 构建向量知识库 --- print(Step 1: Building vector store with LangChain...) # 将原始知识库转换为 LangChain 的 Document 格式 # 我们将 query 作为 page_content将 intent 和 slots 作为 metadata documents [ Document( page_contentitem[query], metadata{intent: item[intent], slots: json.dumps(item[slots])} # Metadata值必须是字符串、整数、浮点数或布尔值 ) for item in knowledge_base ] # 从 documents 创建 FAISS 向量存储 # 这一个步骤会自动处理文本的 embedding 和索引的创建 try: vector_store FAISS.from_documents(documents, embeddings) print(Vector store built successfully with FAISS.) except Exception as e: print(fError building vector store: {e}) vector_store None defretrieve_examples_langchain(user_query, k3): 使用 LangChain 的向量存储检索最相似的K个示例。 print(fnStep 2: Retrieving examples for query: {user_query} with LangChain) ifnot vector_store: print(Vector store is not available.) return [] # FAISS.similarity_search会返回 Document 对象列表 retrieved_docs vector_store.similarity_search(user_query, kk) # 将 Document 对象转换回我们原来的字典格式以便下游函数使用 examples [ { query: doc.page_content, intent: doc.metadata[intent], slots: json.loads(doc.metadata[slots]) } for doc in retrieved_docs ] print(fRetrieved {len(examples)} examples.) return examples defbuild_prompt_with_rag(user_query, examples): 构建带有检索到的示例的动态提示词。 print(\nStep 3: Building dynamic prompt with retrieved examples...) examples_str \n.join([f// 示例\n用户输入: {ex[query]}\n输出: {json.dumps({intent: ex[intent], slots: ex[slots]}, ensure_asciiFalse)}for ex in examples]) prompt f 你是一个任务型对话机器人的NLU自然语言理解引擎。 你的任务是根据用户最新的提问识别出用户的意图intent并抽取出相应的槽位slots。 请严格参考下面提供的示例理解如何进行意图识别和槽位抽取。 {examples_str} --- 现在请处理以下用户的最新提问。 请严格按照JSON格式输出不要包含任何其他解释。 用户输入: {user_query} 输出: print(Prompt built.) return prompt defrecognize_intent_with_rag(user_query): 执行完整的RAG意图识别流程。 # 1. 检索 (使用 LangChain 版本) examples retrieve_examples_langchain(user_query) # 2. 构建提示词 prompt build_prompt_with_rag(user_query, examples) print(\n--- Final Prompt to LLM ---) print(prompt) print(---------------------------) # 3. 调用LLM print(\nStep 4: Calling LLM for final recognition...) try: response client.chat.completions.create( modelgpt-3.5-turbo, messages[{role: user, content: prompt}], temperature0, # 对于分类和提取任务使用低温 response_format{type: json_object}, ) result response.choices[0].message.content print(LLM call successful.) return json.loads(result) except Exception as e: print(fAn error occurred during LLM call: {e}) return {error: str(e)} # --- 最终测试 --- if vector_store: test_query_1 帮我找一首林俊杰的歌 result_1 recognize_intent_with_rag(test_query_1) print(f\n--- Result for {test_query_1} ---) print(json.dumps(result_1, indent2, ensure_asciiFalse)) test_query_2 后天广州天气如何 result_2 recognize_intent_with_rag(test_query_2) print(f\n--- Result for {test_query_2} ---) print(json.dumps(result_2, indent2, ensure_asciiFalse))第三步处理多轮对话的挑战在真实的对话场景中用户很少在一句话内提供所有信息。上下文理解能力至关重要。挑战用户“帮我订一张去北京的票”智能体“好的什么时候出发”用户“明天”在处理“明天”这个输入时如果只看当前Query系统无法知道这是在回答出发时间。解决方案将历史对话融入RAG检索如您提供的文章中“高阶方案D”所述最有效的方法是在RAG检索前将近期的对话历史和当前Query拼接成一个更完整的上下文。代码实战拼接对话历史defassemble_context(history, current_query): 将历史对话和当前查询拼接成一个用于检索的上下文字符串。 Args: history (list of dicts): [{role: user/assistant, content: ...}] current_query (str): 最新的用户输入。 Returns: str: 拼接后的上下文。 # 只保留最近几轮对话避免上下文过长 recent_history history[-4:] # 例如保留最近2轮对话userassistant history_str for turn in recent_history: role 用户if turn[role] userelse助手 content turn[content] history_str f{role}: {content}\n context_for_retrieval f对话历史:\n{history_str}最新提问: {current_query} return context_for_retrieval # --- 示例 --- history [ {role: user, content: 帮我订一张去北京的票}, {role: assistant, content: 好的什么时候出发} ] current_query 明天 context assemble_context(history, current_query) print(--- Context for RAG Retrieval ---) print(context) # 接下来将这个 context 字符串作为 recognize_intent_with_rag 函数的输入 # result recognize_intent_with_rag(context) # ...为了让这种方式更有效我们的知识库也需要升级包含一些多轮对话的Case让RAG可以检索到包含上下文的示例。总结与展望相较于传统的提示词工程基于RAG的意图识别方案提供了无与伦比的优势高准确性通过动态检索最相关的示例极大增强了LLM在特定领域的意图理解和槽位抽取能力尤其擅长处理“长尾”和模糊的用户表达。超强扩展性增加或修改意图只需在知识库中增删数据并重新向量化即可无需改动核心代码和复杂的提示词系统维护变得简单高效。可控性与可解释性当出现Bad Case时我们可以通过分析RAG的检索结果快速定位问题是出在检索阶段还是LLM的理解阶段并能通过向知识库添加针对性Case来快速修复。成本效益由于大部分“知识”外置于知识库我们可以选用更小、更轻量级的LLM模型来完成最终的推理从而显著降低API调用成本和系统延迟。从简单的提示词工程到引入RAG进行单轮识别再到融合对话历史实现多轮上下文理解这是一条构建高级AI智能体的必经之路。通过本文提供的深度解析和实战代码希望能为您在AI智能体的探索之路上点亮一盏明灯。普通人如何抓住AI大模型的风口领取方式在文末为什么要学习大模型目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 大模型作为其中的重要组成部分 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 为各行各业带来了革命性的改变和机遇 。目前开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景其中应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过30%。随着AI大模型技术的迅速发展相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业人工智能大潮已来不加入就可能被淘汰。如果你是技术人尤其是互联网从业者现在就开始学习AI大模型技术真的是给你的人生一个重要建议最后只要你真心想学习AI大模型技术这份精心整理的学习资料我愿意无偿分享给你但是想学技术去乱搞的人别来找我在当前这个人工智能高速发展的时代AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料能够帮助更多有志于AI领域的朋友入门并深入学习。真诚无偿分享vx扫描下方二维码即可加上后会一个个给大家发大模型全套学习资料展示自我们与MoPaaS魔泊云合作以来我们不断打磨课程体系与技术内容在细节上精益求精同时在技术层面也新增了许多前沿且实用的内容力求为大家带来更系统、更实战、更落地的大模型学习体验。希望这份系统、实用的大模型学习路径能够帮助你从零入门进阶到实战真正掌握AI时代的核心技能01教学内容从零到精通完整闭环【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块内容比传统教材更贴近企业实战大量真实项目案例带你亲自上手搞数据清洗、模型调优这些硬核操作把课本知识变成真本事02适学人群应届毕业生无工作经验但想要系统学习AI大模型技术期待通过实战项目掌握核心技术。零基础转型非技术背景但关注AI应用场景计划通过低代码工具实现“AI行业”跨界。业务赋能突破瓶颈传统开发者Java/前端等学习Transformer架构与LangChain框架向AI全栈工程师转型。vx扫描下方二维码即可本教程比较珍贵仅限大家自行学习不要传播更严禁商用03入门到进阶学习路线图大模型学习路线图整体分为5个大的阶段04视频和书籍PDF合集从0到掌握主流大模型技术视频教程涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向新手必备的大模型学习PDF书单来了全是硬核知识帮你少走弯路不吹牛真有用05行业报告白皮书合集收集70报告与白皮书了解行业最新动态0690份面试题/经验AI大模型岗位面试经验总结谁学技术不是为了赚$呢找个好的岗位很重要07 deepseek部署包技巧大全由于篇幅有限只展示部分资料并且还在持续更新中…真诚无偿分享vx扫描下方二维码即可加上后会一个个给大家发