赞
踩
okey,那么接下来我们来看到我们如何使用Prompt来完成Agent开发。来让LLM完成我们想要让它完成的工作。当然这里的开发还是非常渐层的开发,实际上我们有复杂的,但是得益于开源生态的完善,目前一些看起来比较深层的开发例如RAG也已经被封装的太好了。 那么这里的话,我们主要有两个步骤需要处理:
当然这里应该是三个任务,但是我这里直接合并为两个任务,要相信LLM的推理能力,当然你也可以将任务再进行拆分。
okey,现在的话我们来做到我们的Agent。这里话,其实也不是啥复杂的概念。记住LLM是一个很牛逼的推理引擎就够了。
那么在这里面的话,我们设计了两个提示词:
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。