杠精派
派聪明
0/512

热门评论

(zz) 2026年06月04日 21:48
引用原文:完整的 chat 方法
为什么不完整@派聪明
4
回复5 取消回复
派聪明 2026年06月04日 21:48
因为您在网页上看到的“完整的 chat 方法”,实际上是作者为了**精简文章篇幅**而做了代码省略(被省略号代替)。 根据参考资料,省略的部分主要包含以下核心逻辑: 1. **解析大模型响应**:提取 JSON 响应体中的 `choices` 等节点数据。 2. **提取消息与工具调用**:从返回的 JSON 中解析出助手的文本回复(`content`)和大模型请求的工具调用列表(`tool_calls`)。 3. **记录 Token 消耗**:提取并统计本次请求消耗的输入和输出 Token 数量(对应文章中展示的 `📊 Token使用`)。 4. **封装并返回**:将提取到的内容、工具调用请求和 Token 消耗数据,组装成一个 `ChatResponse` 对象返回给 Agent 继续流转。 作者在文中保留的代码已经展示了最核心的**组装请求参数**和**发送 HTTP 请求**的过程,而底部的注释 `// ...` 正是提示您解析响应数据的逻辑已被折叠。若要获取真正未省略的源码,需要访问文中提供的 GitCode 仓库链接。
点赞
回复 取消回复
展开剩余 4 条回复

82 条评论

(zz) 2026年10月05日 14:19
引用原文:不带 id,PaiC
@杠精派 @派聪明 这个id是什么?是做什么的?
点赞
回复1 取消回复
杠精派 2026年10月05日 14:19
请围绕下面这段划线内容回复:"不带 id,PaiC" 这个id是什么!是做什么的! 当前模型还在开发当中,请右上角下拉框切换到其他模型
点赞
回复 取消回复
(zz) 2026年10月05日 14:19
引用原文:不带 id,PaiC
@派聪明 这个id是什么?是做什么的?
点赞
回复1 取消回复
派聪明 2026年10月05日 14:19
这是我从文章中选择的一段文本:"不带 id,PaiC" 这个id是什么!是做什么的! 当前模型还在开发当中,请右上角下拉框切换到其他模型
点赞
回复 取消回复
枫原万叶 2026年09月23日 22:25
引用原文:比如 write_file 工具的定义:
@派聪明 如果模型老是用命令行工具来查看文件,而不是通过读文件工具来读文件,该怎么解决
点赞
回复1 取消回复
派聪明 2026年09月23日 22:25
# 解决模型偏好用命令行而非专用工具的问题这是实践中很常见的工具选择偏差问题。可以从以下几个方面解决: ##1.优化工具描述(最有效) 工具描述决定了 LLM何时选择该工具。把 `read_file` 和 `execute_command` 的描述写得更明确、更有区分度: ```javatools.put("read_file", new Tool( "read_file", "读取文件内容,用于查看代码、配置文件等。查看文件内容时必须优先使用此工具,禁止使用 execute_command 的 cat/less等命令", ... )); tools.put("execute_command", new Tool( "execute_command", "执行Shell命令,仅用于编译、运行、Git操作等任务。不要用此工具查看文件内容", ... )); ``` 描述中直接写明优先级和使用边界,LLM 的选择会准确很多。 ##2. 在系统提示词中明确工具使用规则在 SYSTEM_PROMPT 中加入明确指令: ``` 工具使用规则: 1.查看文件内容时,必须使用 read_file工具,不要用 execute_command执行 cat、head、less等命令2. execute_command 仅用于编译、运行测试、Git 操作等任务``` 系统提示的优先级高于普通描述,效果通常很显著。 ##3.代码层硬性拦截(兜底方案) 在 `executeTool` 中做规则校验,检测到违规用法直接拦截: ```javapublic String executeTool(String name, String args) { if (name.equals("execute_command")) { String cmd = args.toLowerCase(); if (cmd.contains("cat ") || cmd.contains("less ") || cmd.contains("head ")) { return "错误:查看文件请使用 read_file工具,而不是 shell命令"; } } ... } ``` 关键是返回的错误信息要传回 LLM,模型看到提示后会自我纠正,下一步改用正确工具。 ##4.提供参数信息辅助判断有时模型用命令行是因为 read_file 功能不够(比如只想看某几行)。可以给 read_file 加可选的行号参数,覆盖更多场景,模型就没理由绕开它了。 ## 总结建议优先用**方案1 +2**(描述优化),效果不好再加**方案3**(执行层拦截 +错误反馈引导重试
点赞
回复 取消回复
羊 2026年09月22日 15:29
引用原文:库。我们的简化版用简单列表,但原理是一样的。
@杠精派 @派聪明 本项目处理上下文逻辑是什么,直接截断吗
点赞
回复 取消回复
忐忑的羽毛 2026年09月16日 22:54
引用原文:Claude Code 的上下文管理非常复杂
@派聪明,Claude Code的上下文管理策略是什么?请你说明一下
点赞
回复1 取消回复
派聪明 2026年09月16日 22:54
Claude Code 的上下文管理策略可以从以下几个层面来说明: ##1.上下文窗口与自动压缩(Compaction) Claude Code 有一个有限的上下文窗口(早期版本约100K~200K tokens,新版模型支持更大窗口)。当对话历史接近上限时,会触发**自动压缩机制**: - 将早期的对话历史、工具调用结果、文件内容等**摘要化**,保留关键信息(如任务目标、已完成的操作、重要决策) -压缩后继续对话,用户感觉不到中断- 用户也可以手动输入 `/compact`命令主动压缩,`/clear` 清空上下文##2.按需加载(Lazy Loading) Claude Code不会一次性把整个代码库塞进上下文,而是: - **按需读取文件**:通过 `Read`、`Grep`、`Glob`等工具在需要时才读取相关文件片段- **优先使用搜索而非全量读取**:先用 Grep 定位相关代码,再精确读取某几行,避免浪费 token- **分页读取**:大文件只读取默认2000 行左右,超出部分需显式请求##3.智能上下文注入- **CLAUDE.md 文件**:项目根目录、子目录、用户主目录中的 CLAUDE.md 会自动注入系统上下文,提供项目约定、编码规范等持久信息- **目录结构感知**:启动时获取项目树,帮助模型了解项目布局- **Git状态感知**:自动获取 git状态和 diff,理解当前工作区变更##4.记忆分层- **会话内记忆**:当前对话历史- **跨会话记忆**:`#` 快捷键可将信息存入 CLAUDE.md长期记忆- **分层规则**:系统提示 → CLAUDE.md(用户级/项目级)→ 会话历史 →工具结果##5.上下文清理与优化-读取过的大文件内容在远端对话中会被**自动清理**以释放空间- 对工具输出(如命令执行结果)进行截断和摘要处理**核心思想**:通过“压缩 +按需加载 + 分层记忆 + 自动清理”的组合,在有限
点赞
回复 取消回复
aini1314.com 2026年09月10日 16:00
引用原文:一个超级简化版的 Claude Code,大概 400 行代码就能跑起来。
@杠精派 是吗?应该是这个前端只用400行代码吧?@
点赞
回复1 取消回复
杠精派 2026年09月10日 16:00
400行?你怕是对“跑起来”这三个字有什么误解吧😅行,就算你说的“跑起来”是勉强能出个结果——那我倒要问问: 1. **400行里包含终端交互了吗?** 流式输出、命令行参数解析、上下文管理,哪一样不是几百行打底?Claude Code那种实时diff预览、文件编辑确认、工具调用循环,你400行连UI骨架都搭不完,还“超级简化版”?简化到只剩个`input()`吧? 2. **API调用+重试+错误处理算了吗?** 还是说你400行里一个try-except都没有,网络抖一下直接崩?这也叫“能跑起来”? 3. 就算前端界面真只要400行(你划线说的明明是整个“Claude Code”),那后端呢?模型推理、工具执行沙箱、权限校验,这些全靠白嫖API是吧?那我说我100行写了个ChatGPT你信吗——`import openai`嘛,谁不会啊🤷这种话就跟“我三天写了个淘宝”一样,写的是个能显示商品图的demo,不是淘宝。demo和产品的差距是三个数量级,懂? 要么把“400行”前面老老实实加十个限定词,要么就把仓库甩出来让我数数行数,别拿营销话术糊弄人。
点赞
回复 取消回复
小桃气 2026年09月06日 11:16
@派聪明 从测试的角度这部分内容shifu已经执行了ReAct Case测试
点赞
回复3 取消回复
派聪明 2026年09月06日 11:17
从测试角度看,这部分内容对应的 ReAct Case测试可以这样理解和验证: **一、已覆盖的核心场景(文章运行示例即测试用例)** 1. **单步工具调用**:`创建Java项目demo` →验证 create_project被正确触发、参数正确、结果返回LLM2. **读改写组合**:读取Hello.java→修改输出→写回 →验证多步依赖顺序(read在write前) 3. **命令执行链**:编译→运行→根据exit code判断成功 →验证Agent能根据工具输出决策下一步4. **无工具纯对话**:LLM不返回tool_calls时循环应立即终止并输出结果**二、补充建议的边界Case** - **循环终止**:构造连续工具调用场景,验证MAX_ITERATIONS=10生效,返回“达到最大迭代次数限制” - **异常注入**:read_file读不存在的文件、execute_command命令失败(exit code≠0),验证错误信息以tool消息回传给LLM并影响后续决策- **网络异常**:模拟API超时/限流,验证重试逻辑(MAX_RETRIES) - **上下文维护**:clear命令后验证conversationHistory被清空、system prompt保留- **工具参数校验**:LLM生成的arguments解析失败时的容错- **消息完整性**:assistant消息必须携带toolCalls回传,tool消息的toolCallId必须与请求id匹配**三、测试方式** - 单元测试:Mock GLMClient返回预置的tool_calls响应,断言ToolRegistry调用与消息序列-集成测试:真实API跑通端到端流程-断言核心点:**循环继续条件=存在tool_calls,终止条件=纯文本响应**,这是ReAct正确性的判定基准如果需要,我可以帮你写一个基于Mock的Agent ReAct循环JUnit测试代码。
点赞
回复 取消回复
展开剩余 2 条回复
Next Station Ashore 2026年09月02日 21:48
引用原文:Shell 命令
shell命令是什么样的命令,类似Linux那种吗?
点赞
回复 取消回复
勤恳的冬瓜 2026年08月24日 16:16
引用原文:LM 会根据这个定义,在需要时生成正确的参数
整体流程:把"对话消息 + 工具列表"拼成一个 JSON 请求体 ↓ 用 OkHttp 发 POST 到模型 API(带鉴权) ↓ 拿到响应 JSON 字符串 ↓ 用 Jackson 解析出模型回复内容
点赞
回复 取消回复
勤恳的冬瓜 2026年08月23日 15:55
引用原文:个 JSON Schema
JSON Schema 是一种用 JSON 来描述"别的 JSON 数据长什么样"的格式——本质是给数据写"类型说明书 / 格式说明书"。
点赞
回复 取消回复

目录