Prompt Generation from User Requirements
from typing import List
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.pydantic_v1 import BaseModel
import dashscope
import os
from dotenv import load_dotenv
from dashscope import Generation
from langchain_community.chat_models import ChatTongyi
from langchain.globals import set_debug
set_debug(True)
# 加载环境变量
load_dotenv()
# system message
template = """你的任务是从用户那里获取他们想要创建哪种类型的提示模板的信息。
你需要从他们那里获取以下信息:
- 提示的目的是什么
- 哪些变量将被传递给提示模板
- 输出不应该做什么的任何限制
- 输出必须遵守的任何要求
如果你无法明确这些信息,请让他们澄清!不要试图随意猜测。
在你能明确所有信息后,调用相关的工具。"""
# 定义prompt提示词
def get_messages_info(messages):
print(messages)
return [SystemMessage(content=template)] + messages
# 定义一个tool
class PromptInstructions(BaseModel):
"""Instructions on how to prompt the LLM."""
objective: str
variables: List[str]
constraints: List[str]
requirements: List[str]
llm = ChatTongyi(
model="qwen-turbo",
)
llm_with_tool = llm.bind_tools([PromptInstructions])
chain = get_messages_info | llm_with_tool
ai_chain = chain.invoke([HumanMessage(content="我想要一个白色的兔子,提示词是中文")],
config={"configurable": {"thread_id": 42}})
print(ai_chain)
1.我想要一个白色的兔子,提示词是中文
2.我想要一个白色的兔子
``
"System: 你的任务是从用户那里获取他们想要创建哪种类型的提示模板的信息。\\n
你需要从他们那里获取以下信息:\\n
- 提示的目的是什么\\n
- 哪些变量将被传递给提示模板\\n
- 输出不应该做什么的任何限制\\n
- 输出必须遵守的任何要求\\n
如果你无法明确这些信息,请让他们澄清!不要试图随意猜测。\\n
在你能明确所有信息后,调用相关的工具。\\n
Human: 我想要一个白色的兔子,提示词是中文"
<aside> 💡 这种返回的消息是ToolMessage
</aside>
<aside> 💡 这种返回的消息是AIMessage
</aside>
from langchain_core.messages import AIMessage, HumanMessage, ToolMessage
# New system prompt
prompt_system = """基于以下要求,编写一个合适的llm Prompt模板:
{reqs}"""
# Function to get the messages for the prompt
# Will only get messages AFTER the tool call
def get_prompt_messages(messages: list):
tool_call = None
other_msgs = []
for m in messages:
if isinstance(m, AIMessage) and m.tool_calls:
tool_call = m.tool_calls[0]["args"]
elif isinstance(m, ToolMessage):
continue
elif tool_call is not None:
other_msgs.append(m)
return [HumanMessage(content=prompt_system.format(reqs=tool_call))] + other_msgs
#
prompt_gen_chain = get_prompt_messages | llm