当前位置: 首页 > article >正文

第8章(2)——项目二:Claude与显示思考——引用资料

第8章2——项目二Claude与显示思考——引用资料8.8 metadata显示思考的工具和资料8.8.1 metadata显示思考——使用工具8.8.2 项目二Claude与显示思考——引用资料8.8 metadata显示思考的工具和资料gr.Chatbot组件支持参数metadata因此可以原生支持显示中间思考过程呈现使用工具和资料引用情况这非常适合为LLM Agent和CoTChain-of-Thought, 思维链演示创建UI。本节先通过一个简单示例展示如何呈现使用工具然后通过一个项目展示如何使用gr.Chatbot构建显示思考中的资料引用。8.8.1 metadata显示思考——使用工具仔细的读者会发现gr.ChatMessage类似于openai风格的消息格式它有一个指向聊天消息内容的“content”键但也包括一个“metadata”键其值是字典gr.MetadataDict。如果字典包含“title”键标题显示在思考过程之上且生成的消息将呈现为中间思考过程。其用法如代码8-13所示代码8-13importgradioasgrdefgenerate_response(message,history):history.append(gr.ChatMessage(roleuser,contentinput message: message))history.append(gr.ChatMessage(roleassistant,contentThe weather API says it is 20 degrees Celcius in San Francisco.,metadata{title: Used tool Weather API,id:222,parent_id:111}))return,historywithgr.Blocks()asdemo:chatbotgr.Chatbot(value[{role:user,content:What is the weather in San Francisco?},{role:assistant,content:I need to use the weather API tool,metadata:{title: Thinking,id:111}}])msggr.Textbox()msg.submit(generate_response,[msg,chatbot],[msg,chatbot])demo.launch()示例模拟代理使用天气API工具的思考过程。用户输入消息后系统会生成两条记录一条是用户的输入另一条是助手调用工具后的回复。chatbot的初始值可理解为代理思考后的执行步骤再次提交时开始调用天气API工具生成新回复新回复消息根据parent_id附加到父类metadata消息中并通过gr.Chatbot组件展示所有对话历史运行界面如图8-10所示图8-10本例可以看出在Gradio的底层gr.Blocks中能够使用gr.Chatbot从头开始构建聊天机器人的用户界面从而能够完全控制界面效果。注意history定义时可添加多条消息但append追加时只能一条一条的添加否则报错“TypeError: list.append() takes exactly one argument (2 given)”。8.8.2 项目二Claude与显示思考——引用资料Gradio的聊天机器人可以显示来自大语言模型响应的引用Citation非常适合展示来源文档和参考资料。下面展示如何使用Anthropic Claude API构建支持引用功能的聊天机器人它既能显示响应也能显示引用资料。首先设置ANTHROPIC_API_KEY并导入库如代码8-14所示代码8-14importgradioasgrimportanthropicimportbase64fromtypingimportList,Dict,Any DEFAULT_DOCThe grass is pink and soil is green. The sky is red while the sun is blue.然后定义读取文件函数、存储用户输入消息函数、格式化历史消息函数、更新变量函数和机器人响应处理函数。这里只展示核心的机器人响应处理函数bot_response其他函数请参考线上资源。代码如下所示defbot_response(history:list,enable_citations:bool,doc_type:str,text_content:str,pdf_file:str,api_key:str)-List[Dict[str,Any]]:try:ifnotapi_key:history.append({role:assistant,content:Please provide your Anthropic API key to continue.})returnhistory clientAnthropic(api_keyapi_key)messagesformat_message_history(history,enable_citations,doc_type,text_content,pdf_fileifpdf_fileelseNone)responseclient.messages.create(modelclaude-sonnet-4-6,max_tokens1024,messagesmessages)main_responsecitations[]# Process each content block, append to main response and citationsforblockinresponse.content:ifblock.typetext:main_responseblock.textifenable_citationsandhasattr(block,citations)andblock.citations:forcitationinblock.citations:ifcitation.cited_textnotincitations:citations.append(citation.cited_text)history.append({role:assistant,content:main_response})# Add citations if any were found and citations are enabledifenable_citationsandcitations:history.append({role:assistant,content:\n.join([f•{cite}forciteincitations]),metadata:{title: Citations}})returnhistory最后创建Gradio界面withgr.Blocks(fill_heightTrue)asdemo:gr.Markdown(# Chat with Anthropic Claudes Citations)withgr.Row(scale1):withgr.Column(scale4):chatbotgr.Chatbot(show_labelFalse,scale1)msggr.Textbox(placeholderEnter your message here...,show_labelFalse,containerFalse)withgr.Column(scale1):api_keygr.Textbox(typepassword,labelAnthropic API Key,placeholderEnter your API key,interactiveTrue,infoYour API key will not be stored)enable_citationsgr.Checkbox(labelEnable Citations,valueTrue,infoToggle citation functionality)doc_type_radiogr.Radio(choices[plain_text,pdf,combined],valueplain_text,labelDocument Type,infoChoose the type of document(s) to reference)text_inputgr.Textbox(labelDocument Content,placeholderfEnter your document text here.\nDefault text will be picked if citations are enabled and you dont provide the documents. Default document is --{DEFAULT_DOC},lines10,infoEnter the text you want to reference)pdf_inputgr.File(labelUpload PDF,file_countmultiple,file_types[.pdf],typefilepath,visibleFalse)cleargr.ClearButton([msg,chatbot,text_input,pdf_input])# Update input visibility based on settingsenable_citations.change(update_document_inputs,inputs[enable_citations,doc_type_radio],outputs[doc_type_radio,text_input,pdf_input])doc_type_radio.change(update_document_inputs,inputs[enable_citations,doc_type_radio],outputs[doc_type_radio,text_input,pdf_input])# Handle message submissionmsg.submit(user_message,[msg,chatbot,enable_citations,doc_type_radio,text_input,pdf_input,api_key],[msg,chatbot],queueFalse).then(bot_response,[chatbot,enable_citations,doc_type_radio,text_input,pdf_input,api_key],chatbot)if__name____main__:demo.launch(themeocean,debugTrue)本例实现了一个基于Anthropic Claude API的交互式聊天机器人界面并可选择性地提供文本、多个PDF文档或二者混合作为上下文同时支持模型生成内容的引用溯源。其核心功能主要有函数bot_response及构建GUI下面分别讲述。首先看一下核心函数bot_response。它实现了一个基于Anthropic Claude模型的交互式聊天机器人发送消息并提取回复内容和引用信息(1)‌API认证与响应‌调用format_message_history函数将历史消息、引用文本或PDF文档转化为Claude模型能接受的格式通过用户提供的API密钥初始化Anthropic客户端然后调用指定模型Claude Sonnet 4生成响应。(2)解析响应内容分离主回复和引用信息当enable_citations选项开启并且回复中有属性’citations’时将首次出现的引用信息添加到引用列表。(3)返回聊天历史将主回复和可能的引用列表追加到聊天历史通过键metadata将更新后的聊天历史用作界面显示‌此外还支持引用功能的启用/禁用控制。然后使用Gradio库构建一个功能完整的图形用户界面GUI。用于与Anthropic Claude模型进行交互并支持文档引用功能。以下是详细解析(1)‌界面布局与核心组件‌使用gr.Blocks创建界面设置fill_heightTrue使界面占满浏览器高度同时设置标题。然后创建多个核心组件例如gr.Chatbot、gr.Checkbox、gr.Radio、gr.File及gr.ClearButton等。(2)‌交互逻辑‌①调整组件的可见性。enable_citations.change和doc_type_radio.change事件监听器调用update_document_inputs函数该函数根据用户是否启用引用以及选择的文档类型纯文本、PDF或组合动态控制界面上文本输入框和PDF上传组件的显示与隐藏。②‌消息处理流程。首先当用户在消息输入框按下回车时调用user_message函数将用户输入的消息添加到聊天历史中并清空输入框然后通过then()链式调用bot_response函数将完整的聊天历史包括新用户消息、引用设置、文本及文档内容、API密钥传递给它以生成机器人的回复并更新聊天机器人组件显示的内容。(3)‌应用启动‌if判断确保当脚本直接运行时会启动Gradio应用采用ocean主题并开启调试模式debugTrue。在安装包anthropic后启动执行以下操作①在页面输入ANTHROPIC_API_KEY不过为安全起见建议在本地运行程序并设置②在选择引用文档类型时选择“combined”上传总数不超过100页的PDF文档。也可上传其它格式文档只要编码为utf-8即可③输入文档内容和要求比如要求总结论文内容输入“Please provide a brief summary of the papers.”回车后运行界面如图8-11所示图8-11引用功能与Gradio聊天机器人的元数据功能metadata配合得特别好通过创建可折叠部分既保持聊天界面的简洁又能轻松访问来源文档从而创建更透明和可信的交互体验。Hugging Face线上完整代码请参阅ysharma/anthropic-citations-with-gradio-metadata-key️链接8-5。经过版本更迭后可能出现运行错误读者可参考本书线上修正后的代码。

相关文章:

第8章(2)——项目二:Claude与显示思考——引用资料

第8章(2)——项目二:Claude与显示思考——引用资料8.8 metadata显示思考的工具和资料8.8.1 metadata显示思考——使用工具8.8.2 项目二:Claude与显示思考——引用资料8.8 metadata显示思考的工具和资料 gr.Chatbot组件支持参数me…...

分享16个精美网站后台登录注册页面源码 总有几款适合你

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 在开发网站后台系统时,登录注册页面作为用户与系统交互的第一步,其设计的好坏直接影响用户体验。一个美观、易用的登录注册页面能够提升用户对系统的好感度和信任度。今天&#xf…...

3D打印企业还需要转型?这三个案例给出重要启示!

当前,金属3D打印技术正在全球范围内经历关键转折——从原型、小批量零件制造,加速迈向真正的大批量、高性能最终产品制造。在这一阶段,市场竞争也变得异常激烈。各家品牌在技术路线、产品参数和服务模式上出现巨大的同质化。无论是消费级打印…...

Adobe更新Photoshop与Lightroom:深度整合AI,提升创作效率与影像处理速度

Photoshop更新:3D旋转与图层清理功能升级创作体验Adobe此次对Photoshop的更新亮点颇多。新增的“旋转对象”工具,让用户能在3D空间中实时对2D素材进行旋转、倾斜和翻转操作,为创作带来了更多的可能性。配合“协调”功能,AI可自动分…...

火旺电报|微软OpenAI关系调整 Meta并购受阻 懂游宝并购 阿里医疗AI落地 iphone折叠屏动向

2026年4月29日 火旺电报科技快讯速递全球科创动态 关注产业变化节奏4月27日微软与OpenAI对合作结构作出调整释放多云信号,同日Meta约20亿美元并购在监管层面被否决,游戏平台并购继续推动行业集中,阿里4月28日推进肠癌AI筛查应用,而…...

去中心化资讯推荐程序,颠覆算法控制信息,用户自主选择偏好,无信息茧房。

定位仍然是:架构思路 代码原型,不做产品、不涉代币、不承诺“打破算法”的实际效果,仅用于学习与研究。 一、实际应用场景描述 当前主流资讯平台普遍存在: - 推荐算法由平台单方控制 - 用户只能被动接受“优化后的信息流” - 内…...

3D部件分割与语义命名的技术挑战与ALIGN-Parts解决方案

1. 3D部件分割与语义命名的技术挑战在计算机视觉和图形学领域,3D部件分割是一个基础但极具挑战性的任务。简单来说,它需要将三维对象分解为有意义的组成部分,并给这些部分赋予准确的语义名称。想象一下,当你看到一个椅子时&#x…...

睡眠质量资产量化程序,颠覆健康无收益,睡眠数据脱敏上链,可用于健康研究并获得奖励。

定位依然是:技术演示 思路参考,不涉及医疗诊断,不构成金融产品,也不承诺任何收益。 一、实际应用场景描述 在现代社会中: - 个人睡眠数据被智能手表、手环持续采集 - 数据通常停留在厂商服务器或 App 中 - 用户难以…...

医学实体识别技术与临床决策支持系统实践

1. 医学实体识别技术基础解析医学实体识别(Medical Named Entity Recognition, M-NER)作为医疗自然语言处理的核心技术,其本质是从非结构化的医疗文本中识别并分类具有特定医学意义的实体。与通用领域的NER不同,医疗文本中的实体识…...

别再只当开关用了!深度挖掘IDEC和泉RU系列继电器的锁存杆功能与安全联锁设计

解锁IDEC和泉RU系列继电器的隐藏技能:锁存杆与安全联锁实战指南 在自动化设备设计中,继电器常被视为简单的电路开关元件。但当你面对需要状态保持或安全冗余的关键场景时,IDEC和泉RU系列继电器的锁存杆功能将成为你的秘密武器。本文将带你超越…...

DreamID-Omni多模态生成框架解析与应用实践

1. 项目概述DreamID-Omni是一个突破性的多模态生成框架,它首次实现了对人像音视频内容的统一控制。这个框架最吸引我的地方在于,它能够通过单一模型同时处理图像、音频和视频的生成任务,这在业内尚属首创。作为一名长期关注生成式AI的从业者&…...

从Agilex到Cyclone:一文看懂Intel FPGA各系列怎么选(附选型速查表)

从Agilex到Cyclone:Intel FPGA选型实战指南与速查手册 在嵌入式系统、数据中心加速和边缘计算等领域,FPGA凭借其可重构性和并行计算优势,正成为越来越多工程师的首选解决方案。作为行业领导者,Intel通过收购Altera获得了完整的FP…...

open-interpreter:用自然语言操控电脑的本地AI助手实战指南

1. 项目概述:当你的电脑拥有了“自然语言”操作系统如果你用过ChatGPT,一定对那种用对话就能完成复杂任务的感觉印象深刻。但很多时候,这种对话被限制在了一个网页对话框里,它知道很多,却无法直接“动手”操作你的电脑…...

从混乱到清晰:我是如何用PlantUML活动图重构团队模糊的业务逻辑文档的

从混乱到清晰:PlantUML活动图如何成为团队沟通的桥梁 1. 当文字失效时:业务逻辑文档的困境 那是一个普通的周三下午,会议室里的空气凝固得几乎能切开。产品经理第7次拍着桌子强调:"这个订单状态机逻辑文档写得清清楚楚&#…...

Perl脚本自动化日志分析与数据批量处理实操案例

Perl脚本自动化日志分析与数据批量处理实操案例 一、案例背景 在服务器运维、业务系统运行过程中,会产生海量日志文件,包含运行报错、接口请求、访问流量、异常告警等各类信息。人工逐条筛查日志效率极低,且容易遗漏关键故障信息。Perl语言具…...

2026年一季度软件业:业务收入增11.6%,利润总额增速却放缓!

2026年一季度软件业:业务收入增11.6%,利润增速仅1.0%工业和信息化部运行监测协调局发布的“2026年一季度软件业运行情况”显示,2026年一季度我国软件和信息技术服务业运行态势良好。软件业务收入达34920亿元,同比增长11.6%&#x…...

别再只算理论值了!XDMA性能调优必看:从PCIe编码开销到Windows实际链路速度的完整评估指南

别再只算理论值了!XDMA性能调优实战:从协议开销到系统瓶颈的深度解析 当你在Vivado中配置好XDMA IP核的PCIe参数,满心期待地烧录到板卡上,却发现实测带宽只有理论值的30%——这种落差感每个FPGA开发者都经历过。问题的根源往往不…...

R Markdown渲染中断、pandoc超时、theme_set()失效——Tidyverse 2.0自动化流水线6大断点诊断清单

更多请点击: https://intelliparadigm.com 第一章:R Markdown渲染中断的根因定位与修复策略 常见中断场景识别 R Markdown 渲染中断通常表现为 knitr 执行卡顿、HTML 输出空白、或控制台抛出 pandoc 错误。根本原因多集中于三类:依赖冲突&a…...

2024新版HDD Regenerator硬盘坏道修复工具|专业级硬盘再生软件

温馨提示:文末有联系方式什么是HDD Regenerator 2024? HDD Regenerator 2024是专为现代机械硬盘(HDD)设计的智能坏道修复工具,采用独有磁道重映射与电磁再生技术,可针对性处理早期物理坏道,避免…...

开箱即用:REX-UniNLU镜像一键启动,打造个人语义分析工作站

开箱即用:REX-UniNLU镜像一键启动,打造个人语义分析工作站 1. 引言:为什么选择REX-UniNLU 在日常工作中,我们经常需要处理大量中文文本数据。无论是从用户评论中提取关键信息,还是分析文档中的实体关系,传…...

2026届必备的六大AI写作工具横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 运用DeepSeek来辅助进行论文写作,得遵循系统性的流程。首先呢,要明确…...

2026届必备的AI辅助写作工具横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于学术写作范畴之内,论文AI网站已然变作提高效率极为关键的工具,此类…...

2025届最火的六大AI写作平台推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在学术写作范畴里,人工智能技术被广泛运用了,它成了论文撰写进程里边…...

别再手动查日志了!用Prometheus+vmware_exporter给你的VMware vSphere做个全身体检(附K8s/Docker两种部署避坑指南)

从零构建VMware vSphere智能监控体系:Prometheusvmware_exporter实战全解析 虚拟化平台如同企业的数字心脏,每一次心跳异常都可能引发业务连锁反应。记得去年某次深夜告警,整个运维团队花了三小时在vSphere Client里逐台排查虚拟机&#xff0…...

Pix2Text:你的智能文档扫描仪,让图片中的数学公式和表格“开口说话“

Pix2Text:你的智能文档扫描仪,让图片中的数学公式和表格"开口说话" 【免费下载链接】Pix2Text An Open-Source Python3 tool with SMALL models for recognizing layouts, tables, math formulas (LaTeX), and text in images, converting the…...

RNN隐状态机制解析

深度学习与机器学习时序预测技术日报 日期: 2026年4月30日 主题: 时序数据库选型、RNN核心机制与AI基础设施新趋势 1. 核心热点摘要 实时数据库与时序数据库的选型博弈 在工业物联网与智能制造场景中,实时数据库(RTDB&#xff…...

PyTorch基于 LSTM+ KAN(Kolmogorov-Arnold Network)的时间序列预测模型

研究背景 风电场功率受气象因素影响,具有强波动性和不确定性,高精度预测对电网稳定调度至关重要。传统LSTM虽能捕捉时间依赖,但其后的全连接层解释性弱、参数量大。KAN(Kolmogorov-Arnold Networks)凭借可学习的激活函数和良好的非线性逼近能力,可作为LSTM后端的替代映射…...

使用 Taotoken 后 API 调用延迟与稳定性体感观察记录

使用 Taotoken 后 API 调用延迟与稳定性体感观察记录 1. 接入初期的基本体验 在将项目从直接对接单一厂商切换到 Taotoken 聚合端点后,最直观的变化是模型选择的灵活性。通过统一 API 密钥即可调用多个主流模型,省去了为每个供应商单独管理密钥的麻烦。…...

Ostrakon-VL-8B零售多模态模型部署:支持ONNX Runtime CPU推理降级方案

Ostrakon-VL-8B零售多模态模型部署:支持ONNX Runtime CPU推理降级方案 1. 项目概述 Ostrakon-VL-8B是一款专为零售与餐饮场景优化的多模态大模型,能够处理图像识别、文字提取、场景分析等多种任务。本文将详细介绍如何部署这一模型,并重点讲…...

别再只发Odometry了!ROS 2中里程计消息与TF2坐标变换的绑定发布实战

ROS 2里程计与TF2坐标变换的深度绑定实践 在机器人开发中,里程计数据是导航系统的核心输入之一。很多开发者在使用ROS 2时,虽然能够正确发布nav_msgs/Odometry消息,却经常遇到RViz显示异常或导航栈无法正常工作的问题。这通常是因为忽略了里…...