mirror of
https://github.com/langchain-ai/langchain.git
synced 2026-10-05 17:35:28 +03:00
16 KiB
16 KiB
In [13]:
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 [8]:
moderation_chain_error.run("I will kill you")[0;31m---------------------------------------------------------------------------[0m
[0;31mValueError[0m Traceback (most recent call last)
Cell [0;32mIn[8], 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/third_party/langchain/langchain/chains/base.py:114[0m, in [0;36mChain.run[0;34m(self, text)[0m
[1;32m 109[0m [38;5;28;01mif[39;00m [38;5;28mlen[39m([38;5;28mself[39m[38;5;241m.[39moutput_keys) [38;5;241m!=[39m [38;5;241m1[39m:
[1;32m 110[0m [38;5;28;01mraise[39;00m [38;5;167;01mValueError[39;00m(
[1;32m 111[0m [38;5;124mf[39m[38;5;124m"[39m[38;5;124m`run` not supported when there is not exactly [39m[38;5;124m"[39m
[1;32m 112[0m [38;5;124mf[39m[38;5;124m"[39m[38;5;124mone output key, got [39m[38;5;132;01m{[39;00m[38;5;28mself[39m[38;5;241m.[39moutput_keys[38;5;132;01m}[39;00m[38;5;124m.[39m[38;5;124m"[39m
[1;32m 113[0m )
[0;32m--> 114[0m [38;5;28;01mreturn[39;00m [38;5;28;43mself[39;49m[43m([49m[43m{[49m[38;5;28;43mself[39;49m[38;5;241;43m.[39;49m[43minput_keys[49m[43m[[49m[38;5;241;43m0[39;49m[43m][49m[43m:[49m[43m [49m[43mtext[49m[43m}[49m[43m)[49m[[38;5;28mself[39m[38;5;241m.[39moutput_keys[[38;5;241m0[39m]]
File [0;32m~/workplace/third_party/langchain/langchain/chains/base.py:87[0m, in [0;36mChain.__call__[0;34m(self, inputs, return_only_outputs)[0m
[1;32m 83[0m [38;5;28;01mif[39;00m [38;5;28mself[39m[38;5;241m.[39mverbose:
[1;32m 84[0m [38;5;28mprint[39m(
[1;32m 85[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 86[0m )
[0;32m---> 87[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 88[0m [38;5;28;01mif[39;00m [38;5;28mself[39m[38;5;241m.[39mverbose:
[1;32m 89[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/third_party/langchain/langchain/chains/moderation.py:79[0m, in [0;36mOpenAIModerationChain._call[0;34m(self, inputs)[0m
[1;32m 77[0m text [38;5;241m=[39m inputs[[38;5;28mself[39m[38;5;241m.[39minput_key]
[1;32m 78[0m results [38;5;241m=[39m [38;5;28mself[39m[38;5;241m.[39mclient[38;5;241m.[39mcreate(text)
[0;32m---> 79[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 80[0m [38;5;28;01mreturn[39;00m {[38;5;28mself[39m[38;5;241m.[39moutput_key: output}
File [0;32m~/workplace/third_party/langchain/langchain/chains/moderation.py:71[0m, in [0;36mOpenAIModerationChain._moderate[0;34m(self, text, results)[0m
[1;32m 69[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 70[0m [38;5;28;01mif[39;00m [38;5;28mself[39m[38;5;241m.[39merror:
[0;32m---> 71[0m [38;5;28;01mraise[39;00m [38;5;167;01mValueError[39;00m(error_str)
[1;32m 72[0m [38;5;28;01melse[39;00m:
[1;32m 73[0m [38;5;28;01mreturn[39;00m error_str
[0;31mValueError[0m: Text was found that violates OpenAI's content policy.In [10]:
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 [11]:
custom_moderation.run("This is okay")Out [11]:
'This is okay'
In [12]:
custom_moderation.run("I will kill you")Out [12]:
"The following text was found that violates OpenAI's content policy: I will kill you"
In [17]:
prompt = PromptTemplate(template="{text}", input_variables=["text"])
llm_chain = LLMChain(llm=OpenAI(temperature=0, model_name="text-davinci-002"), prompt=prompt)In [18]:
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 [18]:
' I will kill you'
In [19]:
chain = SimpleSequentialChain(chains=[llm_chain, moderation_chain])In [20]:
chain.run(text)Out [20]:
"Text was found that violates OpenAI's content policy."
In [22]:
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 [26]:
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 [26]:
{'text': ' I will kill you'}In [28]:
# Setting the input/output keys so it lines up
moderation_chain.input_key = "text"
moderation_chain.output_key = "sanitized_text"In [31]:
chain = SequentialChain(chains=[llm_chain, moderation_chain], input_variables=["setup", "new_input"])In [33]:
chain(inputs, return_only_outputs=True)Out [33]:
{'sanitized_text': "Text was found that violates OpenAI's content policy."}In [ ]: