William A

最新文章

命令行覆盖刷新输出

命令行覆盖刷新输出的效果如下图。 覆盖刷新的原理:删除已输出字符(用空白字符屏蔽),重新输出新字符。 删除字符需要用到一个特殊字符\b退格符。注意:在很多语言里语言\b退格符跟键盘上的 Backspace 键不太一样,退格符仅仅是回退,并不会删除字符,因此回退后还需要使用一个空白字符覆盖原有字符,才能完成覆盖刷新功能。示例如下: // go 1.16 package main import ( …

在 PHP 中使用协程进行协同多任务处理

未完待续 翻译自Cooperative multitasking using coroutines (in PHP!) PHP 5.5 最大新特性之一就是支持生成器和协程。(注:官方)文档和大量的博客文章已经对生成器进行了充分的说明(像这篇以及这篇)。相反,协程受到的关注则相对较少。这是因为协程更加强大以及更难理解和解释。 我希望本文可以通过使用协程实现一个任务调度器来引导你,使你感受到它的作用。 …

在 PHP 中模拟 Go 语言的 defer 语句

看到一个很有意思的项目 https://github.com/php-defer/php-defer,这个项目只用了10行左右的代码就实现了Go语言中的defer,看来灵活运用数据结构还是很重要的。项目源码如下: <?php function defer(?SplStack &$context, callable $callback): void { $context ??= new …

在汇编中重新认识函数

一个简单的 8086 汇编子程序(函数)。 assume cs:code code segment main: mov ax, 1000h call add1 mov ax, 4c00h int 21h add1: add ax, 1 ret code ends end main 标号main可以简单地理解为 C 语言中的 main 函数等入口函数; 标号add1是函数 add1 的地址; 指令 …

大模型使用工具的能力怎么来的

大模型会提供一个叫Tool Calls(也有的叫Function Calls)的功能,看起来很神奇,实际上就是LLM根据对话内容提取出需要使用的工具及其参数,再将其以结构化的形式返回给客户端,客户端通过响应的内容判断是否存在“使用工具”这个操作,如果存在,则从中获取所需使用的“工具名”及“参数”来使用工具。 看以下python写的一个示例。 import json import os import …