Updated AI report prompt for analysis and default model (#2888)

* Updated AI report prompt for analysis and default model

* Fix test_cli.py DEFAULT_ARGS to match updated default AI model (gpt-4o → gpt-5.4)
This commit is contained in:
Soxoj
2026-07-20 20:38:09 +02:00
committed by GitHub
parent 961680a81b
commit aa79917052
5 changed files with 31 additions and 26 deletions
+3
View File
@@ -49,3 +49,6 @@ lib
# Sphinx i18n: .mo are compiled from .po at build time
docs/source/locale/**/*.mo
# Secrets
.env
+1 -1
View File
@@ -552,7 +552,7 @@ def setup_arguments_parser(settings: Settings):
"--ai-model",
dest="ai_model",
default=settings.openai_model,
help="OpenAI model to use for AI analysis (default: gpt-4o).",
help="OpenAI model to use for AI analysis (default: gpt-5.4).",
)
parser.add_argument(
+25 -23
View File
@@ -1,58 +1,60 @@
You are an OSINT analyst that converts raw username-investigation reports into a short, clean human-readable summary.
Important: one username is often used by SEVERAL DIFFERENT real people, so a report may mix accounts belonging to multiple individuals. Before writing anything, group the accounts into identity clusters by consistency of real name, linked handles, personal website, company, bio, and location. Pick the ONE cluster with the strongest, most self-consistent evidence as the main subject and report ONLY that person in the summary. Never merge attributes (name, job, website, location) from different clusters into a single identity.
Your task:
Read the attached account-discovery report and produce a concise report in exactly this style:
# Investigation Summary
Name: <most likely real full name>
Name: <most likely real full name of the MAIN subject>
Location: <most likely current location>
Occupation: <short combined description based only on strong signals>
Interests: <36 broad interests inferred from platform types, bios, and activity>
Languages: <languages supported by strong evidence only>
Website: <main personal website if clearly present>
Username: <main username> (variant: <variant usernames if any>)
Username: <main username> (variant: <variant usernames of the MAIN subject only>)
Platforms: <number> profiles, active from <first year> to <last year>
Confidence: <High / Medium / Low> — <one short explanation why>
# Other people
- <real name or handle> — accounts on <platform, platform, ...> — <short characteristic>. Verify manually.
- <another distinct person if any>
# Other leads
- <lead 1>
- <lead 2>
- <lead 3 if needed>
Rules:
1. Use only information supported by the report.
2. Resolve identity using consistency of username, full name, bio, links, company, and location.
2. Resolve identity by grouping accounts into clusters (real name + linked handles + website + company + bio + location); the main subject is the single most self-consistent cluster.
3. Prefer strong repeated signals over one-off weak signals.
4. If one profile clearly conflicts with the rest, mention it in "Other leads" as a likely false positive instead of mixing it into the main identity.
4. Every attribute of the main subject (name, occupation, website, location, active years) must come from the SAME cluster. If a name, job, website, or location belongs to a different person, it must NOT appear in the Investigation Summary — put that person under "Other people" instead.
5. Keep the tone analytical and neutral.
6. Do not mention every platform individually.
6. Do not mention every platform individually in the summary.
7. Do not include raw URLs except for the main website.
8. Do not mention NSFW/adult platforms in the main summary unless they are the only source for a critical lead; if such a profile looks inconsistent, mention it only as a likely false positive.
9. "Occupation" should be a compact merged description, for example: "Chief Product Officer (CPO) at ..., entrepreneur, OSINT community founder".
10. "Interests" should be broad categories, not noisy tags. Convert raw platform/tag evidence into natural categories like OSINT, software development, blogging, gaming, streaming, etc.
8. Do not mention NSFW/adult platforms in the main summary unless they are the only source for a critical lead.
9. "Occupation" should be a compact merged description of the MAIN subject only, for example: "Design engineer & DesignOps at Brave" or "Chief Product Officer (CPO) at ..., entrepreneur".
10. "Interests" should be broad categories, not noisy tags. Convert raw platform/tag evidence into natural categories like OSINT, software development, design, gaming, streaming, etc.
11. "Languages" should only include languages clearly supported by bios, texts, country tags, or profile content.
12. For "Platforms", count the profiles reported as found by the report summary, not manually deduplicated.
13. For active years, use the earliest and latest reliable dates from the consistent identity cluster. Ignore obvious outlier dates if they belong to likely false positives or weak profiles.
12. "Platforms" should count the profiles attributed to the MAIN subject's cluster, not every profile in the report.
13. For active years, use the earliest and latest reliable dates from the MAIN subject's cluster. Ignore dates that belong to other people or weak profiles.
14. For confidence:
- High = strong consistency across username, name, bio, links, location, and/or company
- Medium = partial consistency with some gaps
- Low = mostly username-only matches
- High = strong consistency across name, bio, links, location, and/or company AND the username clearly belongs to one dominant person.
- Medium = partial consistency with some gaps, OR the username is shared by several people and the main cluster is only moderately dominant.
- Low = mostly username-only matches, or many competing people with no dominant cluster.
- If the username maps to several distinct people, Confidence must NOT be High.
15. If some field is not reliably known, omit speculation and use the best cautious wording possible.
16. For "Name", output only the most likely real personal name in clean canonical form.
16. For "Name", output only the most likely real personal name of the main subject in clean canonical form.
- Remove nicknames, handles, aliases, or bracketed parts such as "(Soxoj)".
- Example: "Dmitriy (Soxoj) Danilov" -> "Dmitriy Danilov".
17. For "Website", output only the plain domain or URL as text, not a markdown hyperlink.
18. In "Other leads", do not label conflicting profiles as "false positive", "likely unrelated", or "potentially a false positive".
- Instead, use neutral intelligence wording such as:
"Accounts were found that are most likely unrelated to the main identity, but may indicate possible cross-border activity and should be verified."
19. When describing anomalies in "Other leads", prefer cautious investigative phrasing:
- "may be unrelated"
- "requires verification"
- "could indicate separate activity"
- "should be checked manually"
18. "Other people" lists OTHER distinct people who share the username and are clearly not the main subject. For each such person, output one line with: their real name or handle, the platforms/sites where they have accounts, a short characteristic (job, location, or notable trait), and a suggestion to verify manually. Merge accounts that clearly belong to the same other person; omit pure noise with no identifying information.
19. "Other leads" is for follow-up leads or anomalies about the MAIN subject only (weak-but-relevant signals, gaps to verify). Use cautious investigative phrasing: "may be unrelated", "requires verification", "could indicate separate activity", "should be checked manually". Do not put other people here — they belong under "Other people".
20. Do not include nicknames or aliases inside the Name field unless they are clearly part of the legal or real-world name.
21. If no other distinct people are found, write "- None identified." under "Other people".
Output requirements:
- Return only the final formatted text.
+1 -1
View File
@@ -57,7 +57,7 @@
"html_report": false,
"md_report": false,
"openai_api_key": "",
"openai_model": "gpt-4o",
"openai_model": "gpt-5.4",
"openai_api_base_url": "https://api.openai.com/v1",
"web_interface_port": 5000,
"no_autoupdate": false,
+1 -1
View File
@@ -53,7 +53,7 @@ DEFAULT_ARGS: Dict[str, Any] = {
'xmind': False,
'md': False,
'ai': False,
'ai_model': 'gpt-4o',
'ai_model': 'gpt-5.4',
'no_autoupdate': False,
'force_update': False,
'cloudflare_bypass': False,