【Java-LangChain:使用 ChatGPT API 搭建系统-6】处理输入-链式 Prompt Chaining Prompts
第六章,处理输入-链式 Prompt Chaining Prompts
在本章中,我们将学习如何通过将复杂任务拆分为一系列简单的子任务来链接多个 Prompt。
您可能会想,为什么要将任务拆分为多个 Prompt,而不是像我们在上一个视频中学习的那样,使用思维链推理一次性完成呢?我们已经证明了语言模型非常擅长遵循复杂的指令,特别是像 GPT-4 这样的高级模型。
那么让我们用两个比喻来解释为什么我们要这样做,来比较思维链推理和链式 Prompt。
将任务拆分为多个 Prompt 的第一个比喻是一次性烹饪复杂菜肴与分阶段烹饪的区别。使用一个长而复杂的 Prompt 可能就像一次性烹饪复杂的菜肴,您必须同时管理多个成分、烹饪技巧和时间。这可能很具有挑战性,难以跟踪每个部分并确保每个组成部分都烹饪得恰到好处。
另一方面,链式 Prompt 就像分阶段烹饪餐点,您专注于一个组成部分,确保每个部分都正确烹饪后再进行下一个。这种方法可以分解任务的复杂性,使其更易于管理,并减少错误的可能性。但是,对于非常简单的食谱,这种方法可能是不必要和过于复杂的。
一个稍微更好的比喻是,一次性完成所有任务与分阶段完成任务的区别。就像阅读一长串代码和使用简单的模块化程序之间的差异一样,复杂的依赖关系会导致代码变得混乱且难以调试。这个比喻同样适用于将复杂的单步任务提交给语言模型。当您有一个可以在任何给定点维护系统状态并根据当前状态采取不同操作的工作流程时,链式 Prompt 就成为一种强大的策略。
环境配置
参考第二章的 环境配置小节内容即可。
二,实现一个包含多个提示的复杂任务
提取相关产品和类别名称
在您对客户的查询进行分类后,您将获得查询的类别——是账户问题还是产品问题。然后您可以根据不同的类别采取不同的行动。
每个子任务仅包含执行对应任务所需的指令,这使得系统更易于管理,确保模型具备执行任务所需的所有信息,并降低了出错的可能性。这种此方法还可以降低成本,因为更长的 Prompt 和更多的 tokens 会导致更高的运行成本,并且在某些情况下可能不需要概述所有步骤。
这种方法的另一个好处是,它更容易测试哪些步骤可能更容易失败,或者在特定步骤中需要人工干预。
随着您与这些模型的构建和交互不断深入,您将逐渐培养出何时运用此策略的直觉。另外,还有一个额外的好处是,它允许模型在必要时使用外部工具。例如,它可能决定在产品目录中查找某些内容,调用 API 或搜索知识库,这是使用单个 Prompt 无法实现的。
private String delimiter = "###";private String system = "你将提供服务查询。\n" +"服务查询将使用" + delimiter + "字符分隔。\n" +"\n" +"仅输出一个 Python 对象列表,其中每个对象具有以下格式:\n" +" 'category': <计算机和笔记本电脑、智能手机和配件、电视和家庭影院系统、游戏机和配件、音频设备、相机和摄像机中的一个>,\n" +"或者\n" +" 'products': <必须在下面的允许产品列表中找到的产品列表>\n" +"\n" +"类别和产品必须在客户服务查询中找到。\n" +"如果提及了产品,则必须将其与允许产品列表中的正确类别相关联。\n" +"如果未找到产品或类别,则输出空列表。\n" +"\n" +"允许的产品:\n" +"\n" +"计算机和笔记本电脑类别:\n" +"TechPro Ultrabook\n" +"BlueWave Gaming Laptop\n" +"PowerLite Convertible\n" +"TechPro Desktop\n" +"BlueWave Chromebook\n" +"\n" +"智能手机和配件类别:\n" +"SmartX ProPhone\n" +"MobiTech PowerCase\n" +"SmartX MiniPhone\n" +"MobiTech Wireless Charger\n" +"SmartX EarBuds\n" +"\n" +"电视和家庭影院系统类别:\n" +"CineView 4K TV\n" +"SoundMax Home Theater\n" +"CineView 8K TV\n" +"SoundMax Soundbar\n" +"CineView OLED TV\n" +"c\n" +"游戏机和配件类别:\n" +"GameSphere X\n" +"ProGamer Controller\n" +"GameSphere Y\n" +"ProGamer Racing Wheel\n" +"GameSphere VR Headset\n" +"\n" +"音频设备类别:\n" +"AudioPhonic Noise-Canceling Headphones\n" +"WaveSound Bluetooth Speaker\n" +"AudioPhonic True Wireless Earbuds\n" +"WaveSound Soundbar\n" +"AudioPhonic Turntable\n" +"\n" +"相机和摄像机类别:\n" +"FotoSnap DSLR Camera\n" +"ActionCam 4K\n" +"FotoSnap Mirrorless Camera\n" +"ZoomMaster Camcorder\n" +"FotoSnap Instant Camera\n" +"\n" +"仅输出 Python 对象列表,不包含其他字符信息。";
示例1:
String user = "请查询 SmartX ProPhone 智能手机和 FotoSnap 相机,包括单反相机。\n" +" 另外,请查询关于电视产品的信息。";List<ChatMessage> messages = new ArrayList<>();ChatMessage systemMessage = new ChatMessage();systemMessage.setRole("system");systemMessage.setContent(system);messages.add(systemMessage);ChatMessage userMessage = new ChatMessage();userMessage.setRole("user");userMessage.setContent(user);messages.add(userMessage);String message = this.getCompletionFromMessage(messages, 0);log.info("test1:\n{}", message);
输出:
[{'category': '智能手机和配件'},{'category': '相机和摄像机'},{'category': '电视和家庭影院系统'}
]
正如您所见,对于我们的输出是一个对象列表,每个对象都有一个类别和一些产品。如"SmartX ProPhone"和"Fotosnap DSLR Camera"在最后一个对象中,我们只有一个类别,因为没有提到任何具体的电视。
这种结构化的响应输出的好处是可以轻松地将其读入 Python 的列表中。
让我们尝试另一个例子。
String user = delimiter + "我的路由器坏了" + delimiter;List<ChatMessage> messages = new ArrayList<>();ChatMessage systemMessage = new ChatMessage();systemMessage.setRole("system");systemMessage.setContent(system);messages.add(systemMessage);ChatMessage userMessage = new ChatMessage();userMessage.setRole("user");userMessage.setContent(user);messages.add(userMessage);String message = this.getCompletionFromMessage(messages, 0);log.info("test2:\n{}", message);
[]
如果您留意列表,会发现我们实际上并没有包含任何路由器的信息。 现在,我们需要对其进行正确的格式化以完成输出。
正如您所见,在这种情况下,输出是一个空列表。
检索提取的产品和类别的详细信息
我们提供大量的产品信息作为示例,要求模型提取产品和对应的详细信息
{"TechPro Ultrabook": {"name": "TechPro 超极本","category": "电脑和笔记本","brand": "TechPro","model_number": "TP-UB100","warranty": "1 year","rating": 4.5,"features": ["13.3-inch display", "8GB RAM", "256GB SSD", "Intel Core i5 处理器"],"description": "一款时尚轻便的超极本,适合日常使用。","price": 799.99},"BlueWave Gaming Laptop": {"name": "BlueWave 游戏本","category": "电脑和笔记本","brand": "BlueWave","model_number": "BW-GL200","warranty": "2 years","rating": 4.7,"features": ["15.6-inch display", "16GB RAM", "512GB SSD", "NVIDIA GeForce RTX 3060"],"description": "一款高性能的游戏笔记本电脑,提供沉浸式体验。","price": 1199.99},"PowerLite Convertible": {"name": "PowerLite Convertible","category": "电脑和笔记本","brand": "PowerLite","model_number": "PL-CV300","warranty": "1 year","rating": 4.3,"features": ["14-inch touchscreen", "8GB RAM", "256GB SSD", "360-degree hinge"],"description": "一款多功能的可转换笔记本电脑,具有灵敏的触摸屏。","price": 699.99},"TechPro Desktop": {"name": "TechPro Desktop","category": "电脑和笔记本","brand": "TechPro","model_number": "TP-DT500","warranty": "1 year","rating": 4.4,"features": ["Intel Core i7 processor", "16GB RAM", "1TB HDD", "NVIDIA GeForce GTX 1660"],"description": "一款功能强大的台式电脑,适用于工作和娱乐。","price": 999.99},"BlueWave Chromebook": {"name": "BlueWave Chromebook","category": "电脑和笔记本","brand": "BlueWave","model_number": "BW-CB100","warranty": "1 year","rating": 4.1,"features": ["11.6-inch display", "4GB RAM", "32GB eMMC", "Chrome OS"],"description": "一款紧凑而价格实惠的Chromebook,适用于日常任务。","price": 249.99},"SmartX ProPhone": {"name": "SmartX ProPhone","category": "智能手机和配件","brand": "SmartX","model_number": "SX-PP10","warranty": "1 year","rating": 4.6,"features": ["6.1-inch display", "128GB storage", "12MP dual camera", "5G"],"description": "一款拥有先进摄像功能的强大智能手机。","price": 899.99},"MobiTech PowerCase": {"name": "MobiTech PowerCase","category": "专业手机","brand": "MobiTech","model_number": "MT-PC20","warranty": "1 year","rating": 4.3,"features": ["5000mAh battery", "Wireless charging", "Compatible with SmartX ProPhone"],"description": "一款带有内置电池的保护手机壳,可延长使用时间。","price": 59.99},"SmartX MiniPhone": {"name": "SmartX MiniPhone","category": "专业手机","brand": "SmartX","model_number": "SX-MP5","warranty": "1 year","rating": 4.2,"features": ["4.7-inch display", "64GB storage", "8MP camera", "4G"],"description": "一款紧凑而价格实惠的智能手机,适用于基本任务。","price": 399.99},"MobiTech Wireless Charger": {"name": "MobiTech Wireless Charger","category": "专业手机","brand": "MobiTech","model_number": "MT-WC10","warranty": "1 year","rating": 4.5,"features": ["10W fast charging", "Qi-compatible", "LED indicator", "Compact design"],"description": "一款方便的无线充电器,使工作区域整洁无杂物。","price": 29.99},"SmartX EarBuds": {"name": "SmartX EarBuds","category": "专业手机","brand": "SmartX","model_number": "SX-EB20","warranty": "1 year","rating": 4.4,"features": ["True wireless", "Bluetooth 5.0", "Touch controls", "24-hour battery life"],"description": "通过这些舒适的耳塞体验真正的无线自由。","price": 99.99},"CineView 4K TV": {"name": "CineView 4K TV","category": "电视和家庭影院系统","brand": "CineView","model_number": "CV-4K55","warranty": "2 years","rating": 4.8,"features": ["55-inch display", "4K resolution", "HDR", "Smart TV"],"description": "一款色彩鲜艳、智能功能丰富的惊艳4K电视。","price": 599.99},"SoundMax Home Theater": {"name": "SoundMax Home Theater","category": "电视和家庭影院系统","brand": "SoundMax","model_number": "SM-HT100","warranty": "1 year","rating": 4.4,"features": ["5.1 channel", "1000W output", "Wireless subwoofer", "Bluetooth"],"description": "一款强大的家庭影院系统,提供沉浸式音频体验。","price": 399.99},"CineView 8K TV": {"name": "CineView 8K TV","category": "电视和家庭影院系统","brand": "CineView","model_number": "CV-8K65","warranty": "2 years","rating": 4.9,"features": ["65-inch display", "8K resolution", "HDR", "Smart TV"],"description": "通过这款惊艳的8K电视,体验未来。","price": 2999.99},"SoundMax Soundbar": {"name": "SoundMax Soundbar","category": "电视和家庭影院系统","brand": "SoundMax","model_number": "SM-SB50","warranty": "1 year","rating": 4.3,"features": ["2.1 channel", "300W output", "Wireless subwoofer", "Bluetooth"],"description": "使用这款时尚而功能强大的声音,升级您电视的音频体验。","price": 199.99},"CineView OLED TV": {"name": "CineView OLED TV","category": "电视和家庭影院系统","brand": "CineView","model_number": "CV-OLED55","warranty": "2 years","rating": 4.7,"features": ["55-inch display", "4K resolution", "HDR", "Smart TV"],"description": "通过这款OLED电视,体验真正的五彩斑斓。","price": 1499.99},"GameSphere X": {"name": "GameSphere X","category": "游戏机和配件","brand": "GameSphere","model_number": "GS-X","warranty": "1 year","rating": 4.9,"features": ["4K gaming", "1TB storage", "Backward compatibility", "Online multiplayer"],"description": "一款下一代游戏机,提供终极游戏体验。","price": 499.99},"ProGamer Controller": {"name": "ProGamer Controller","category": "游戏机和配件","brand": "ProGamer","model_number": "PG-C100","warranty": "1 year","rating": 4.2,"features": ["Ergonomic design", "Customizable buttons", "Wireless", "Rechargeable battery"],"description": "一款高品质的游戏手柄,提供精准和舒适的操作。","price": 59.99},"GameSphere Y": {"name": "GameSphere Y","category": "游戏机和配件","brand": "GameSphere","model_number": "GS-Y","warranty": "1 year","rating": 4.8,"features": ["4K gaming", "500GB storage", "Backward compatibility", "Online multiplayer"],"description": "一款体积紧凑、性能强劲的游戏机。","price": 399.99},"ProGamer Racing Wheel": {"name": "ProGamer Racing Wheel","category": "游戏机和配件","brand": "ProGamer","model_number": "PG-RW200","warranty": "1 year","rating": 4.5,"features": ["Force feedback", "Adjustable pedals", "Paddle shifters", "Compatible with GameSphere X"],"description": "使用这款逼真的赛车方向盘,提升您的赛车游戏体验。","price": 249.99},"GameSphere VR Headset": {"name": "GameSphere VR Headset","category": "游戏机和配件","brand": "GameSphere","model_number": "GS-VR","warranty": "1 year","rating": 4.6,"features": ["Immersive VR experience", "Built-in headphones", "Adjustable headband", "Compatible with GameSphere X"],"description": "通过这款舒适的VR头戴设备,进入虚拟现实的世界。","price": 299.99},"AudioPhonic Noise-Canceling Headphones": {"name": "AudioPhonic Noise-Canceling Headphones","category": "音频设备","brand": "AudioPhonic","model_number": "AP-NC100","warranty": "1 year","rating": 4.6,"features": ["Active noise-canceling", "Bluetooth", "20-hour battery life", "Comfortable fit"],"description": "通过这款降噪耳机,体验沉浸式的音效。","price": 199.99},"WaveSound Bluetooth Speaker": {"name": "WaveSound Bluetooth Speaker","category": "音频设备","brand": "WaveSound","model_number": "WS-BS50","warranty": "1 year","rating": 4.5,"features": ["Portable", "10-hour battery life", "Water-resistant", "Built-in microphone"],"description": "一款紧凑而多用途的蓝牙音箱,适用于随时随地收听音乐。","price": 49.99},"AudioPhonic True Wireless Earbuds": {"name": "AudioPhonic True Wireless Earbuds","category": "音频设备","brand": "AudioPhonic","model_number": "AP-TW20","warranty": "1 year","rating": 4.4,"features": ["True wireless", "Bluetooth 5.0", "Touch controls", "18-hour battery life"],"description": "通过这款舒适的真无线耳塞,无需线缆即可享受音乐。","price": 79.99},"WaveSound Soundbar": {"name": "WaveSound Soundbar","category": "音频设备","brand": "WaveSound","model_number": "WS-SB40","warranty": "1 year","rating": 4.3,"features": ["2.0 channel", "80W output", "Bluetooth", "Wall-mountable"],"description": "使用这款纤薄而功能强大的声音吧,升级您电视的音频体验。","price": 99.99},"AudioPhonic Turntable": {"name": "AudioPhonic Turntable","category": "音频设备","brand": "AudioPhonic","model_number": "AP-TT10","warranty": "1 year","rating": 4.2,"features": ["3-speed", "Built-in speakers", "Bluetooth", "USB recording"],"description": "通过这款现代化的唱片机,重拾您的黑胶唱片收藏。","price": 149.99},"FotoSnap DSLR Camera": {"name": "FotoSnap DSLR Camera","category": "相机和摄像机","brand": "FotoSnap","model_number": "FS-DSLR200","warranty": "1 year","rating": 4.7,"features": ["24.2MP sensor", "1080p video", "3-inch LCD", "Interchangeable lenses"],"description": "使用这款多功能的单反相机,捕捉惊艳的照片和视频。","price": 599.99},"ActionCam 4K": {"name": "ActionCam 4K","category": "相机和摄像机","brand": "ActionCam","model_number": "AC-4K","warranty": "1 year","rating": 4.4,"features": ["4K video", "Waterproof", "Image stabilization", "Wi-Fi"],"description": "使用这款坚固而紧凑的4K运动相机,记录您的冒险旅程。","price": 299.99},"FotoSnap Mirrorless Camera": {"name": "FotoSnap Mirrorless Camera","category": "相机和摄像机","brand": "FotoSnap","model_number": "FS-ML100","warranty": "1 year","rating": 4.6,"features": ["20.1MP sensor", "4K video", "3-inch touchscreen", "Interchangeable lenses"],"description": "一款具有先进功能的小巧轻便的无反相机。","price": 799.99},"ZoomMaster Camcorder": {"name": "ZoomMaster Camcorder","category": "相机和摄像机","brand": "ZoomMaster","model_number": "ZM-CM50","warranty": "1 year","rating": 4.3,"features": ["1080p video", "30x optical zoom", "3-inch LCD", "Image stabilization"],"description": "使用这款易于使用的摄像机,捕捉生活的瞬间。","price": 249.99},"FotoSnap Instant Camera": {"name": "FotoSnap Instant Camera","category": "相机和摄像机","brand": "FotoSnap","model_number": "FS-IC10","warranty": "1 year","rating": 4.1,"features": ["Instant prints", "Built-in flash", "Selfie mirror", "Battery-powered"],"description": "使用这款有趣且便携的即时相机,创造瞬间回忆。","price": 69.99}
}
//通过产品名称查询商品public JSONObject getProductByName(String name) {JSONObject jsonObject = JSONUtil.parseObj(allProducts);return jsonObject.getJSONObject(name);}//通过商品分类查询商品列表public List<JSONObject> getProductsByCategory(String category) {List<JSONObject> products = new ArrayList<>();JSONObject jsonObject = JSONUtil.parseObj(allProducts);for (Iterator<Map.Entry<String, Object>> it = jsonObject.iterator(); it.hasNext(); ) {Map.Entry entry = it.next();JSONObject object = (JSONObject) entry.getValue();String cat = object.getStr("category");if (category.equals(cat)) {products.add(object);}}return products;}
JSONObject jsonObject = getProductByName("TechPro Ultrabook");log.info("test3-product:\n{}", jsonObject);
test3-product:
{"name":"TechPro 超极本","category":"电脑和笔记本","brand":"TechPro","model_number":"TP-UB100","warranty":"1 year","rating":4.5,"features":["13.3-inch display","8GB RAM","256GB SSD","Intel Core i5 处理器"],"description":"一款时尚轻便的超极本,适合日常使用。","price":799.99}
List<JSONObject> products = getProductsByCategory("Computers and Laptops");log.info("test3-products:\n{}", products);
test3-products:
[{"name":"TechPro 超极本","category":"电脑和笔记本","brand":"TechPro","model_number":"TP-UB100","warranty":"1 year","rating":4.5,"features":["13.3-inch display","8GB RAM","256GB SSD","Intel Core i5 处理器"],"description":"一款时尚轻便的超极本,适合日常使用。","price":799.99}, {"name":"BlueWave 游戏本","category":"电脑和笔记本","brand":"BlueWave","model_number":"BW-GL200","warranty":"2 years","rating":4.7,"features":["15.6-inch display","16GB RAM","512GB SSD","NVIDIA GeForce RTX 3060"],"description":"一款高性能的游戏笔记本电脑,提供沉浸式体验。","price":1199.99}, {"name":"PowerLite Convertible","category":"电脑和笔记本","brand":"PowerLite","model_number":"PL-CV300","warranty":"1 year","rating":4.3,"features":["14-inch touchscreen","8GB RAM","256GB SSD","360-degree hinge"],"description":"一款多功能的可转换笔记本电脑,具有灵敏的触摸屏。","price":699.99}, {"name":"TechPro Desktop","category":"电脑和笔记本","brand":"TechPro","model_number":"TP-DT500","warranty":"1 year","rating":4.4,"features":["Intel Core i7 processor","16GB RAM","1TB HDD","NVIDIA GeForce GTX 1660"],"description":"一款功能强大的台式电脑,适用于工作和娱乐。","price":999.99}, {"name":"BlueWave Chromebook","category":"电脑和笔记本","brand":"BlueWave","model_number":"BW-CB100","warranty":"1 year","rating":4.1,"features":["11.6-inch display","4GB RAM","32GB eMMC","Chrome OS"],"description":"一款紧凑而价格实惠的Chromebook,适用于日常任务。","price":249.99}]
根据详细的产品信息生成用户查询的答案
String system = "您是一家大型电子商店的客服助理。\n" +"请以友好和乐于助人的口吻回答问题,并尽量简洁明了。\n" +"请确保向用户提出相关的后续问题。";String user = "请介绍一下 TechPro 超极本。\n" +"另外,介绍关于电脑产品的信息。";List<ChatMessage> messages = new ArrayList<>();ChatMessage systemMessage = new ChatMessage();systemMessage.setRole("system");systemMessage.setContent(system);messages.add(systemMessage);ChatMessage userMessage = new ChatMessage();userMessage.setRole("user");userMessage.setContent(user);messages.add(userMessage);List<JSONObject> products = getProductsByCategory("电脑和笔记本");ChatMessage assistant = new ChatMessage();assistant.setRole("assistant");assistant.setContent("相关产品信息:\n" + JSONUtil.toJsonStr(products));messages.add(assistant);String message = this.getCompletionFromMessage(messages, 0);log.info("test4: {}", message);
输出:
TechPro 超极本是一款时尚轻便的超极本电脑,适合日常使用。它具有13.3英寸的显示屏,8GB的内存,256GB的固态硬盘和Intel Core i5处理器。它的价格是799.99美元,享有1年的保修期。关于台式电脑产品,我们有TechPro Desktop和BlueWave游戏本等多种选择。TechPro Desktop是一款功能强大的台式电脑,配备Intel Core i7处理器,16GB内存,1TB硬盘和NVIDIA GeForce GTX 1660显卡。它的价格是999.99美元,享有1年的保修期。BlueWave游戏本是一款高性能的游戏笔记本电脑,具有15.6英寸的显示屏,16GB内存,512GB固态硬盘和NVIDIA GeForce RTX 3060显卡。它的价格是1199.99美元,享有2年的保修期。您对这些产品有什么进一步的问题吗?
我们讨论了如何通过一系列步骤加载与用户查询相关的信息,为模型提供所需的上下文,以有效回答问题。 您可能会想,为什么我们选择性地将产品描述加载到提示中,而不是包含所有产品描述,让模型使用它所需的信息呢?
这其中有几个原因。
首先,包含过多的产品描述可能会使模型在处理上下文时感到困惑,就像对于试图一次处理大量信息的人一样。当然,对于像 GPT-4 这样更高级的模型来说,这个原因就不太重要了。尤其是当上下文像这个例子一样具有良好的结构时,模型足够聪明,能够巧妙地忽略那些明显不相关的信息。
接下来的原因更加具有说服力。
第一个原因,包含所有产品描述可能会使模型对上下文更加混乱,就像对于试图一次处理大量信息的人一样。当然,对于像 GPT-4 这样更高级的模型来说,这个问题不太相关,特别是当上下文像这个例子一样结构良好时,模型足够聪明,只会忽略明显不相关的信息。接下来的原因更有说服力。
第二个原因是,语言模型有上下文限制,即固定数量的 token 允许作为输入和输出。如果您有一个巨大的产品目录,您甚至无法将所有描述都放入上下文窗口中。
最后一个原因是,包含所有产品描述可能会使模型过拟合,因为它会记住所有的产品描述,而不是只记住与查询相关的信息。这可能会导致模型在处理新的查询时表现不佳。
使用语言模型时,由于按 token 付费,可能会很昂贵。因此,通过有选择地加载信息,可以减少生成响应的成本。一般来说,确定何时动态加载信息到模型的上下文中,并允许模型决定何时需要更多信息,是增强这些模型能力的最佳方法之一。
并且要再次强调,您应该将语言模型视为需要必要上下文才能得出有用结论和执行有用任务的推理代理。因此,在这种情况下,我们必须向模型提供产品信息,然后它才能根据该产品信息进行推理,为用户创建有用的答案。
在这个例子中,我们只添加了一个特定函数或函数的调用,以通过产品名称获取产品描述或通过类别名称获取类别产品。但是,模型实际上擅长决定何时使用各种不同的工具,并可以正确地使用它们。
这就是 ChatGPT 插件背后的思想。我们告诉模型它可以访问哪些工具以及它们的作用,它会在需要从特定来源获取信息或想要采取其他适当的操作时选择使用它们。在这个例子中,我们只能通过精确的产品和类别名称匹配查找信息,但还有更高级的信息检索技术。检索信息的最有效方法之一是使用自然语言处理技术,例如命名实体识别和关系提取。
另一方法是使用文本嵌入(Embedding)来获取信息。嵌入可以用于实现对大型语料库的高效知识检索,以查找与给定查询相关的信息。使用文本嵌入的一个关键优势是它们可以实现模糊或语义搜索,这使您能够在不使用精确关键字的情况下找到相关信息。因此,在此例子中,我们不一定需要产品的确切名称,而可以使用更一般的查询如 “手机” 进行搜索。
Java快速转换到大模型开发:
配套课程的所有代码已经发布在:https://github.com/Starcloud-Cloud/java-langchain
课程合作请留言
相关文章:
【Java-LangChain:使用 ChatGPT API 搭建系统-6】处理输入-链式 Prompt Chaining Prompts
第六章,处理输入-链式 Prompt Chaining Prompts 在本章中,我们将学习如何通过将复杂任务拆分为一系列简单的子任务来链接多个 Prompt。 您可能会想,为什么要将任务拆分为多个 Prompt,而不是像我们在上一个视频中学习的那样&…...

从零手搓一个【消息队列】创建核心类, 数据库设计与实现
文章目录 一、创建核心类1, 交换机2, 交换机类型3, 队列4, 绑定5, 交换机转发 & 绑定规则6, 消息7, 消息属性 二、数据库设计1, 使用 SQLite2, 使用 MyBatis2.1, 创建 Interface2.2, 创建 xml 文件 三、硬盘管理 -- 数据库1, 创建 DataBaseManager 类2, init() 初始化数据库…...

14:00面试,14:06就出来了,这问的过于变态了。。。
前言 刚从小厂出来,没想到在另一家公司我又寄了。 在这家公司上班,每天都要加班,但看在钱给的比较多的份上,也就不太计较了。但万万没想到5月一纸通知,所有人不准加班了,不仅加班费没有了,薪资…...
url请求头信息
Accept Accept:请求报头域,用于指定客户端可接受哪些类型的信息。 Accept-Language Accept-Language:指定客户端可接受的语言类型。 Accept-Encoding Accept-Encoding:指定客户端可接受的内容编码。 Host Host:…...
【Oracle】Oracle系列之十六--数据库备份
文章目录 往期回顾1. 数据库备份的分类1.1 逻辑备份与物理备份(1)逻辑备份(2)物理备份(3)归档模式与非归档模式 1.2 完全备份/差异备份/增量备份 2. Oracle 逻辑备份2.1 EXP/IMP(1)E…...

uni-app:实现页面效果3
效果 代码 <template><view><!-- 风速风向检测器--><view class"content_position"><view class"content"><view class"SN"><view class"SN_title">设备1</view><view class&quo…...

计算机网络基础(一):网络系统概述、OSI七层模型、TCP/IP协议及数据传输
通信,在古代是通过书信与他人互通信息的意思。 今天,“通信”这个词的外沿已经得到了极大扩展,它目前的大意是指双方或多方借助某种媒介实现信息互通的行为。 如果按照当代汉语的方式理解“通信”,那么古代的互遣使节、飞鸽传书…...
互联网金融理财知识点简单总结
互联网金融理财知识点总结 互联网金融理财是指通过互联网平台进行资产管理和投资的一种金融方式。它结合了金融、科技和互联网,为投资者提供了更多选择和便捷性。本文将介绍互联网金融理财的关键知识点,包括理财基础、投资产品、风险管理和未来趋势等方…...

微信小程序template界面模板导入
我们有些时候 会有一些比较大但并不复杂的界面结构 这个时候 你可以试试这种导入模板的形式 我们在根目录创建一个 template 目录 然后下面创建一个 text文件夹下面创建一个 test.wxml 参考代码如下 <template name"textIndex"><text class "testw&…...

C/C++跨平台构建工具CMake-----在C++源码中读取CMakeLists.txt配置文件中的内容
文章目录 1.需求描述2.需求准备2.1 创建项目2.2 编辑CMakeLists.txt文件2.3 编写C文件2.4 编译构建项目 3.需求实现3.1 在CMakeLists.txt中输出日志信息3.2 增加配置生成C头文件3.3在C 源码中访问配置的值3.4 C文件中读取CMakeLists.txt中的字符串 总结 1.需求描述 当我们开发…...
【MVP争夺战】python实现-附ChatGPT解析
1.题目 MVP争夺战 知识点 :DFS搜索 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 在星球争霸篮球赛对抗赛中,强大的宇宙战队,希望每个人都能拿到MVP。 MVP的条件是,单场最高分得分获得者,可以并列,所以宇宙战队决定在比赛中尽可能让更多的队员上场,且让所有有得…...

6 个最佳免费 Android 数据恢复软件
如果您是 Android 用户,您可能会发现没有回收站。然而,聪明的开发人员已经创建了各种 Android 数据恢复软件程序,可以解决各种与数据丢失相关的问题。 Android 数据恢复软件如何工作? 问题是当你删除一个文件时,它的数…...

数学建模Matlab之数据预处理方法
本文综合代码来自文章http://t.csdnimg.cn/P5zOD 异常值与缺失值处理 %% 数据修复 % 判断缺失值和异常值并修复,顺便光滑噪音,渡边笔记 clc,clear;close all; x 0:0.06:10; y sin(x)0.2*rand(size(x)); y(22:34) NaN; % 模拟缺失值 y(89:95) 50;% 模…...
如何保证Redis的HA高可用
目录 1.关于Redis2.Redis 的使用场景3.Redis的高可用3.1 哨兵模式(Sentinel)3.2 集群模式(Cluster) 4.参考 本文主要介绍Redis如何保证高可用。 1.关于Redis Redis(Remote Dictionary Server)是一个开源的…...
第一百六十三回 如何在任意位置显示PopupMenu
文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了PopupMenuButton相关的内容,本章回中将介绍如何在任意位置显示PopupMenu.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在上一章回中介绍了PopupMenuButton相关的内容,它主…...

采用python中的opencv2的库来运用机器视觉移动物体
一. 此次我们来利用opencv2来进行机器视觉的学习 1. 首先我们先来进行一个小的案例的实现. 这次我们是将会进行一个小的矩形手势的移动. import cv2 from cvzone.HandTrackingModule import HandDetectorcap cv2.VideoCapture(0) # cap.set(3, 1280) # cap.set(4, 720) col…...
一、thymeleaf简介
1.1 什么是thymeleaf Thymeleaf是一个适用于web和独立环境的现代服务器端Java模板引擎,能够处理HTML、XML、JavaScript、CSS甚至纯文本。主要目标是提供一种优雅且高度可维护的创建模板的方法。 何为模板引擎呢?模板引擎就是为了使用户页面和业务数据…...
二分查找模版
对于一个递增序列我们要找大于等于target的数,返回结果的下标时 比如 序列 5 7 7 8 8 10 初始化左右指针l0 rn-1 猜测区间 [l,r] 闭区间,mid(lr)/2 防溢出就写成 midl(r-l)/2 如果有nums[mid]<target 那么[l,mid]这个区间的数就都小于target 更新 lmi…...

idea清空缓存类
解决办法 网上有很多是让你去清空什么maven依赖,但假如这个项目是你不可以大刀阔斧的话 可以清空idea缓存 选择 Invalidate 开头的 然后全选 运行重启idea OK...
PAT(Basic Level) Practice(中文) 1015德才论
前言 ※ PTA是 程序设计类实验辅助教学平台 ,里边包含一些编程题目集以供练习。 这道题用java解,我试了三种解法,不断优化,但始终是三个测试点通过、三个测试点超时。我把我的代码放在这里,做个参考吧。 1015 德才…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

PLC入门【4】基本指令2(SET RST)
04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C),从 文件 - 主画面,“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...

篇章一 论坛系统——前置知识
目录 1.软件开发 1.1 软件的生命周期 1.2 面向对象 1.3 CS、BS架构 1.CS架构编辑 2.BS架构 1.4 软件需求 1.需求分类 2.需求获取 1.5 需求分析 1. 工作内容 1.6 面向对象分析 1.OOA的任务 2.统一建模语言UML 3. 用例模型 3.1 用例图的元素 3.2 建立用例模型 …...

mq安装新版-3.13.7的安装
一、下载包,上传到服务器 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-generic-unix-3.13.7.tar.xz 二、 erlang直接安装 rpm -ivh erlang-26.2.4-1.el8.x86_64.rpm不需要配置环境变量,直接就安装了。 erl…...