用LangChain和ChatGPT将1¢变成创业点子和落地页面

ChatGPT中文站
Startup Idea & Landing Page Using LangChain & ChatGPT feature image

今天,我将向您展示如何将1美分转化为创业想法和一个着陆页草稿。

你可以在Google Colab或GitHub上查看代码。

我们正在创建一个PromptTemplate来产生创业想法。如果您希望以不同的方式产生想法,可以随意修改它。

from langchain.prompts import ChatPromptTemplate

generate_idea_prompt_template = ChatPromptTemplate.from_template(
"""
Generate an innovative and feasible startup idea in {industry}
that requires an initial investment of under ${budget}.
Briefly explain the core concept of the idea, potential customers,
and how it could generate revenue.
"""
)

我们设置了预算和创业行业变量。

from langchain.prompts import ChatPromptTemplate

generate_idea_prompt_template = ChatPromptTemplate.from_template(
"""
Generate an innovative and feasible startup idea in {industry}
that requires an initial investment of under ${budget}.
Briefly explain the core concept of the idea, potential customers,
and how it could generate revenue.
"""
)

然后我们必须选择要使用的OpenAI模型。如果您可以访问GPT-4,则可以生成更好的结果。但在这个例子中,我使用gpt-3.5,因为它通常是可用且更便宜的。温度越高 - 结果越有创意。尝试使用它来开发对使用哪些值的直觉。

import os
from langchain.chat_models import ChatOpenAI

# @markdown You can obtain your own API key from [openai.com](https://platform.openai.com/account/api-keys).\
# @markdown Once you have it, you can either paste it here or set it as your OPENAI_API_KEY environment variable.
openai_api_key = "sk-..." # @param {type:"string"}
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY", openai_api_key)
# @markdown If you have access to the gpt-4-0613 model, selecting it could yield even better results.
model = "gpt-3.5-turbo-0613" # @param ["gpt-3.5-turbo-0613","gpt-4-0613"]
# @markdown In this context, 'temperature' adjusts the output from being predictable to being more random. Feel free to experiment with this parameter to achieve more creative results.
temperature = 1.3 # @param {type:"slider", min:0, max:2, step:0.1}
# temperature = 0.0
llm = ChatOpenAI(temperature=temperature, model=model)
f"{model=} {temperature=}"

然后我们开始生成创意。当你满意结果时,我们将继续下一步。

from IPython.display import display, Markdown

idea = llm(generate_idea)
display(Markdown(idea.content))

我们将为我们的落地页面生成关键词。它们可以帮助你了解是否有人对你的想法的服务或领域感兴趣。

您可以选择要生成的关键词数量,并通过调节温度来控制 ChatGPT 生成关键词时的创意程度。

num_keywords = 3  # @param {type: "number"}
# @markdown I prefer to keep this temperature close to zero. Increase it if you would like to get more creative with keywords.
temperature_for_keywords = 0 # @param {type:"slider", min:0, max:2, step:0.1}
llm = ChatOpenAI(temperature=temperature_for_keywords, model=model)
f"{num_keywords=} {temperature_for_keywords=}"

您可以看到我们正在使用的提示模板;请随意进行修改。

get_keywords_prompt_template = ChatPromptTemplate.from_template(
"""
Generate a list of {num_keywords} SEO keywords for a startup idea:
```
{idea}
```
"""
)
get_keywords_messages = get_keywords_prompt_template.format_messages(
num_keywords=num_keywords, idea=idea
)

下一步是非常有趣的一步。 ChatGPT对最近的事件一无所知,几天前,他们发布了一种称为函数调用的特性,您可以使用它来填补这个空白。

它非常新。如果您知道如何使它更好或更清晰,请随意在Github上提交PR。

我们正在定义一个JSON模式,用于获取关键词列表的函数。我们正在打印中间值和最终结果。

from langchain.schema import HumanMessage
import json

functions = [
{
"name": "get_seo_keywords",
"description": "Get seo keywords for the startup idea",
"parameters": {
"title": "Get seo keywords for the startup idea",
"description": "Input for get seo keywords for the startup idea",
"type": "object",
"properties": {
"keywords": {
"title": "Seo keywords",
"description": "List of SEO keywords",
"type": "array",
"items": {"type": "string"},
},
},
"required": ["keywords"],
},
}
]

message = llm.predict_messages(get_keywords_messages, functions=functions)
print(message.additional_kwargs["function_call"])
function_call = json.loads(message.additional_kwargs["function_call"]["arguments"])
function_call
kw_list = function_call["keywords"][:num_keywords]
print(f"{kw_list=}")

然后,我们使用关键字和Pytrends软件包从Google Trends获得有关它们的信息。我们正在检索随时间变化的兴趣并绘制它。

我们现在是手动处理这个过程,但你可以想象一下,有了这个输入,你可以调用任何函数或外部API。函数调用非常强大。

from pytrends.request import TrendReq

keywords = ", ".join(kw_list)
print(f"{keywords=}")
pytrends = TrendReq(hl="en-US", tz=360)
pytrends.build_payload(kw_list, cat=0, timeframe="today 12-m", geo="", gprop="")
interest = pytrends.interest_over_time()
interest.plot();

如果谷歌最近有所更改或者关于您的关键词在谷歌趋势中没有信息,此步骤可能会失败。您可以手动调整您认为合理的关键词。在任何情况下,可以跳过此步骤并继续进行着陆页草案的生成。

让我们生成一个着陆页初稿。我更喜欢在此步骤中保持温度较低,因为我不想发生语言模型编写HTML标签或类似情况的情况。

temperature_for_html = 0  # @param {type:"slider", min:0, max:2, step:0.1}
llm = ChatOpenAI(temperature=temperature_for_html, model=model)
# @markdown Email you would like to use
email = "do-not-reply@example.com" # @param {"type": "string"}
f"{temperature_for_html=} {email}"

再次强调,随便改变提示。如果你是经验丰富的开发者,你可以要求React组件。

get_landing_page = ChatPromptTemplate.from_template(
"""
Create an HTML5 startup landing page using Tailwind CSS, optimized for the following keywords: "{keywords}", with a Join the Waitlist maito:{email} button, for the idea:
```
{idea}
```
"""
)
get_landing_page_messages = get_landing_page.format_messages(
keywords=keywords, idea=idea, email=email
)
message = llm.predict_messages(get_landing_page_messages)

from IPython.display import display, HTML

display(HTML(message.content))

然后,我们展示了结果,并提供了在Google Colab中下载结果的选项。如果您单击按钮,将打开保存对话框。

from google.colab import files

with open("index.html", "w") as file:
file.write(message.content)
files.download("index.html")

结果:

ChatGPT中文站
ChatGPT 3.5 result
ChatGPT中文站
ChatGPT 4 Result Mobile view

我希望这篇帖子有帮助。

谢谢阅读。

2023-10-20 17:01:23 AI中文站翻译自原文