【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 德才…...
接口自动化测试的概述及流程梳理~
接下来开始学习接口自动化测试。 因为之前从来没接触过,所以先了解一些基础知识。 1.接口测试的概述 2.接口自动化测试流程。 接口测试概述 接口,又叫API(Application Programming Interface,应用程序编程接口)&a…...
竞赛 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python
文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列&#x…...
虚拟货币(也称为加密货币或数字货币)的运作
虚拟币发展史 虚拟币的发展史可以追溯到20世纪末和21世纪初,以下是虚拟币的重要发展节点: 1998年:比特币白皮书的发布 比特币的概念最早由中本聪(Satoshi Nakamoto)在1998年提出,随后在2008年发布了一份名…...
N. Number Reduction
Problem - 1765N - Codeforces 发现如果是无前导0最小数那么在保证删除k个数时第1位是最小的,第二位一定是相对最小的,且答案第一位和第二位在原位置的间隔是小于等于还可以删除的位数的。 因此,对于原数字长度位n,要删除k&#…...
Java集合面试题
一、Java集合面试题 1.LinkedHashMap底层原理? HashMap是无序的,迭代HashMap所得到元素的顺序并不是它们最初放到HashMap的顺序,即不能保持它们的插入顺序。 LinkedHashMap继承于HashMap,是HashMap和LinkedList的融合体&#x…...
Python 编程基础 | 第三章-数据类型 | 3.5、列表
一、列表 1、创建列表 序列是Python中最基本的数据结构,Python有6个序列的内置类型,但最常见的是列表和元组。序列都可以进行的操作包括索引,切片,加,乘,检查成员。此外,Python已经内置确定序列…...
Spring Cloud Zuul 基本原理
Spring Cloud Zuul 底层是基于Servlet实现的,核心是通过一系列的ZuulFilter来完成请求的转发。 1、核心组件注册 1.1. EnableZuulProxy注解 启用Zuul作为微服务网关,需要在Application应用类加上EnableZuulProxy注解,而该注解核心是利用Im…...
QT实现TCP服务器客户端的实现
ser: widget.cpp: #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);// 此时…...
行为型设计模式——责任链模式
摘要 责任链模式(Chain of responsibility pattern): 通过责任链模式, 你可以为某个请求创建一个对象链. 每个对象依序检查此请求并对其进行处理或者将它传给链中的下一个对象。 一、责任链模式意图 职责链模式(Chain Of Responsibility) 是一种行为设…...
window安装压缩版postgresql
环境: window 11 专业版postgresql-16.0-1-windows-x64-binaries.zip 一、下载 1.1 从官网下载 https://www.postgresql.org/download/windows/ 1.2 从百度网盘下载 链接:https://pan.baidu.com/s/1fmQbgWSzX4hN07Lgdzfz0g?pwddzyy 提取码&#…...
怎么样可以做自己的网站/北京it培训机构哪家好
2019独角兽企业重金招聘Python工程师标准>>> http://bbs.fedora-zh.org/showthread.php?1097-VirtualBox%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97 转载于:https://my.oschina.net/u/174445/blog/33764...
怎样让百度收取我的网站/市场营销推广方案怎么做
传送门 题意:给你初始状态和目标状态,再给你m条路,士兵只能通过路走到相邻城市去,一个士兵只能移动一次。问你能否到达该状态,如果能输出转移的矩阵 题解:很显然的网络流,将一个点拆成三个&…...
张家口人社app最新下载/网站查询seo
了解下我们为什么要学习JVM优化 掌握jvm的运行参数以及参数的设置 掌握jvm的内存模型(堆内存) 掌握jamp命令的使用以及通过MAT工具进行分析 掌握定位分析内存溢出的方法 掌握jstack命令的使用 掌握VisualJVM工具的使用 1、我们为什么要对jvm做优化&#…...
青岛正一品网站建设/百度快照客服人工电话
【临时表存储】MySQL临时表分为“内存临时表”和“磁盘临时表”,其中内存临时表使用MySQL的MEMORY存储引擎,磁盘临时表使用MySQL的MyISAM存储引擎;一般情况下,MySQL会先创建内存临时表,但内存临时表超过配置指定的值后…...
php构建网站如何开始/百度app下载官方免费下载最新版
凯里市公安交通管理局关于在凯开大道增设机动车交通违法行为抓拍设备的通告为规范凯开大道与凯旋路交叉口行车秩序,提高路口通行能力,最大限度的预防和减少道路交通事故的发生。根据《中华人民共和国道路交通安全法》《中华人民共和国道路交通安全法实施…...
用vs做网站如何连接数据库/企业网络营销目标
oracle数据库系统的架构及其复杂,其提供的特性也非常的多。作为一种关系型数据库,oracle提供的基本特性:transactionconcurrencyread consistent而支撑这些特性的必不或缺的组件组成了OracleCore。如下面的缩略图所示:这个oracle系…...