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

Cline与大模型的交互协议(内涵Agent实现原理)

MCP协议MCP只规定了MCP Host与MCP Server之间的沟通协议并没有对大模型的输入和输出格式提出要求因此不同的MCP Host就可能会用不同的格式来与大模型进行沟通比如Cline就是用的xml。MCP与大模型的沟通方式配置中转服务器中转服务器代码importhttpxfromfastapiimportFastAPI,Requestfromstarlette.responsesimportStreamingResponseclassAppLogger:def__init__(self,log_filellm.log):Initialize the logger with a file that will cleard on startup.self.log_filelog_file# Clear the log file on startupwithopen(self.log_file,w,encodingutf-8)asf:f.write()deflog(self,message:str):Log a message to both file and console.# Log to filewithopen(self.log_file,a,encodingutf-8)asf:f.write(message\n)# Log to consoleprint(message)appFastAPI()loggerAppLogger(llm.log)# DeepSeek API 配置DEEPSEEK_API_URLhttps://api.deepseek.com/v1/chat/completionsapp.post(/chat/completions)asyncdefproxy_request(request:Request):body_bytesawaitrequest.body()body_strbody_bytes.decode(utf-8)logger.log(f模型请求{body_str})bodyawaitrequest.json()logger.log(模型返回\n)asyncdefevent_stream():asyncwithhttpx.AsyncClient()asclient:asyncwithclient.stream(POST,DEEPSEEK_API_URL,jsonbody,headers{Content-Type:application/json,Accept:text/event-stream,Authorization:request.headers.get(Authorization,),},)asresponse:asyncforlineinresponse.aiter_lines():logger.log(line)yieldf{line}\nreturnStreamingResponse(event_stream(),media_typetext/event-stream)if__name____main__:importuvicorn uvicorn.run(app,host0.0.0.0,port8000)中转服务器的cline配置API Provider: OpenAI CompatibleBase URL: http://localhost:8000OpenAI Compatible API Key: apikeyModel ID: deepseek-chat解读简单场景下Cline发往模型的请求cline发送给大模型的工具中包含两种一种是cline的内置工具写入文件、替换文件内容、读取文件、运行终端命令另一种是MCP工具天气预告、气象预警等cline规定了工具调用请求必须要使用XML格式传递外面是工具名称里面是参数值只要是模型按照Cline规定的这种XML格式返回Cline就可以帮助模型调用各种他想要调用的工具use_mcp_tool: 请求连接使用MCP服务提供的工具每个MCP服务器可以提供具有不同功能的多个工具server_name: MCP服务器的名称tool_name: 要执行的工具名称arguments: json对象工具的参数如果调用工具之后模型拿到的结果不是想要的还会继续调用其他工具知道拿到满意的结果为止解读简单场景下模型发往Cline的返回模型采用的是SSE的方式逐量返回的在SSE的返回结果里面如果某一样以开头返回结果的话这一样就是注释在SSE中注释的主要作用是保持连接避免我们的客户端中转服务器因超时而断开连接大模型返回的内容{id:7df94a6a-ef32-4db2-aca0-e71876a63d1a,object:chat.completion.chunk,created:1775277255,model:deepseek-chat,system_fingerprint:fp_eaab8d114b_prod0820_fp8_kvcache_new_kvcache,choices:[{index:0,delta:{content: the},logprobs:null,finish_reason:null}],usage:null}流式返回的响应中将content拼接到一起就是模型整体返回给我们的内容。Cline调用一个MCP工具查看日志记录第一部分是标签第二部分是use_mcp_toolserver_name/server_nametool_calls/tool_callsarguments{ latitude: 40.7128, longitude: -74.0060 }/arguments/use_mcp_tool标签LLM大模型有没有记忆模型本身没有记忆大语言模型LLM本质上是无状态的函数它每次处理你的请求时都是独立计算的不记得你刚才说的是什么你需要手动管理上下文如果你希望Agent有记忆就必须每次调用模型时把之前的对话历史、关键信息、任务状态等重新放进这次请求的消息列表里。解构本质Cline的XML协议与ReAct的关系模型整个思考调用过程什么事ReAct: 思考-行动-观察Thought、Action、Observation什么是Agent: 持续思考、持续调用外部工具、直至解决用户问题的一个程序Cline本质上就是一个Agent也是根据ReAct的思想来构建他的Agent的流程的提问ReAct也是Cline这种XML格式来与模型沟通的嘛当然不是了XML知识数据传输的一个格式而已ReAct呢是一个思想它并不跟某个格式绑定ReAct的精髓在于我们前面提到的Thought、Action、ObservationReActReasoning Acting思想由普林斯顿大学和谷歌研究院的研究团队在2022 年合作提出核心思想通过让语言模型交替生成推理轨迹Thought和任务特定操作Action在接收外部反馈Observation形成一个思考-行动-观察的闭环从而协同发挥模型的推理能力与外部交互的能力。这也是现在很多AI Agent如LangChain、AutoGPT等底层范式的重要理论基础ReaCt当初在论文刚被提出时是通过文本进行交互的Thought、Action、Observation如果想与模型以这种文本格式进行交互我们需要给提供一个System Prompt提示词。你需要解决一个任务。为此你需要将任务分解为多个步骤。对于每个步骤首先使用 Thought: 思考要做什么然后使用可用工具之一决定一个 Action:。接着你将根据你的行动从环境/工具中收到一个 Observation:。持续这个思考和行动的过程直到你有足够的信息来提供 FinalAnswer:。 这里有一些例子 示例 1: Question: 埃菲尔铁塔有多高 Thought: 我需要找到埃菲尔铁塔的高度。可以使用搜索工具。 Action: get_height(埃菲尔铁塔) Observation: 埃菲尔铁塔的高度约为330米包含天线。 Thought: 搜索结果显示了高度。我已经得到答案了。 FinalAnswer: 埃菲尔铁塔的高度约为330米。 示例 2: Question: 帮我找一个简单的番茄炒蛋食谱并看看家里的冰箱里有没有西红柿。 Thought: 这个任务分两步。第一步找到番茄炒蛋的食谱。第二步检查冰箱里是否有西红柿。我先用 find_recipe 工具找食谱。 Action: find_recipe(dish番茄炒蛋) Observation: 简单的番茄炒蛋食谱将2个鸡蛋打散2个番茄切块。热油先炒鸡蛋盛出。再热油炒番茄至软烂加入鸡蛋放盐调味即可。 Thought: 好的我已经有食谱了。食谱需要西红柿。现在我需要用 check_fridge 工具看看冰箱里有没有西红柿。 Action: check_fridge(item西红柿) Observation: 冰箱检查结果有3个西红柿。 Thought: 我找到了食谱并且确认了冰箱里有西红柿。可以回答问题了。 FinalAnswer: 简单的番茄炒蛋食谱是鸡蛋打散番茄切块。先炒鸡蛋再炒番茄混合后加盐调味。冰箱里有3个西红柿。 请严格遵守 输出Action后立即停止生成 等待返回真实的Observation 擅自生成Observation将导致错误 本次任务可用工具 get_forecast(latitude, longitude): 获取指定坐标的天气预报。返回包含预报信息的字符串。 write_to_file(filename, content): 将指定内容写入指定文件。成功时返回 写入成功。自己写Agent时与模型的交互格式可以自定义如Thought-Action-Observation、XML、JSON等只要这个格式本质上使用的是ReAct的模式那都是可以的所以做一个类似Cline这样的Agent需要什么呢首先我们要告诉模型需要返回结果的格式其次我们需要告诉模型可用的工具列表最后我们要告诉模型一定要使用ReAct模式把这些要求写到System Prompt里面 用户问Question作为触发真个Agent就可以跑起来了。

相关文章:

Cline与大模型的交互协议(内涵Agent实现原理)

MCP协议 MCP只规定了MCP Host与MCP Server之间的沟通协议,并没有对大模型的输入和输出格式提出要求;因此不同的MCP Host就可能会用不同的格式来与大模型进行沟通;比如Cline就是用的xml。 MCP与大模型的沟通方式?配置中转服务器中转…...

论文精读:突破大模型推理瓶颈:为什么“限制自信”反而能让 AI 更聪明?

论文下载地址:https://arxiv.org/pdf/2502.07154 随着 OpenAI o1 等推理模型的爆火,AI 行业正在经历一场深刻的范式转移:从单纯依赖“扩大训练规模(Training-Time Scaling)”,正式步入“扩大测试期计算&am…...

GraphRAG硬核实战:打造企业“数字老师傅”

技术隐喻警示:如果你还在用传统的向量数据库试图解决企业级知识传承问题,这就像试图用“关键词搜索”去训练一个博士生——不仅力不从心,更是对算力的极度浪费。 在企业数字化转型的深水区,我们面临着一个极其残酷的**“默会知识”…...

RAGFlow Agent 搞定火电复杂图表

在当前的 LLM 应用层,有一个共识正在逐渐变得 painful:通用大模型在处理垂直领域的“存量知识”时,几乎是无能的。 这种无能尤其体现在工业领域。当我们把目光从“写周报、画海报”的互联网场景移开,投向真正硬核的“火电行业”时…...

Flutter鸿蒙应用集成图片加载与缓存功能

🔥Flutter鸿蒙应用集成图片加载与缓存功能(macOSDevEco Studio) 欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net📄 文章摘要 本文为Flutter for OpenHarmony 跨平台应用开发系列实战文章&…...

利用json-to-ts工具进行转换,放置在typeScript.ts文件中

后端,返回了 100 个字段,现在拿到的那 100 个字段里,里面还有那种深层嵌套的“对象套对象”,利用json-to-ts工具进行转换,然后前端定义后端的response这个返回对象,要怎么定义,是不是要把没有用…...

配置嵌入式Linux系统从NFS启动

配置嵌入式Linux系统从NFS启动 嵌入式Linux开发时,需要频繁将开发的程序下载到嵌入式电路板上运行,尽管采用各种文件传输工具能比较方便的再宿主机和开发电路板之间进行文件传输,但每次操作需要操作略显繁琐。此处记录在开发中经常使用到的嵌…...

永磁同步电机PMSM无感FOC控制:扩展卡尔曼滤波器EKF观测器,代码运行无错,支持无感启动...

永磁同步电机pmsm无感foc控制,观测器采用扩展卡尔曼滤波器ekf,代码运行无错误,支持无感启动,代码移植性强,可以移植到国产mcu上.—— 从“功能”视角看透 ARM 官方 5 套 demo 一、写作目的 很多开发者拿到 CMSIS-DSP 例…...

COMSOL仿真石墨烯吸收器,带视频演示,一步一步教学,原文章来自于一篇二区文章。 图片展示为...

COMSOL仿真石墨烯吸收器,带视频演示,一步一步教学,原文章来自于一篇二区文章。 图片展示为原文献结果,均可复现,视频里面包括设计步骤,可以用来学习操作仿真操作最近在研究石墨烯吸收器的仿真,发…...

永磁同步电机PMSM无感FOC驱动代码功能说明

永磁同步电机pmsm无感foc驱动代码,启动为高频注入,平滑切入观测器高速控制,代码全部手写开源,可以移植到各类mcu上。 附赠高频注入仿真模型一、代码整体架构与应用场景 本文档所分析的代码是一套针对永磁同步电机(PMSM…...

[英雄联盟辅助工具] League-Toolkit:提升游戏体验与决策效率的全方位解决方案

[英雄联盟辅助工具] League-Toolkit:提升游戏体验与决策效率的全方位解决方案 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 一、…...

Servo_TCA:基于AVR TCA硬件PWM的零抖动伺服控制库

1. Servo_TCA 库概述:面向现代 AVR 架构的硬件 PWM 伺服控制方案Servo_TCA 是一个专为新一代 8 位 AVR 微控制器设计的高性能伺服驱动库,其核心目标是彻底消除传统软件定时伺服库中普遍存在的脉冲抖动(jitter)问题。该库并非对 Ar…...

高压电源软启动:从浪涌抑制到系统可靠性的工程实践

1. 高压电源软启动的必要性 第一次见到整流二极管炸裂的场景,至今记忆犹新。那是在一个工业电源调试现场,工程师刚合上电闸就听到"啪"的一声脆响,随后便闻到焦糊味——价值数百元的整流模块瞬间报废。罪魁祸首就是电容滤波电路带来…...

手把手教你用objdump和readelf破解ELF文件:从代码节修改到目标输出

深入解析ELF文件:从代码节定位到二进制修改实战 在Linux系统开发与逆向工程领域,理解ELF(Executable and Linkable Format)文件结构是每位开发者必备的核心技能。ELF作为Unix-like系统标准的可执行文件格式,承载着程序运行的完整信息架构。本…...

ArdTap:Arduino零代码现场调试框架

1. ArdTap:面向嵌入式现场调试的零代码移动配置框架1.1 工程定位与设计哲学ArdTap 是一个专为 Arduino 生态设计的轻量级远程管理库,其核心目标并非替代传统固件开发流程,而是解决嵌入式系统在部署后阶段的现场参数调优、运行状态监控与快速功…...

分层dfs,一种介于dfs与bfs之间的算法

在算法设计的深邃丛林中,深度优先搜索与广度优先搜索如同两条风格迥异的小径。前者沿着一条道路走到黑,不撞南墙不回头,却往往在最优解的门口徘徊——它难以回答"最少需要几步"这样的问题,因为一旦深入某个分支&#xf…...

清北博雅考研|个性化备考服务指南,适配多元考生上岸需求

作为深耕考研辅导领域的老牌机构,清北博雅考研始终以“学员需求为核心”,打破传统辅导模式的局限,立足不同考生的备考痛点,打造“个性化定制实战化提分全维度保障”的专属服务,不搞同质化套路,不做虚假承诺…...

Entries()方法

entries() 方法返回一个迭代器对象,包含数据结构中每个元素的键值对。不同数据结构的用法略有不同。1. 数组的 entries()返回索引和值的键值对const arr [a, b, c]; const iterator arr.entries();console.log(iterator.next().value); // [0, a] console.log(ite…...

SecGPT-14B模型版本管理:无缝升级OpenClaw依赖的安全分析能力

SecGPT-14B模型版本管理:无缝升级OpenClaw依赖的安全分析能力 1. 为什么需要关注模型版本管理 上周我在用OpenClaw自动化处理安全日志时,突然发现几个原本能识别的攻击模式开始出现误判。排查后发现是底层SecGPT-14B模型更新后行为发生了变化——这个经…...

基于三菱PLC和组态王的恒温控制系统:加热炉温度控制设计-含梯形图程序、接线图原理图及IO分配...

基于三菱PLC和组态王恒温控制系统的设计加热炉温度控制 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面三伏天里给车间加热炉做恒温控制,那酸爽就跟抱着暖气片吃火锅似的。今天咱们来聊聊基于三菱FX3U PLC和组态王的温度控…...

CSS如何制作透明度渐变的蒙版_使用linear-gradient从黑色过渡到透明

linear-gradient做透明蒙版时背景没变暗,是因为未使用带alpha通道的颜色(如rgba或带透明度的十六进制),而默认颜色如black或#000无透明度,导致渐变失效;必须用rgba(0,0,0,0.8)到rgba(0,0,0,0)等显式透明色&…...

OpenClaw跨平台控制方案:千问3.5-9B同步操作多台设备

OpenClaw跨平台控制方案:千问3.5-9B同步操作多台设备 1. 为什么需要跨设备自动化 去年团队扩容后,我遇到了一个典型的技术债问题:每次新同事入职,都需要手动配置5台不同操作系统的开发机(Ubuntu/macOS/Windows&#…...

从MATLAB到Python:我如何把那个课程大作业的OCR算法“移植”并优化了一遍

从MATLAB到Python:OCR算法迁移与优化的实战指南 第一次用Python重写那个折磨我两周的MATLAB大作业时,我盯着屏幕上完全不同的函数名发愣——原来imbinarize在OpenCV里要拆成threshold加THRESH_OTSU,而曾经熟悉的形态学操作现在要面对getStruc…...

React 自定义 Hook 的命名规范与调用规则详解

React 允许在普通函数中调用 Hook,但该函数必须是符合约定的自定义 Hook(即以 use 开头),且只能在 React 组件或其它自定义 Hook 内部调用;违反规则虽不一定立即报错,却会破坏依赖追踪、导致状态异常或未来…...

PID控制算法原理与应用详解

1. PID控制算法概述PID控制算法是工业控制领域应用最广泛的控制算法之一,它通过比例(P)、积分(I)和微分(D)三个环节的组合,实现对被控对象的精确控制。这种算法结构简单、参数物理意…...

避坑!这些毕设太好抄了,3000+毕设案例推荐第1023期

231、基于Java的废品回收公司智慧管理系统的设计与实现(论文+代码+PPT)废品回收公司智慧管理系统主要功能包括:会员管理、经手人管理、客户管理、供应商管理、废品管理、收购管理、废品入库、销售出库、期间入库、经手人入库查询、期间出库、…...

昆明电力管供应商哪家强

在昆明城市电网升级、新能源基础设施建设的浪潮中,电力管作为保护电力线路的关键材料,其质量直接影响工程安全性与使用寿命。面对市场上琳琅满目的供应商,如何选择兼具适配性、可靠性与性价比的合作伙伴?本文从行业痛点切入&#…...

seo外包公司报价高的原因是什么_如何比较不同seo外包公司的报价

SEO外包公司报价高的原因是什么_如何比较不同SEO外包公司的报价 在当今竞争激烈的市场环境中,越来越多的企业选择外包SEO服务来提升他们的在线存在感和业务增长。不同的SEO外包公司报价差异巨大,一些公司的报价显得格外高。SEO外包公司报价高的原因究竟…...

【超详细】步进电机选型避坑指南:这5个参数没搞懂,买回来就是废铁

文章目录一、保持转矩:最大误区是把它当成“工作力矩”1.1 保持转矩的物理含义:通电锁住时的最大力矩,不是转起来的力矩1.2 选型时保持转矩到底该怎么用:经验系数法1.3 实测对比:标称力矩相同的两台电机,实…...

三方三层的主从博弈能源系统优化模型,粒子群算法求解研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...