使用GPT的小说创作助手Agent Python代码

Agent的主要作用是保持情节的连贯性。

import openai
import os

class GPTClient:
    def __init__(self, api_key):
        openai.api_key = api_key

    def generate_text(self, prompt, max_tokens=100):
        try:
            response = openai.ChatCompletion.create(
                model="gpt-3.5-turbo",
                messages=[
                    {"role": "system", "content": "You are a creative writing assistant."},
                    {"role": "user", "content": prompt}
                ],
                max_tokens=max_tokens
            )
            return response.choices[0].message.content.strip()
        except Exception as e:
            print(f"Error in GPT API call: {e}")
            return "Error in generating text."

class Character:
    def __init__(self, name, personality, background):
        self.name = name
        self.personality = personality
        self.background = background
        self.arc = []

class Event:
    def __init__(self, description, characters):
        self.description = description
        self.characters = characters

class NovelWritingAgent:
    def __init__(self, gpt_client):
        self.characters = []
        self.events = []
        self.timeline = []
        self.theme = ""
        self.gpt_client = gpt_client

    def add_character(self, name, personality, background):
        character = Character(name, personality, background)
        self.characters.append(character)
        return character

    def add_event(self, description, characters):
        event = Event(description, characters)
        self.events.append(event)
        return event

    def set_theme(self, theme):
        self.theme = theme

    def generate_plot(self):
        characters_info = "; ".join([f"{c.name} ({c.personality})" for c in self.characters])
        prompt = f"Create a plot outline for a story with the theme '{self.theme}'. Characters: {characters_info}. Include {len(self.events)} major events."
        plot_outline = self.gpt_client.generate_text(prompt, max_tokens=200)
        
        # Parse the generated plot outline and update the timeline
        events = plot_outline.split('\n')
        self.timeline = [Event(event.strip(), self.characters) for event in events if event.strip()]

    def ensure_coherence(self):
        coherent_timeline = []
        for i in range(len(self.timeline)):
            coherent_timeline.append(self.timeline[i])
            if i < len(self.timeline) - 1:
                transition_event = self.create_transition_event(self.timeline[i], self.timeline[i+1])
                coherent_timeline.append(transition_event)
        self.timeline = coherent_timeline

    def create_transition_event(self, event1, event2):
        prompt = f"Create a brief transition event connecting these two events:\n1. {event1.description}\n2. {event2.description}"
        transition_description = self.gpt_client.generate_text(prompt, max_tokens=50)
        return Event(transition_description, self.characters)

    def develop_character_arcs(self):
        for character in self.characters:
            character_events = [event.description for event in self.timeline if character in event.characters]
            prompt = f"Develop a character arc for {character.name} ({character.personality}) based on these events: {', '.join(character_events)}"
            arc_description = self.gpt_client.generate_text(prompt, max_tokens=100)
            character.arc = arc_description

    def generate_story(self):
        self.generate_plot()
        self.ensure_coherence()
        self.develop_character_arcs()
        
        story_outline = f"Theme: {self.theme}\n\n"
        story_outline += "\n".join([event.description for event in self.timeline])
        
        prompt = f"Write a short story based on this outline:\n\n{story_outline}\n\nInclude character development and ensure the story flows coherently."
        final_story = self.gpt_client.generate_text(prompt, max_tokens=1000)
        return final_story

# Usage example
api_key = os.environ.get("OPENAI_API_KEY")  # Make sure to set your API key as an environment variable
gpt_client = GPTClient(api_key)
agent = NovelWritingAgent(gpt_client)

# Add characters
hero = agent.add_character("Alex", "brave and idealistic", "ordinary background")
villain = agent.add_character("Dr. Nefarious", "cunning and ambitious", "wealthy background")

# Set theme
agent.set_theme("The triumph of hope over adversity")

# Generate the story
story = agent.generate_story()
print(story)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天进步2015

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值