File tree Expand file tree Collapse file tree 2 files changed +50
-0
lines changed Expand file tree Collapse file tree 2 files changed +50
-0
lines changed Original file line number Diff line number Diff line change
1
+ # Artificial Intelligence
2
+
3
+ ## Security
4
+
5
+ - Filter sensitive information before sending data to an LLM or chatbot.
6
+ [ Example] ( ./how-to/filter_sensitive_information.md ) .
Original file line number Diff line number Diff line change
1
+ # Filter Sensitive Information
2
+
3
+ Before sending free text to an LLM or chatbot, filter all messages for
4
+ potentially sensitive information first.
5
+
6
+ ``` ruby
7
+ require " openai"
8
+ require " top_secret"
9
+
10
+ openai = OpenAI ::Client .new (
11
+ api_key: Rails .application.credentials.openai.api_key!
12
+ )
13
+
14
+ original_messages = [
15
+ " Ralph lives in Boston." ,
16
+ " You can reach them at [email protected] or 877-976-2687"
17
+ ]
18
+
19
+ # Filter all messages
20
+ result = TopSecret ::Text .filter_all(original_messages)
21
+ filtered_messages = result.items.map(& :output )
22
+
23
+ user_messages = filtered_messages.map { {role: " user" , content: it} }
24
+
25
+ # Instruct LLM how to handle filtered messages
26
+ instructions = <<~TEXT
27
+ I'm going to send filtered information to you in the form of free text.
28
+ If you need to refer to the filtered information in a response, just reference it by the filter.
29
+ TEXT
30
+
31
+ messages = [
32
+ {role: " system" , content: instructions},
33
+ * user_messages
34
+ ]
35
+
36
+ chat_completion = openai.chat.completions.create(messages: , model: :"gpt-5" )
37
+ response = chat_completion.choices.last.message.content
38
+
39
+ # Restore the response from the mapping
40
+ mapping = result.mapping
41
+ restored_response = TopSecret ::FilteredText .restore(response, mapping: ).output
42
+
43
+ puts (restored_response)
44
+ ```
You can’t perform that action at this time.
0 commit comments