通过实例学习Virtools脚本语言VSL - 解析字符串

通过实例学习Virtools脚本语言VSL - 解析字符串

该习题演示解析字符串及用字符串中包含的信息填充数组(Array)。

  1. 开始一个新的作品并创建一个数组(Array),把数组重命名为 "Players",并添加三个列(column),名称分别为:NickNames - String、Age - Integer、Score - Integer。

  2. 在Level下创建新脚本,并添加一个Run VSL BB。在VSL Script Manager中添加两个pIn。第一个pIn重命名为"data",类型设为String;第二个pIn重命名为"array",类型设为Array。

  3. 切换到代码编辑器,编写如下代码:

void main()
{
    // 清空数组中的所有数据
    array.Clear();

    // 创建第一个tokenizer来逐行读取数据
    str tokenLine = null;
    StringTokenizer tokenizerLine(data.CStr(), ".");

    int row = 0;

    // 逐行获取数据
    while (tokenLine = tokenizerLine.NextToken(tokenLine))
    {
        // 每次读取一行后,添加一行到数组中
        array.AddRow();

        // 创建第二个tokenizer来逐词读取每一行的数据
        str tokenWord = null;
        StringTokenizer tokenizerWord(tokenLine, ",");

        int column = 0;

        // 逐词获取数据
        while (tokenWord = tokenizerWord.NextToken(tokenWord))
        {
            // 插入数据到数组中
            array.SetElementStringValue(row, column, tokenWord);
            ++column;
        }

        ++row;
    }
}
  1. 编译并运行VSL脚本。确认数组中的内容如下:

你可以看到,"Jane", "Pierre" 和 "John"这几个名字提取得不是很好,它们都以一个换行符开始(非打印换行符以一个小盒子的样子显示)。为了移除这个额外的字符,你需要给VSL脚本添加一个移除换行符的函数。下面的代码应该能完成这个任务:

void RemoveFirstReturnCharacter(String str2clear)
{
    // 如果字符串的第一个字符是'/n'...
    if (str2clear[0] == '/n')
        // ...则从第二个字符开始裁剪字符串到末尾
        str2clear = str2clear.Crop(1, str2clear.Length()-1);
}
  1. 修改你的代码,要包括上面的函数。你的代码现在应该是像这个样子:
void main()
{
    // 清空数组中的所有数据
    array.Clear();

    // 创建第一个tokenizer来逐行读取数据
    str tokenLine = null;
    StringTokenizer tokenizerLine(data.CStr(), ".");

    int row = 0;

    // 逐行获取数据
    while (tokenLine = tokenizerLine.NextToken(tokenLine))
    {
        // 每次读取一行后,添加一行到数组中
        array.AddRow();

        // 创建第二个tokenizer来逐词读取每一行的数据
        str tokenWord = null;
        StringTokenizer tokenizerWord(tokenLine, ",");

        int column = 0;

        // 逐词获取数据
        while (tokenWord = tokenizerWord.NextToken(tokenWord))
        {
            // 移除字符串中的换行符(如果存在)
            String strToClear = tokenWord;
            RemoveFirstReturnCharacter(strToClear);

            // 插入数据到数组中
            array.SetElementStringValue(row, column, strToClear.CStr());
            ++column;
        }

        ++row;
    }
}
  1. 编译并运行你的VSL脚本。现在,你的数组应该看起来好多了。

通过以上步骤,你可以成功解析字符串并将数据填充到数组中,并移除不必要的换行符。

Read more

使用本地大模型调用代码,根本就是一场骗局!

使用本地大模型调用代码,根本就是一场骗局!

通过大模型调用其他工具到底可不可行?ChatGPT 或许能轻松搞定一切,但同样的需求落在本地大模型上,恐怕就要打个问号了。 法国开发工程师 Emilien Lancelot 尝试了多款号称具备工具调用功能的 agent 框架,来看看本地大模型到底能不能完成任务,但结果就像他总结的“一无所获”。是什么让这位工程师失望了? 用 AutoGPT,得会点“糊弄学” AutoGPT 是款貌似强大的框架,提供很酷的 CLI 外加 Flutter UI,能够通过浏览器创建 agent。其主要功能是处理用户的文档、音频、视频等本地内容。 但是……它主要依靠 ChatGPT 或其他专有大模型服务来完成繁重工作,至少给我们的感觉是如此。 我们必须“唬弄”AutoGPT 才能使用 Ollama 端点,让其误认为是 ChatGPT。 ## OPENAI_API_KEY - OpenAI API

By Ne0inhk
详细说明Encoder-only架构的特点以及他和encoder decoder的区别和联系

详细说明Encoder-only架构的特点以及他和encoder decoder的区别和联系

Poe Encoder-only 架构的特点 Encoder-only 模型只使用 Transformer 的编码器部分,专注于对输入序列的理解和表征学习。这类模型通常被用在需要对输入文本进行深度理解的任务上,如文本分类、问答和语义匹配。以下是 Encoder-only 架构的核心特点: 1. 双向上下文建模 * 特点:Encoder-only 模型通过自注意力机制(Self-Attention)同时关注输入序列的前后文。 * 优势:相比单向模型(如 Decoder-only),它可以更全面地捕捉输入序列的全局语义,适合需要理解复杂上下文的任务。 * 实现方式:在训练过程中,不对输入序列进行因果掩码(Causal Masking),允许模型在任何位置访问序列的所有位置。 * 例子:BERT 的 Masked Language Model(MLM)训练任务通过随机遮盖部分单词,依赖左侧和右侧的信息来预测被遮盖的词,即双向建模的典型体现。 2. 适用于理解任务 * 特点:Encoder-only 模型专注于理解输入序列,而不生成输出序列,因此适合处理分类、

By Ne0inhk
手把手教学,DeepSeek-R1微调全流程拆解

手把手教学,DeepSeek-R1微调全流程拆解

手把手教学,DeepSeek-R1微调全流程拆解 原创 极客见识  2025年02月09日 09:02 广东 DeepSeek 通过发布其开源推理模型 DeepSeek-R1 颠覆了 AI 格局,该模型使用创新的强化学习技术,以极低的成本提供与 OpenAI 的 o1 相当的性能。 更令人印象深刻的是,DeepSeek 已将其推理能力提炼成几个较小的模型。这篇文章,我们将使用其蒸馏版本之一引导大家完成 DeepSeek-R1 的整个微调过程。 本文章将演示了如何微调其中一个模型(使用我们自己的自定义思维链数据集),然后保存和部署微调后的模型。 高级推理模型微调 DeepSeek 简介 DeepSeek-R1 是由深度求索(DeepSeek)公司开发的突破性推理模型。DeepSeek-R1 基于 DeepSeek-V3-Base(总共 671B 个参数,每次推理 37B 处于活动状态)构建,使用强化学习 (RL) 在提供最终答案之前生成思路链

By Ne0inhk