前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我用腾讯混元大模型结合SD和Comfyui的photomaker写了个工具,还写了篇小说

我用腾讯混元大模型结合SD和Comfyui的photomaker写了个工具,还写了篇小说

原创
作者头像
疯狂的KK
修改2024-01-25 17:55:04
3.7K49
修改2024-01-25 17:55:04
举报
文章被收录于专栏:Java项目实战Java项目实战

👉看目录,点收藏

1.官方体验入口

2.上手体验解决需求

3.小说生成改文能力

4.技术开发实践

5.应用前景

6.Photomaker结合修改提示词

7.windows本地一键运行包

8.总结

导读

最近经常有测试和产品同学让我帮忙处理数据,倒不是单纯写SQL,而是面对各种不同类型的数据,需要不通的格式处理,特别是动辄上万的数据,通过文本编辑一眼都望不到头,超过2万,文本编辑工具都卡的不行,手动处理数据效率太低,腾讯混元:看我的~~~

官方体验入口

腾讯混元 (tencent.com)

支持多轮对话,内容创作,逻辑推理,知识增强,多模态,这每个功能在日常工作中的应用简直显而易见,优化代码,生成简易SQL,应有尽有,甚至可以用于视频脚本创作

视频内容

上手体验解决需求

需求一

第一位同事的需求,面对大量数据,想要一次性进行SQL查询,但苦于没有时间和文本工具又响应极其的慢,不得不求助开发同学,现在给到的数据需要每行末尾加一个逗号,且针对数据加字符处理,以便在SQL内直接使用,腾讯混元:看我的~~

提示词:现在你是一位前端程序员,请使用html实现以下功能,给定一个输入框,对输入框内的数据,前后加上英文的单引号,并在末尾加上逗号,最后一行数据不用加逗号,点击生成按钮,输出到输出框内, 示例 输入框数据为

输出结果

代码语言:html
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>前端程序员助手</title>
</head>
<body>
    <h1>前端程序员助手</h1>
    <p>请输入数据:</p>
   <textarea id="inputText" rows="10" cols="50"></textarea>
    

   <button onclick="generate()">生成</button>
    <p>输出结果:</p>
   <textarea id="outputText" rows="10" cols="50" readonly></textarea>
   <script>
        function generate() {
            const inputText = document.getElementById('inputText').value;
            const lines = inputText.split('\n');
            let output = '';
            for (let i = 0; i< lines.length; i++) {
                if (lines[i].trim() !== '') {
                    output += "'" + lines[i].trim() + "',";
                    if (i === lines.length - 1) {
                        output = output.slice(0, -1);
                    }
                    output += '\n';
                }
            }
            document.getElementById('outputText').value = output;
        }
    </script>
</body>
</html>

验证功能完美实现

优化此功能,如果数据量大,不能一次性复制到粘贴板,希望拥有一个复制结果按钮,腾讯混元:看我的~

代码语言:html
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>前端程序员助手</title>
</head>
<body>
    <h1>前端程序员助手</h1>
    <p>请输入数据:</p>
  <textarea id="inputText" rows="10" cols="50"></textarea>
    

  <button onclick="generate()">生成</button>
    <p>输出结果:</p>
  <textarea id="outputText" rows="10" cols="50" readonly></textarea>
   

  <button onclick="copyToClipboard()">复制结果</button>
  <script>
        function generate() {
            const inputText = document.getElementById('inputText').value;
            const lines = inputText.split('\n');
            let output = '';
            for (let i = 0; i< lines.length; i++) {
                if (lines[i].trim() !== '') {
                    output += "'" + lines[i].trim() + "',";
                    if (i === lines.length - 1) {
                        output = output.slice(0, -1);
                    }
                    output += '\n';
                }
            }
            document.getElementById('outputText').value = output;
        }

        function copyToClipboard() {
            const outputText = document.getElementById('outputText');
            outputText.select();
            outputText.setSelectionRange(0, 99999);
            document.execCommand('copy');
        }
   </script>
</body>
</html>

需求二

第二位同事的需求来源于财务同学,他们对于数据的处理通常习惯在XLS表格内处理,但是表格密密麻麻,时间久了难免粗心大意,如何快速找出在数据表格内数据中带有空格或者换行或者回车等非法字符?

提示词:

现在你是一位前端程序员,请使用html实现以下功能,给定一个输入框,对输入框内的数据,校验是否存在空格,换行,或者回车等特殊字符,如果存在,将这条数据标红

需求三

在日常单元测试中,经常需要对测试数据进行拼接,但是数据没有数据源,无法从数据库中查询,只能手动造数据,但是数据结构需要手动填充数据,此时的造数据就是一个需要优化的地方,腾讯混元:看我的~

提示词:现在你是一位前端程序员,请使用html实现以下功能,给定一个输入框,对输入框内的数据,拼接到map里面,第一个数据为map的key,第二个数据为map的v,并输出在输出框,

代码语言:html
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>前端程序员助手</title>
</head>
<body>
    <h1>前端程序员助手</h1>
    <p>请输入数据:</p>
  <textarea id="inputText" rows="10" cols="50"></textarea>
    

  <button onclick="generate()">生成</button>
    <p>输出结果:</p>
  <textarea id="outputText" rows="10" cols="50" readonly></textarea>
  <script>
        function generate() {
            const inputText = document.getElementById('inputText').value;
            const lines = inputText.split('\n');
            let output = '';
            let map = new Map();
            for (let i = 0; i< lines.length; i++) {
                if (lines[i].trim() !== '') {
                    const keyValue = lines[i].split(/\s+/);
                    if (keyValue.length === 2) {
                        const key = keyValue[0];
                        const value = keyValue[1];
                        if (!map.has(key)) {
                            map.set(key, []);
                        }
                        map.get(key).push(value);
                    }
                }
            }
            for (const [key, values] of map.entries()) {
                for (const value of values) {
                    output += `map.put("${key}", "${value}")\n`;
                }
            }
            document.getElementById('outputText').value = output;
        }
    </script>
</body>
</html>

这几个例子全部是前端功能实现,那么日常后端开发中有没有可以用到的呢?

需求四

在日常开发中,对于外部接入的数据,需要转换,因为数据结构的设计不通用,需要将String类型转换为Bigdecimal

但是在此之前,需要判断是否能够转为Bigdecimal,腾讯混元:看我的~~

真是个小机灵鬼,如果出错就不能哈哈哈哈哈哈

代码语言:java
复制
  public static boolean isBigDecimal(String str) {
    try {
      new BigDecimal(str);
      return true;
    } catch (NumberFormatException e) {
      return false;
    }
  }

  public static void main(String[] args) {
    System.out.println(isBigDecimal("123.45")); // true
    System.out.println(isBigDecimal("123.00")); // true
    System.out.println(isBigDecimal("123.00.00")); // false
    System.out.println(isBigDecimal("abc123")); // false
  }

需求五

面对项目中每天的异常和慢响应治理,虽然我们可以选择sonar来治理检查,但是面对历史业务,有些只能从SQL方面入手,那么大数据量的SQL优化,除了已经优化的点,还有没有可能再进行优化呢?腾讯混元:看我的~

先来个简单的练练手~

请问在使用Group By关键字进行分组查询时,是否可以对结果进行排序?

线上实战SQL优化

现在你是一位MYSQL专家,请分析下面的SQL,如何优化,由于隐私原因就不在此放全部SQL

代码语言:sql
复制

explain SELECT
    t.origin_order_code,
    t1.plan_date,
    t.product_code,
    t.product_name,
    sum( t2.plan_qty ) plan_qty,
    SUM( t2.shipped_qty ) shipped_qty,
    IFNULL( sum( t3.qty ), 0 ) qty,
    t.nuclear_goods_num,
    t.update_by,
    t.update_time,
    t.unit 
  FROM
    goods t
    LEFT JOIN order_header t1 ON t.origin_order_code = t1.origin_order_code
    LEFT JOIN order_item t2 ON t1.order_code = t2.order_code 
    AND t.product_code = t2.product_code 
    AND t1.send_location_code = t2.location_code
    LEFT JOIN tainer_detail t3 ON t.origin_order_code = t3.sale_order_code 
    AND t.product_code = t3.product_code 
    AND t.warehouse_code = t3.warehouse_code 
  WHERE
    t.warehouse_code = 'XXX' 
    AND t1.send_location_code = 'XXX' 
    AND t2.location_code = 'XXX' 
  GROUP BY
    t.origin_order_code,
  t.product_code ;

分析结论

  1. 大表做关联查询时,要保证关联字段存在索引。如果没有索引,join关联查询效率会极低
  2. 绝大部分慢查询优化,降低主查询的扫描行数(修改sql查询逻辑,修改业务查询逻辑)

例:调整预计送货时间查询条件必填,降低主查询扫描行数

  1. 单表查询,对新加字段数据量过大情况,如果未增加索引,同样会引发慢查询场景
代码语言:sql
复制
首先,我们可以通过查看EXPLAIN的结果来分析这个SQL查询的性能。EXPLAIN会显示MySQL如何执行查询,包括使用的索引、表连接方式等信息。

EXPLAIN SELECT
    t.origin_order_code,
    t1.plan_date,
    t.product_code,
    t.product_name,
    sum( t2.plan_qty ) plan_qty,
    SUM( t2.shipped_qty ) shipped_qty,
    IFNULL( sum( t3.qty ), 0 ) qty,
    t.nuclear_goods_num,
    t.update_by,
    t.update_time,
    t.unit 
  FROM
    goods t
    LEFT JOIN order_header t1 ON t.origin_order_code = t1.origin_order_code
    LEFT JOIN order_item t2 ON t1.order_code = t2.order_code 
    AND t.product_code = t2.product_code 
    AND t1.send_location_code = t2.location_code
    LEFT JOIN tainer_detail t3 ON t.origin_order_code = t3.sale_order_code 
    AND t.product_code = t3.product_code 
    AND t.warehouse_code = t3.warehouse_code 
  WHERE
    t.warehouse_code = 'XXX' 
    AND t1.send_location_code = 'XXX' 
    AND t2.location_code = 'XXX' 
  GROUP BY
    t.origin_order_code,
  t.product_code ;
根据EXPLAIN的结果,我们可以分析出以下优化建议:

为goods表的warehouse_code、origin_order_code和product_code列创建索引,以加快WHERE子句和GROUP BY子句的执行速度。

ALTER TABLE goods ADD INDEX idx_warehouse_code (warehouse_code);
ALTER TABLE goods ADD INDEX idx_origin_order_code (origin_order_code);
ALTER TABLE goods ADD INDEX idx_product_code (product_code);
为order_header表的send_location_code和origin_order_code列创建索引,以加快WHERE子句和JOIN操作的执行速度。
ALTER TABLE order_header ADD INDEX idx_send_location_code (send_location_code);
ALTER TABLE order_header ADD INDEX idx_origin_order_code (origin_order_code);
为order_item表的location_code、product_code和order_code列创建索引,以加快JOIN操作的执行速度。
ALTER TABLE order_item ADD INDEX idx_location_code (location_code);
ALTER TABLE order_item ADD INDEX idx_product_code (product_code);
ALTER TABLE order_item ADD INDEX idx_order_code (order_code);
为tainer_detail表的warehouse_code、product_code和sale_order_code列创建索引,以加快JOIN操作的执行速度。
ALTER TABLE tainer_detail ADD INDEX idx_warehouse_code (warehouse_code);
ALTER TABLE tainer_detail ADD INDEX idx_product_code (product_code);
ALTER TABLE tainer_detail ADD INDEX idx_sale_order_code (sale_order_code);
考虑将LEFT JOIN操作替换为INNER JOIN操作,如果可能的话。这将减少查询结果集的大小,从而提高查询性能。
如果可能,尝试将查询分解为多个子查询或使用临时表来减少数据处理的复杂性。
请注意,这些优化建议可能会根据实际数据表结构和查询需求而有所不同。在应用这些建议之前,请确保备份数据库并对查询进行充分测试,以确保优化后的查询仍然能够返回正确的结果。

小说生成改文能力

2222年,是人类在地球上的最后一个时代。在这个科技高度发达的时代,人类创造了无数惊人的科技成果,但也承受着地球逐渐枯竭的资源带来的恶果。

太阳已经开始步入红巨星阶段,地球表面的温度逐渐升高,海平面不断上升,气候变化无常,生物大量灭绝。人类为了生存,不得不放弃地球,乘坐宇宙飞船前往太空寻找新的家园。

在这个过程中,出现了一位名叫艾伦的天才科学家。他在研究宇宙的过程中,发现了一个名为“诺瓦”的星球,这个星球的环境与地球十分相似,有望成为人类的新家园。然而,诺瓦星球距离地球数百光年,以现有的科技水平,人类无法在有限的时间内到达。

为了实现人类的重生,艾伦带领团队开展了一项名为“时光穿越”的研究项目。他们试图通过时光穿越技术,将人类的意识传输到诺瓦星球,实现人类在诺瓦星球的“重生”。

经过多年的努力,艾伦团队终于发明了名为“意识穿梭器”的装置,可以将人类的意识传输到诺瓦星球。然而,这项技术的测试需要一个志愿者。志愿者的意识将被永久地留在诺瓦星球,无法回到地球。

艾伦的妻子,艾米,是一个勇敢的女子。她知道这项技术的风险,但还是义无反顾地成为了志愿者。她说:“为了人类的未来,我愿意做出牺牲。”在艾伦的泪眼中,艾米的意识被传输到了诺瓦星球。

艾伦带着团队的成员继续优化意识穿梭器。在他们的努力下,意识穿梭器的传输速度越来越快,人类可以在诺瓦星球的意识中停留的时间也越来越长。

终于,地球的环境恶化到了极点。人类不得不启动“诺亚方舟计划”,乘坐宇宙飞船离开地球。在艾伦的指引下,人们开始通过意识穿梭器前往诺瓦星球。

然而,诺瓦星球并不像地球那样容易适应。人类的身体在诺瓦星球上产生了各种不适,许多人因此生病甚至死亡。艾伦意识到,他们需要找到一种方法,让人类的身体在诺瓦星球上生存下来。

在一次实验中,艾伦发现了一种名为“诺瓦因子”的物质,可以让人类的身体适应诺瓦星球的环境。然而,诺瓦因子只在诺瓦星球上才有,地球上的资源已经枯竭,无法提取诺瓦因子。

艾伦决定,他要用自己的意识回到过去,找到提取诺瓦因子的方法,让人类在诺瓦星球上生存下来。然而,这样做会让艾伦的意识永远留在过去,无法回到2222年的诺瓦星球。

艾伦没有犹豫,他告诉自己:“为了人类,我别无选择。”他启动了意识穿梭器,将自己的意识送回到了过去。

艾伦的意识回到了一百年前,那时地球的环境还没有恶化。他利用自己的知识,找到了一种提取诺瓦因子的方法,并将这项技术传给了当时的科学家们。

然而,艾伦的意识却无法回到2222年的诺瓦星球。他只能将自己的意识留在过去,通过时光穿梭器,将自己所拥有的知识传递给未来的人类。

在艾伦的帮助下,人类成功提取了诺瓦因子,并制造出了可以让人体适应诺瓦星球的装置。在地球毁灭的那一刻,人类乘坐着宇宙飞船,带着诺瓦因子和装置,前往诺瓦星球。

在诺瓦星球上,人类的身体逐渐适应了诺瓦星球的环境。他们在诺瓦星球上建立了新的文明,延续着人类的希望。

而艾伦的意识,永远留在了一百年前。他用自己的一生,拯救了人类,让人类得以在诺瓦星球上生存下来。他的英勇事迹,成为了人们口中的传奇,永远留在了人类的历史中。

技术开发实践

数据准备-->模型训练-->模型优化-->部署与测试

应用前景

Photomaker结合修改提示词

这个项目主要是为了生成写实人像的哈,虽然能处理非写实的数据,但是生成的图还是针对写实人像的

文本到图像生成的最新进展在合成基于给定文本提示的逼真人类照片方面取得了显着进展。 然而,现有的个性化生成方法无法同时满足高效率、有前途的身份(ID)保真度和灵活的文本可控性要求。 在这项工作中,我们介绍了PhotoMaker,这是一种高效的个性化文本到图像生成方法,它主要将任意数量的输入ID图像编码到堆栈ID嵌入中,以保存ID信息。 这样的嵌入,作为统一的ID表示,不仅可以全面封装同一输入ID的特征,还可以容纳不同ID的特征,以便后续集成。 这为更有趣和更实用的应用铺平了道路。 此外,为了推动PhotoMaker的训练,我们提出了一个面向ID的数据构建管道来组装训练数据。 在通过拟建管道构建的数据集的滋养下, 与基于测试时微调的方法相比,我们的 PhotoMaker 具有更好的 ID 保留能力,但可显著提高速度、获得高质量的生成结果、强大的泛化能力和广泛的应用。

我们的方法将相同身份的几个输入图像转换为堆叠的 ID 嵌入。 这种嵌入可以看作是要生成的 ID 的统一表示。 在推理阶段,构成堆叠 ID 嵌入的图像可以来自不同的 ID。 然后,我们可以在不同的上下文中合成自定义的 ID。

我们首先分别从文本编码器和图像编码器中获取文本嵌入和图像嵌入。 然后,我们通过合并相应的类嵌入(例如,男人和女人)和每个图像嵌入来提取融合嵌入。 接下来,我们沿长度维度连接所有融合嵌入,形成堆叠 ID 嵌入。 最后,我们将堆叠的 ID 嵌入提供给所有交叉注意力层,以便自适应地合并扩散模型中的 ID 内容。 需要注意的是,虽然我们在训练时使用了相同ID和遮罩背景的图像,但我们可以直接输入不同ID的图像,而不会出现背景失真,从而在推理过程中创建一个新的ID。

这里我理解的自定义的 ID和保持一致的id就可以理解为SD中的种子,seed值最能够定义图片的范围和图像,结合以前出的ipadapter即可实现图像风格和人脸迁移,seed值是我们再AI绘画中比较和交换的起点,SD会以seed值为中心,将其周围的像素进行扩散或模糊处理。这里的seed值可以是一个像素点、一个区域或者整幅图像。

windows本地一键运行包

代码语言:html
复制
https://pan.quark.cn/s/d282f4a86c91#/list/share

那么我们了解一下官方的提示词语法

对于风格化,您可以使用我们的其他渐变演示PhotoMaker风格。

❗️❗️❗️[重要]个性化步骤:

1.️⃣ 上载您要自定义的某人的图像。一张图片可以,但越多越好。虽然我们不进行人脸检测,但上传图像中的人脸应该占据图像的大部分。

2.️⃣ 输入文本提示,确保在要自定义的类单词后面加上触发词:img,例如:man img或woman img或girl img。

3.️⃣ 选择您喜欢的样式模板。

4.️⃣ 单击“提交”按钮开始自定义。

我们平时写提示词时不可能回家这个特殊触发词,但是如果我们不加,实测肯定会报错的,那么就根据这个特性,我们怎么快速的加一个触发词呢?腾讯混元:看我的~~

代码语言:html
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Image Trigger</title>
</head>
<body>
   <input type="text" id="input-text" placeholder="请输入文本">
   <button id="convert-button">转换</button>
    <p id="output-text"></p>

   <script>
        const inputText = document.getElementById("input-text");
        const convertButton = document.getElementById("convert-button");
        const outputText = document.getElementById("output-text");

        convertButton.addEventListener("click", function() {
            const inputWords = inputText.value.split(/\s+/);
            const updatedWords = inputWords.map(word => {
                if (word === "man" || word === "woman" || word === "girl" || word === "boy") {
                    return word + " img";
                } else {
                    return word;
                }
            });

            outputText.textContent = updatedWords.join(" ");
        });
    </script>
</body>
</html>

复制这段代码,保存到桌面,以.html结尾

优化页面样式

测试功能

总结

深度的测试了腾讯混元大模型在实际工作,生活中快速提高生产力的功能,整体满意度100%,实实在在的提高了生产效率,结合有效的提示词工程,AI与AI之间的差距始终在于使用的人。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 👉看目录,点收藏
  • 导读
  • 官方体验入口
  • 上手体验解决需求
  • 小说生成改文能力
  • 技术开发实践
  • 应用前景
  • Photomaker结合修改提示词
  • windows本地一键运行包
  • 总结
相关产品与服务
腾讯混元大模型
腾讯混元大模型(Tencent Hunyuan)是由腾讯研发的大语言模型,具备强大的中文创作能力,复杂语境下的逻辑推理能力,以及可靠的任务执行能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档