递归火山软件开发平台

标题: 使用AI来创建火山代码尝试!貌似是可以的,ai为deepseek [打印本页]

作者: shenxuexiong    时间: 2024-10-15 14:09
标题: 使用AI来创建火山代码尝试!貌似是可以的,ai为deepseek
:噜阿噜
先说结果,是成功了!!!:噜阿噜:噜阿噜:噜阿噜
AI厉害了,貌似成功了,
第一步,打开能免费对话的AI,比如deepseek.
第二步,选左上角的代码助手.
第三步,输入框输入如下信息(注意,下面都是编辑框要输入的信息):
已知下面的类似c++代码的自用编程语言,此代码实现了一个线程类,请根据当前代码格式,写一个在Windows下使用api创建窗口的类似代码,自用编程语言的代码为(然后从火山类库中复制了一段代码):<火山程序 类型 = "通常" 版本 = 1 />

类 线程类 <公开 基础类 = 参考对象类 注释 = "  用作封装一个单独的线程." 注释 = "  注意: 当本类对象被销毁(譬如离开其作用域)时,将自动调用本对象的\"停止\"方法通知"
        注释 = "本对象中的线程结束运行并等待对应的\"线程运行\"事件处理方法执行完毕.如果此时对应"
        注释 = "的\"线程运行\"事件处理方法中没有及时检查处理本对象的\"是否需要退出\"方法,程序将进" 注释 = "入死锁状态." 折叠2>
{
    方法 启动 <公开 类型 = 逻辑型 注释 = "启动本对象中的线程,开始执行其\"线程运行\"事件的处理方法." 注释 = "如果线程当前正在运行,将会直接返回真."
            返回值注释 = "成功返回真,失败返回假." @禁止流程检查 = 真>
    参数 堆栈尺寸 <类型 = 整数 注释 = "提供线程所使用的堆栈尺寸,单位字节.为0表示使用默认尺寸." @默认值 = 0>
    {
        @ return (BOOL)data ().Start ((VOL_THREAD_FUNC)@sn<current_class>::sThreadFunc, this, @<堆栈尺寸>);
    }

    方法 是否正在运行 <公开 类型 = 逻辑型 注释 = "返回本对象中的线程是否处于正在运行状态" @嵌入式方法 = "">
    {
        @ (BOOL)@sn<this>.data ().IsRunning ()
    }

    方法 停止 <公开 注释 = "  本方法只能在本对象中线程以外的线程(譬如主线程)中执行,用作通知并等待本对象的对" 注释 = "应\"线程运行\"事件处理方法执行完毕退出."
            注释 = "  为了支持本方法,本对象的对应\"线程运行\"事件处理方法中必须尽可能快地频繁调用本对"
            注释 = "象的\"是否需要退出\"方法,一旦发现该方法返回真,则需要尽快结束执行并返回,否则本方法" 注释 = "将进入死等状态." @嵌入式方法 = "">
    {
        @ @sn<this>.data ().Exit ()
    }

    方法 通知停止 <公开 注释 = "  本方法只能在本对象中线程以外的线程(譬如主线程)中执行,用作通知本对象的对应" 注释 = "\"线程运行\"事件处理方法执行完毕退出."
            注释 = "  本方法与\"停止\"方法不同之处在于,本方法仅仅发出退出通知而不会一直等待其退出." @嵌入式方法 = "">
    {
        @ @sn<this>.data ().PostExitNotify ()
    }

    方法 是否需要退出 <公开 类型 = 逻辑型 注释 = "  本方法只能在本对象的线程(即对应\"线程运行\"事件处理方法)中执行,一旦"
            注释 = "发现本方法返回真,必须尽快结束\"线程运行\"事件处理方法的执行并返回,否" 注释 = "则将导致另一线程中的\"停止\"方法调用进入死等状态."
            返回值注释 = "返回线程是否需要尽快退出" @嵌入式方法 = "">
    参数 最大检查等待时间 <类型 = 整数 注释 = "  指定检查线程退出通知(由\"停止\"或\"通知停止\"方法发出)的最大等待" 注释 = "时间(单位毫秒),为0表示不等待,为-1表示一直等待."
            @默认值 = 10>
    {
        @ (BOOL)@sn<this>.data ().IsNeedExit (@<最大检查等待时间>)
    }

    方法 线程运行 <公开 定义事件 类型 = 整数 注释 = "用户需要接收并处理本事件以执行所需要的功能,该事件处理方法将在一个单独的线程中运行." 注释 = "注意:"
            注释 = "  1. 在本事件的接收处理方法中,必须尽可能快地频繁调用本对象的\"是否需要退出\"方法,"
            注释 = "一旦发现该方法返回真,则需要尽快结束执行并返回,否则将导致另一线程中的\"停止\"方法调用" 注释 = "进入死等状态;"
            注释 = "  2. 在本事件的接收处理方法中不允许对窗口界面直接进行操作,否则可能导致死锁.">

    # @begin
    # @m<DECLARE_DERIVED_REF_OBJECT_CLASS_WITH_DATA> (CVolThread)
    # <> <include>
    # static void sThreadFunc (void* param, volatile const BOOL_P* pblpExit, HANDLE hExitEventOnWindows)  { ((@sn<current_class>*)param)->@<线程运行> (); }
    # void @an<_OnBeforeCleanup> ()  { data ().PostExitNotify (); }
    # <> </include>
    # @end
}





结果,服务器返回成功.下面为代码,厉害了,太猛了,我在做梦吗?:

根据你提供的自用编程语言的代码格式,以下是一个在 Windows 下使用 API 创建窗口的类似代码示例。这个示例展示了如何使用 Windows API 创建一个简单的窗口,并处理窗口消息。

xml
复制
<火山程序 类型 = "通常" 版本 = 1 />

类 窗口类 <公开 基础类 = 参考对象类 注释 = "  用作封装一个窗口." 折叠2>
{
    方法 创建窗口 <公开 类型 = 逻辑型 注释 = "创建一个窗口."
            返回值注释 = "成功返回真,失败返回假." @禁止流程检查 = 真>
    参数 窗口标题 <类型 = 文本型 注释 = "窗口的标题." @默认值 = "我的窗口">
    参数 窗口宽度 <类型 = 整数 注释 = "窗口的宽度." @默认值 = 800>
    参数 窗口高度 <类型 = 整数 注释 = "窗口的高度." @默认值 = 600>
    {
        @ return (BOOL)data ().CreateWindow (@<窗口标题>, @<窗口宽度>, @<窗口高度>);
    }

    方法 显示窗口 <公开 注释 = "显示窗口." @嵌入式方法 = "">
    {
        @ @sn<this>.data ().ShowWindow ()
    }

    方法 销毁窗口 <公开 注释 = "销毁窗口." @嵌入式方法 = "">
    {
        @ @sn<this>.data ().DestroyWindow ()
    }

    方法 窗口消息处理 <公开 定义事件 类型 = 整数 注释 = "用户需要接收并处理本事件以执行所需要的功能,该事件处理方法将在窗口消息循环中运行." 注释 = "注意:"
            注释 = "  1. 在本事件的接收处理方法中,必须尽可能快地处理窗口消息;"
            注释 = "  2. 在本事件的接收处理方法中不允许对窗口界面直接进行操作,否则可能导致死锁.">

    # @begin
    # @m<DECLARE_DERIVED_REF_OBJECT_CLASS_WITH_DATA> (CVolWindow)
    # <> <include>
    # static LRESULT CALLBACK WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)  {
    #     @sn<current_class>* pThis = (@sn<current_class>*)GetWindowLongPtr (hwnd, GWLP_USERDATA);
    #     if (pThis) {
    #         return pThis->@<窗口消息处理> (hwnd, uMsg, wParam, lParam);
    #     }
    #     return DefWindowProc (hwnd, uMsg, wParam, lParam);
    # }
    # BOOL CreateWindow (const char* title, int width, int height) {
    #     WNDCLASS wc = {0};
    #     wc.lpfnWndProc = WindowProc;
    #     wc.hInstance = GetModuleHandle (NULL);
    #     wc.lpszClassName = "VolcanoWindowClass";
    #     RegisterClass (&wc);
    #     HWND hwnd = CreateWindowEx (
    #         0, "VolcanoWindowClass", title, WS_OVERLAPPEDWINDOW,
    #         CW_USEDEFAULT, CW_USEDEFAULT, width, height,
    #         NULL, NULL, GetModuleHandle (NULL), NULL
    #     );
    #     if (hwnd) {
    #         SetWindowLongPtr (hwnd, GWLP_USERDATA, (LONG_PTR)this);
    #         return TRUE;
    #     }
    #     return FALSE;
    # }
    # void ShowWindow () {
    #     ShowWindow (hwnd, SW_SHOW);
    # }
    # void DestroyWindow () {
    #     DestroyWindow (hwnd);
    # }
    # <> </include>
    # @end
}
运行 HTML
解释
类定义:

定义了一个名为 窗口类 的类,继承自 参考对象类。

方法定义:

创建窗口:用于创建一个窗口,并返回创建是否成功。

显示窗口:用于显示已创建的窗口。

销毁窗口:用于销毁已创建的窗口。

窗口消息处理:定义了一个事件,用户需要接收并处理该事件以执行窗口消息处理功能。

嵌入式代码:

使用 DECLARE_DERIVED_REF_OBJECT_CLASS_WITH_DATA 宏定义了一个 CVolWindow 类。

WindowProc:定义了一个窗口过程函数,用于处理窗口消息。

CreateWindow:使用 Windows API 创建一个窗口,并设置窗口过程函数。

ShowWindow:显示窗口。

DestroyWindow:销毁窗口。

总结
定义了一个 窗口类,用于封装窗口的创建、显示和销毁功能。

使用 Windows API 创建窗口,并处理窗口消息。

用户需要实现 窗口消息处理 事件以处理窗口消息。

这样,你就可以在自用编程语言中使用类似 C++ 的代码格式,实现一个在 Windows 下创建窗口的功能。

作者: shenxuexiong    时间: 2024-10-15 14:10
AI网址为这个,https://chat.deepseek.com/coder
这不是广告,这是主题相关内容.

我在做梦吗?
作者: shenxuexiong    时间: 2024-10-15 14:19
:噜阿噜
如此看来,AI是能写火山代码的,如果不能,那一定是AI不够强大,或者自己的姿势不对!!!
作者: shenxuexiong    时间: 2024-10-15 15:12
运行起来有点难,得自己想!!!
作者: 穗玉天涯    时间: 2024-10-15 15:43
厉害了,厉害了
作者: cxz7411    时间: 2024-10-15 17:00
望吴总将AI集成到IDE中去,以后写代码就是一句话的事了.
作者: 呵呵仙8    时间: 2024-10-15 18:00
AI自动封库?
作者: 2767944492    时间: 2024-10-15 18:07
火山兼容原生是成本最低的接入AI的方式,生成原生代码就能嵌入;如果生成火山代码,就要经济成本了。
作者: 创世魂    时间: 2024-10-15 21:52
2767944492 发表于 2024-10-15 18:07
火山兼容原生是成本最低的接入AI的方式,生成原生代码就能嵌入;如果生成火山代码,就要经济成本了。 ...

问题是没钱来训练大模型。。这玩意烧钱。不是随便买两个显卡就行的。
作者: 2767944492    时间: 2024-10-16 00:40
本帖最后由 2767944492 于 2024-10-16 00:47 编辑
创世魂 发表于 2024-10-15 21:52
问题是没钱来训练大模型。。这玩意烧钱。不是随便买两个显卡就行的。

设备不是问题,又不是从零开始自己跑模型、本地训练。文心一言、通义千问、智谱ai、openai等等大厂一般都提供在线训练微调平台(在对应模型的开放平台中有入口),基于他们的模型平台扔数据集进去,就可以在线训练;调用也是通过api接口的方式;因此,训练、使用完全不需要基于自己的服务器(自己的服务器就是起到中转站的作用),这种方式已经把训练、部署的金钱成本降到很低了;所以,真正的难点在于,谁来整理数据集、整理哪些数据集,火山现在的资源很零散、文档也存在些问题,这可需要花大功夫和精力整理成规范化的数据集;由于完全不用基于自己的机器,所以优劣点也很明显,优点是对服务器没啥要求(在线训练、接口方式调用、不需要本地训练和本地部署),缺点就是每次调用都会产生调用的费用(这个费用可以向需要使用ai写代码的用户收取)。
作者: ywl    时间: 2024-10-16 19:46
2767944492 发表于 2024-10-16 00:40
设备不是问题,又不是从零开始自己跑模型、本地训练。文心一言、通义千问、智谱ai、openai等等大厂一般都 ...

这不现实,持续烧钱要多久才能训练初步效果,没有几百万次以上,初步效果都没有
作者: 2767944492    时间: 2024-10-16 21:04
ywl 发表于 2024-10-16 19:46
这不现实,持续烧钱要多久才能训练初步效果,没有几百万次以上,初步效果都没有 ...

帖主通过对话的方式都能够让ai写出初步、简单的火山代码,通过在线平台喂数据实际上也是“通过大量的对话进行学习”(即输入数据集训练),整个训练过程不涉及写模型代码、不涉及到本地搭建,都是基于大厂已经提供好的模型进行在线训练,只需要提供整理好的数据集。效果取决于喂的数据集质量,就如向ai提问一样,需求、问题都说不清楚,当然获取的答案就不准确、不满意,因此也衍生出了提示词工程,很多**虽然它自己并没有制作模型的能力,但是基于这种“技术”,可以将模型快速运用到自己的产品(比如,大学搜题酱app,一个搜题软件,通过提示词赋与其ai解题的功能)。因此,首先数据集要保证质量,举个例子,肯定不能将某个项目的整个源码直接作为数据集,因为模型一开始是不认识火山代码的,我们需要将这个项目中一个个细小功能的实现代码进行拆分,将单独的小功能整理成对话的形式,并解释每一行火山代码的含义,如此海量的小对话组成庞大的数据集,将这样的数据集喂的模型训练才行。所以我才说,难点在于数据集的整理,而训练、部署这些涉及到代码层面的繁琐步骤全部都可以基于大厂的在线平台,这些部分是不需要自己从头开始做的。
作者: 2767944492    时间: 2024-10-16 21:37
ywl 发表于 2024-10-16 19:46
这不现实,持续烧钱要多久才能训练初步效果,没有几百万次以上,初步效果都没有 ...

文心一言的在线训练好像是按数据集量和迭代次数进行收费,那就取决于数据集的量了,普通的小数据集训练微调也就几百块钱,其实相比于自己用开源项目跑模型来说成本已经很低了。想让ai写火山代码就得主动去整理数据集训练了,毕竟“小众”编程软件,大厂不会主动关注的。或者,ai生成原生代码,火山本身利用好嵌入代码和原生语言丰富资源的优势,让用户更容易将原生代码在火山中调用,这也是在火山中利用ai写代码的一种方式,但这就需要一点原生语言的基础了。
作者: 韦贝贝    时间: 2024-10-21 19:18
创世魂 发表于 2024-10-15 21:52
问题是没钱来训练大模型。。这玩意烧钱。不是随便买两个显卡就行的。

把训练的做成客户端后期按照训练次数给使用次数
作者: shuimiao    时间: 2024-10-21 19:45
这些吴总搞不了,因为没有这个关注维度,也没有时间精力。也许忙完这几年,准备关注的时候,已经不需要了,因为到时候直接让ai自己阅读本地电脑目录里的所有文档,让ai自己学,不需要你去整理数据投喂了




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4