Abe*_*Abe 11 openai-api langchain
langchain 文档包含此示例,用于配置和调用PydanticOutputParser
# Define your desired data structure.
class Joke(BaseModel):
setup: str = Field(description="question to set up a joke")
punchline: str = Field(description="answer to resolve the joke")
# You can add custom validation logic easily with Pydantic.
@validator('setup')
def question_ends_with_question_mark(cls, field):
if field[-1] != '?':
raise ValueError("Badly formed question!")
return field
# And a query intented to prompt a language model to populate the data structure.
joke_query = "Tell me a joke."
# Set up a parser + inject instructions into the prompt template.
parser = PydanticOutputParser(pydantic_object=Joke)
prompt = PromptTemplate(
template="Answer the user query.\n{format_instructions}\n{query}\n",
input_variables=["query"],
partial_variables={"format_instructions": parser.get_format_instructions()}
)
Run Code Online (Sandbox Code Playgroud)
然而,实际进行 API 调用的代码有点奇怪:
model_name = 'text-davinci-003'
temperature = 0.0
my_llm = OpenAI(model_name=model_name, temperature=temperature)
_input = prompt.format_prompt(query=joke_query)
output = my_llm(_input.to_string())
parser.parse(output)
Run Code Online (Sandbox Code Playgroud)
这正是我们想要的:Joke(setup='Why did the chicken cross the road?', punchline='To get to the other side!')
然而,不用Chains于此似乎很奇怪。
我可以接近一下,如下:
chain = LLMChain(llm=my_llm, prompt=prompt)
chain.run(query=joke_query)
Run Code Online (Sandbox Code Playgroud)
但这会返回原始的、未解析的文本:'\n{"setup": "Why did the chicken cross the road?", "punchline": "To get to the other side!"}'
是否有一种首选方法可以让Chain类充分利用 aParser并返回解析后的对象?我可以子类化和扩展LLMChain,但如果此功能尚不存在,我会感到惊讶。
您可以TransformChain为此使用 a !
from langchain.chat_models import ChatOpenAI
from langchain.chains import LLMChain, TransformChain
from langchain.chains import SequentialChain
llm = ChatOpenAI(temperature=0.5)
llm_chain = LLMChain(
prompt=prompt,
llm=llm,
output_key="json_string",
)
def parse_output(inputs: dict) -> dict:
text = inputs["json_string"]
return {"result": parser.parse(text)}
transform_chain = TransformChain(
input_variables=["json_string"],
output_variables=["result"],
transform=parse_output
)
chain = SequentialChain(
input_variables=["joke_query"],
output_variables=["result"],
chains=[llm_chain, transform_chain],
)
chain.run(query="Tell me a joke.")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6618 次 |
| 最近记录: |