用LangChain和ChatGPT将1¢变成创业点子和落地页面
今天,我将向您展示如何将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")
结果:
我希望这篇帖子有帮助。
谢谢阅读。