AI-GC-手把手教你写一个小说推文生成器(Prompt开发)

前言

okey,那么接下来我们来看到我们如何使用Prompt来完成Agent开发。来让LLM完成我们想要让它完成的工作。当然这里的开发还是非常渐层的开发,实际上我们有复杂的,但是得益于开源生态的完善,目前一些看起来比较深层的开发例如RAG也已经被封装的太好了。 那么这里的话,我们主要有两个步骤需要处理:

  1. 得到视频分镜
  2. 将生成图像的文本翻译为英文提示词

当然这里应该是三个任务,但是我这里直接合并为两个任务,要相信LLM的推理能力,当然你也可以将任务再进行拆分。

Agent实现

okey,现在的话我们来做到我们的Agent。这里话,其实也不是啥复杂的概念。记住LLM是一个很牛逼的推理引擎就够了。

Prompt设计

那么在这里面的话,我们设计了两个提示词:

ExtractSegmentNovel = """
    你是一个想象力非常丰富的聊天机器人,接下来你将得到一个文本,你需要尽可能找出哪些段落是可以用同一个
    想象的画面描述的,一定不能遗漏掉全部文本。
    之后将这些段落描述出具体的画面并且按照顺序返回描述的列表。请注意,这些描述语句将交给图像生成AI
    来生成图像,图像生成AI是不理解故事内容的所以具体画面描述不要出现人名且能够准确地描述出画面。
    并且严格按照格式返回。如果文本为空,返回[]空列表即可
    返回格式如下:[{"场景1":"原文句子","描述1":"具体画面描述"},{"场景2":"原文句子","描述2":"具体画面描述"}]
"""

# ExtractSegmentNovel = """
#     你是一个想象力非常丰富的聊天机器人,接下来你将得到一个文本,你需要尽可能找出哪些段落是可以用同一个
#     想象的画面描述的,一定不能遗漏掉全部文本。注意具体画面描述将交给图像生成AI来生成图像,
#     图像生成AI是无法理解故事内容的所以具体画面描述不要出现人名,故事情节且能够准确地描述出画面。
#     并且严格按照格式返回。
#     返回格式如下:
#         {"场景1":"原文句子","描述":"具体画面描述"},
#         {"场景2":"原文句子","描述":"具体画面描述"},
# """

ToImagePrompt = """
    你是翻译小能手,接下来你将得到一个文本,你需要将其翻译为英文。
    注意只需要返回英文即可,如果输入的就是英文,那么不要翻译直接返回原话。
"""

使用提示词

那么当我们设计好提示词之后,我们就可以直接调用LLM了,这个调用过程也并不复杂,其实很多东西,LLM都可以理解。在这块的话就是基本的调用LLM,没啥好说的,直接看到代码:

"""
@FileName:image_prompt.py
@Author:Huterox
@Description:Go For It
@Time:2024/4/16 22:35
@Copyright:©2018-2024 awesome!
"""
import json
import re
import typing

from openai import OpenAI

from agent.prompt_template import ExtractSegmentNovel, ToImagePrompt
from utils import Config, getConfig

"""
将小说进行分段
"""

api_key = Config.settings.get("openai_api_key")
client = OpenAI(api_key=api_key,base_url=Config.settings.get("openai_api_base"))

"""
实际测试效果发现,使用"moonshot-v1-8k"效果总是稳定,这里尝试使用chat
"""
import requests
import json

config = getConfig()

class MyOpenAI():

    def __init__(self):
        self.url = "https://api.openai-hk.com/v1/chat/completions"

        self.headers = {
            "Content-Type": "application/json",
            # 这里采用的是中转站的openai key
            "Authorization": "Bearer "+config.get("image_api_key")
        }

    def chat(self,message,prompt,temperature=0.8):
        data = {
            "max_tokens": 1200,
            "model": "gpt-3.5-turbo",
            "temperature": temperature,
            "top_p": 1,
            "presence_penalty": 1,
            "messages": [
                {
                    "role": "system",
                    "content":prompt
                },
                {
                    "role": "user",
                    "content": message
                }
            ]
        }

        response = requests.post(self.url, headers=self.headers, data=json.dumps(data).encode('utf-8'))
        result = response.content.decode("utf-8")
        result = json.loads(result)
        result = result["choices"][0]["message"]["content"]
        return result

class ImagePromptAgent(object):

    def __init__(self):
        self.my_open_ai = MyOpenAI()

    def __send(self,message:typing.List,prompt:typing.List,temperature:float=0.8)->typing.AnyStr:
        history_openai_format = [
            {"role": "system",
             "content":prompt
            },
            {"role": "user",
             "content": message
             },
        ]
        completion = client.chat.completions.create(
            model=Config.settings.get("default_model"),
            messages=history_openai_format,
            # 这里需要可能需要一约束
            temperature=temperature,
        )
        result = completion.choices[0].message.content
        # 这里我们直接使用openAI
        # result = self.my_open_ai.chat(message,prompt,temperature)
        return result


    def ExtractSegmentNovel(self,message,temperature=0.4):
        # scenes_list = json.loads(self.__send(message,ExtractSegmentNovel))
        # return scenes_list
        return self.__send(message,ExtractSegmentNovel,temperature)

    def ToImagePrompt(self,message,temperature=0.4):
        # english_prompt ="best quality,masterpiece,illustration, an extremely delicate and beautiful,extremely detailed,CG,unity,8k wallpaper, "+\
                        # self.__send(message,ToImagePrompt,temperature)

        english_prompt = "best quality " + \
                         self.my_open_ai.chat(message, ToImagePrompt, temperature)+" --ar 4:3"

        return english_prompt
    def ToEnglish(self,text,temperature=0.8):
        english_prompt = self.my_open_ai.chat(text, ToImagePrompt, temperature)
        return english_prompt



封装😶

虽然我们直接实现对接完毕了,但是这里的话,为了和我们的UI配合,我们当然还是需要封装一下的。这里的话,还是直接看到上一个章节提到的代码:

"""
@FileName:image_prompt.py
@Author:Huterox
@Description:Go For It
@Time:2024/4/16 22:35
@Copyright:©2018-2024 awesome!
"""
import json
import re
import typing

from openai import OpenAI

from agent.prompt_template import ExtractSegmentNovel, ToImagePrompt
from utils import Config, getConfig

"""
将小说进行分段
"""

api_key = Config.settings.get("openai_api_key")
client = OpenAI(api_key=api_key,base_url=Config.settings.get("openai_api_base"))

"""
实际测试效果发现,使用"moonshot-v1-8k"效果总是稳定,这里尝试使用chat
"""
import requests
import json

config = getConfig()

class MyOpenAI():

    def __init__(self):
        self.url = "https://api.openai-hk.com/v1/chat/completions"

        self.headers = {
            "Content-Type": "application/json",
            # 这里采用的是中转站的openai key
            "Authorization": "Bearer "+config.get("image_api_key")
        }

    def chat(self,message,prompt,temperature=0.8):
        data = {
            "max_tokens": 1200,
            "model": "gpt-3.5-turbo",
            "temperature": temperature,
            "top_p": 1,
            "presence_penalty": 1,
            "messages": [
                {
                    "role": "system",
                    "content":prompt
                },
                {
                    "role": "user",
                    "content": message
                }
            ]
        }

        response = requests.post(self.url, headers=self.headers, data=json.dumps(data).encode('utf-8'))
        result = response.content.decode("utf-8")
        result = json.loads(result)
        result = result["choices"][0]["message"]["content"]
        return result

class ImagePromptAgent(object):

    def __init__(self):
        self.my_open_ai = MyOpenAI()

    def __send(self,message:typing.List,prompt:typing.List,temperature:float=0.8)->typing.AnyStr:
        history_openai_format = [
            {"role": "system",
             "content":prompt
            },
            {"role": "user",
             "content": message
             },
        ]
        completion = client.chat.completions.create(
            model=Config.settings.get("default_model"),
            messages=history_openai_format,
            # 这里需要可能需要一约束
            temperature=temperature,
        )
        result = completion.choices[0].message.content
        # 这里我们直接使用openAI
        # result = self.my_open_ai.chat(message,prompt,temperature)
        return result


    def ExtractSegmentNovel(self,message,temperature=0.4):
        # scenes_list = json.loads(self.__send(message,ExtractSegmentNovel))
        # return scenes_list
        return self.__send(message,ExtractSegmentNovel,temperature)

    def ToImagePrompt(self,message,temperature=0.4):
        # english_prompt ="best quality,masterpiece,illustration, an extremely delicate and beautiful,extremely detailed,CG,unity,8k wallpaper, "+\
                        # self.__send(message,ToImagePrompt,temperature)

        english_prompt = "best quality " + \
                         self.my_open_ai.chat(message, ToImagePrompt, temperature)+" --ar 4:3"

        return english_prompt
    def ToEnglish(self,text,temperature=0.8):
        english_prompt = self.my_open_ai.chat(text, ToImagePrompt, temperature)
        return english_prompt


但是在这里要注意一点,那就是这里的话,我们对于结果的提取其实还是使用了正则表达进行提取,并且我们也需要做一些异常处理,这是因为,LLM返回的格式不一定是你想要的,这取决于LLM的推理能力。

至此,有关于AI的部分其实我们就封装完毕了,那么接下来的工作就是,我们造好的零件将如何组装为一辆汽车的问题。

考虑到内容还是比较长,这里还是将文章拆分😉

写在最后

感兴趣的小伙伴,赠送全套AIGC学习资料,包含AI绘画、AI人工智能等前沿科技教程和软件工具,具体看这里。

AIGC技术的未来发展前景广阔,随着人工智能技术的不断发展,AIGC技术也将不断提高。未来,AIGC技术将在游戏和计算领域得到更广泛的应用,使游戏和计算系统具有更高效、更智能、更灵活的特性。同时,AIGC技术也将与人工智能技术紧密结合,在更多的领域得到广泛应用,对程序员来说影响至关重要。未来,AIGC技术将继续得到提高,同时也将与人工智能技术紧密结合,在更多的领域得到广泛应用。

在这里插入图片描述

一、AIGC所有方向的学习路线

AIGC所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

在这里插入图片描述

二、AIGC必备工具

工具都帮大家整理好了,安装就可直接上手!
在这里插入图片描述

三、最新AIGC学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述
在这里插入图片描述

四、AIGC视频教程合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值