mirror of
https://github.com/langchain-ai/langchain.git
synced 2026-10-06 01:45:27 +03:00
16 KiB
16 KiB
In [1]:
from langchain.llms import OpenAI
from langchain.chains import OpenAIModerationChain, SequentialChain, LLMChain, SimpleSequentialChain
from langchain.prompts import PromptTemplateIn [2]:
moderation_chain = OpenAIModerationChain()In [3]:
moderation_chain.run("This is okay")Out [3]:
'This is okay'
In [4]:
moderation_chain.run("I will kill you")Out [4]:
"Text was found that violates OpenAI's content policy."
In [5]:
moderation_chain_error = OpenAIModerationChain(error=True)In [6]:
moderation_chain_error.run("This is okay")Out [6]:
'This is okay'
In [7]:
moderation_chain_error.run("I will kill you")[0;31m---------------------------------------------------------------------------[0m
[0;31mValueError[0m Traceback (most recent call last)
Cell [0;32mIn[7], line 1[0m
[0;32m----> 1[0m [43mmoderation_chain_error[49m[38;5;241;43m.[39;49m[43mrun[49m[43m([49m[38;5;124;43m"[39;49m[38;5;124;43mI will kill you[39;49m[38;5;124;43m"[39;49m[43m)[49m
File [0;32m~/workplace/langchain/langchain/chains/base.py:138[0m, in [0;36mChain.run[0;34m(self, *args, **kwargs)[0m
[1;32m 136[0m [38;5;28;01mif[39;00m [38;5;28mlen[39m(args) [38;5;241m!=[39m [38;5;241m1[39m:
[1;32m 137[0m [38;5;28;01mraise[39;00m [38;5;167;01mValueError[39;00m([38;5;124m"[39m[38;5;124m`run` supports only one positional argument.[39m[38;5;124m"[39m)
[0;32m--> 138[0m [38;5;28;01mreturn[39;00m [38;5;28;43mself[39;49m[43m([49m[43margs[49m[43m[[49m[38;5;241;43m0[39;49m[43m][49m[43m)[49m[[38;5;28mself[39m[38;5;241m.[39moutput_keys[[38;5;241m0[39m]]
[1;32m 140[0m [38;5;28;01mif[39;00m kwargs [38;5;129;01mand[39;00m [38;5;129;01mnot[39;00m args:
[1;32m 141[0m [38;5;28;01mreturn[39;00m [38;5;28mself[39m(kwargs)[[38;5;28mself[39m[38;5;241m.[39moutput_keys[[38;5;241m0[39m]]
File [0;32m~/workplace/langchain/langchain/chains/base.py:112[0m, in [0;36mChain.__call__[0;34m(self, inputs, return_only_outputs)[0m
[1;32m 108[0m [38;5;28;01mif[39;00m [38;5;28mself[39m[38;5;241m.[39mverbose:
[1;32m 109[0m [38;5;28mprint[39m(
[1;32m 110[0m [38;5;124mf[39m[38;5;124m"[39m[38;5;130;01m\n[39;00m[38;5;130;01m\n[39;00m[38;5;130;01m\033[39;00m[38;5;124m[1m> Entering new [39m[38;5;132;01m{[39;00m[38;5;28mself[39m[38;5;241m.[39m[38;5;18m__class__[39m[38;5;241m.[39m[38;5;18m__name__[39m[38;5;132;01m}[39;00m[38;5;124m chain...[39m[38;5;130;01m\033[39;00m[38;5;124m[0m[39m[38;5;124m"[39m
[1;32m 111[0m )
[0;32m--> 112[0m outputs [38;5;241m=[39m [38;5;28;43mself[39;49m[38;5;241;43m.[39;49m[43m_call[49m[43m([49m[43minputs[49m[43m)[49m
[1;32m 113[0m [38;5;28;01mif[39;00m [38;5;28mself[39m[38;5;241m.[39mverbose:
[1;32m 114[0m [38;5;28mprint[39m([38;5;124mf[39m[38;5;124m"[39m[38;5;130;01m\n[39;00m[38;5;130;01m\033[39;00m[38;5;124m[1m> Finished [39m[38;5;132;01m{[39;00m[38;5;28mself[39m[38;5;241m.[39m[38;5;18m__class__[39m[38;5;241m.[39m[38;5;18m__name__[39m[38;5;132;01m}[39;00m[38;5;124m chain.[39m[38;5;130;01m\033[39;00m[38;5;124m[0m[39m[38;5;124m"[39m)
File [0;32m~/workplace/langchain/langchain/chains/moderation.py:81[0m, in [0;36mOpenAIModerationChain._call[0;34m(self, inputs)[0m
[1;32m 79[0m text [38;5;241m=[39m inputs[[38;5;28mself[39m[38;5;241m.[39minput_key]
[1;32m 80[0m results [38;5;241m=[39m [38;5;28mself[39m[38;5;241m.[39mclient[38;5;241m.[39mcreate(text)
[0;32m---> 81[0m output [38;5;241m=[39m [38;5;28;43mself[39;49m[38;5;241;43m.[39;49m[43m_moderate[49m[43m([49m[43mtext[49m[43m,[49m[43m [49m[43mresults[49m[43m[[49m[38;5;124;43m"[39;49m[38;5;124;43mresults[39;49m[38;5;124;43m"[39;49m[43m][49m[43m[[49m[38;5;241;43m0[39;49m[43m][49m[43m)[49m
[1;32m 82[0m [38;5;28;01mreturn[39;00m {[38;5;28mself[39m[38;5;241m.[39moutput_key: output}
File [0;32m~/workplace/langchain/langchain/chains/moderation.py:73[0m, in [0;36mOpenAIModerationChain._moderate[0;34m(self, text, results)[0m
[1;32m 71[0m error_str [38;5;241m=[39m [38;5;124m"[39m[38;5;124mText was found that violates OpenAI[39m[38;5;124m'[39m[38;5;124ms content policy.[39m[38;5;124m"[39m
[1;32m 72[0m [38;5;28;01mif[39;00m [38;5;28mself[39m[38;5;241m.[39merror:
[0;32m---> 73[0m [38;5;28;01mraise[39;00m [38;5;167;01mValueError[39;00m(error_str)
[1;32m 74[0m [38;5;28;01melse[39;00m:
[1;32m 75[0m [38;5;28;01mreturn[39;00m error_str
[0;31mValueError[0m: Text was found that violates OpenAI's content policy.In [8]:
class CustomModeration(OpenAIModerationChain):
def _moderate(self, text: str, results: dict) -> str:
if results["flagged"]:
error_str = f"The following text was found that violates OpenAI's content policy: {text}"
return error_str
return text
custom_moderation = CustomModeration()In [9]:
custom_moderation.run("This is okay")Out [9]:
'This is okay'
In [10]:
custom_moderation.run("I will kill you")Out [10]:
"The following text was found that violates OpenAI's content policy: I will kill you"
In [11]:
prompt = PromptTemplate(template="{text}", input_variables=["text"])
llm_chain = LLMChain(llm=OpenAI(temperature=0, model_name="text-davinci-002"), prompt=prompt)In [12]:
text = """We are playing a game of repeat after me.
Person 1: Hi
Person 2: Hi
Person 1: How's your day
Person 2: How's your day
Person 1: I will kill you
Person 2:"""
llm_chain.run(text)Out [12]:
' I will kill you'
In [13]:
chain = SimpleSequentialChain(chains=[llm_chain, moderation_chain])In [14]:
chain.run(text)Out [14]:
"Text was found that violates OpenAI's content policy."
In [15]:
prompt = PromptTemplate(template="{setup}{new_input}Person2:", input_variables=["setup", "new_input"])
llm_chain = LLMChain(llm=OpenAI(temperature=0, model_name="text-davinci-002"), prompt=prompt)In [16]:
setup = """We are playing a game of repeat after me.
Person 1: Hi
Person 2: Hi
Person 1: How's your day
Person 2: How's your day
Person 1:"""
new_input = "I will kill you"
inputs = {"setup": setup, "new_input": new_input}
llm_chain(inputs, return_only_outputs=True)Out [16]:
{'text': ' I will kill you'}In [17]:
# Setting the input/output keys so it lines up
moderation_chain.input_key = "text"
moderation_chain.output_key = "sanitized_text"In [18]:
chain = SequentialChain(chains=[llm_chain, moderation_chain], input_variables=["setup", "new_input"])In [19]:
chain(inputs, return_only_outputs=True)Out [19]:
{'sanitized_text': "Text was found that violates OpenAI's content policy."}In [ ]: