I am building an AI Agent version of myself.

Phil Choi builds a lightweight AI chatbot that mimics him using his LinkedIn PDF and a short bio as a system prompt. He walks through the setup with OpenAI and Gradio, feeds the bot his own data, and launches it on localhost. The demo stays simple but hints at scaling to multi-LLM ranking and agent orchestration.
Questions this video answers
"I am building an AI Agent version of myself." — Phil Choi (YouTube upload, July 4, 2025).
Gradio (serves on localhost:7860 in the demo).
Gpt40Mini.
OpenAI, Gradio, ppdf (PDF reader); pip and virtualenv are used for environment/package management.
profile.pdf (LinkedIn export) and resume/summary.txt (short summary file).
Chapters
Très bien. Donc, vous savez, le marché évolue. Il y a toujours de nouvelles technologies. Il y a toujours quelque chose de nouveau à apprendre. C'est ça le métier de programmeur. Il faut être à la pointe de ses connaissances en permanence. Et récemment, il y a eu quelques nouveaux postes qui ont été créés. Il y a deux ans, je crois, j'ai commencé à entendre parler d'ingénierie rapide et maintenant, j'entends davantage parler de spécialistes de l'IA et de la manière de rationaliser les opérations commerciales ou de tirer parti des LLM. J'ai donc fait des recherches ou des études sur l'IA agentique et j'en ai appris un peu plus. Il y a quelques trucs comme le SDK OpenAI, mais aujourd'hui, nous allons juste voir comment appeler OpenAI et tirer parti des invites système et des trucs comme ça. Voyons ça. Et récemment, eux, pour la communauté scolaire, je pense que nous avons eu une sorte d'avantage pour créer eux parler à une IA et nous avons utilisé le programme appelé Daily Défi Humain.
Mais eux, nous avons alimenté un tas.
De données, comme des invites système et maintenant le beau IA parle un peu comme moi et eux, il a même comme ma voix et tout. Donc je vais vous montrer ça tout de suite. Donc nous allons aller sur daily.ai, laisser Philil parler.
D'accord.
Alors comment puis-je aider ? Très bien. Donc vous pouvez même dire comme lire à voix haute. Comment puis-je aider ? Donc en quelque sorte, il a aussi ma voix. Ouais. Et puis ça pourrait être comme... Hé, j'ai besoin d'écrire une application React Native.
Pouvez-vous me donner une belle structure de.
Dossier pour avoir un point de départ ? Ça devrait vous donner quelque chose. Voici une application ReactSolid E, E, navigateur d'onglet Racine SRC, navigation sur l'écran de profil, et ça a l'air plutôt cool. On peut demander E, E, savez-vous comment va Shai, le père de 40 ans ? Shai, oh mec, son histoire m'a fait vibrer. Lors de ma dernière intervention, Shai est passé de zéro à la création de composants e-commerce spécialisés pour les petites entreprises. Sympa. Donc, il connaît tout ce genre de choses. Quoi d'autre ? Appelons-le. Oh, tu veux l'appeler ? Ouais, très bien. Comment puis-je vous aider ? comment va Shai ? Je ne sais pas qui est Shai, mais s'il y a quelqu'un d'important pour vous, j'espère qu'il va bien. Tu veux me mettre au courant ? comment va Shia, le père de 40 ans ? Chai va très bien, en fait. C'est le père de 40 ans qui pensait qu'il était trop vieux pour apprendre à coder, mais il a changé d'état d'esprit. Il s'est concentré sur la création de composants de commerce électronique pour les petites entreprises. Et en 5 mois, il a décroché un contrat en freelance avec l'ancien directeur marketing d'IKEA. Il gagne maintenant un salaire à 5 chiffres. Pas parce qu'il maîtrisait toutes les compétences techniques, mais parce qu'il a résolu de vrais problèmes qui ont apporté une valeur commerciale évidente. Son histoire est la preuve que l'âge et le parcours ne comptent pas autant que la résolution des bons problèmes. Oh, je veux dire, je ne sais pas, mais c'est un travail en cours, c'est un travail en cours. Très bien, nous allons raccrocher et ensuite, essayons de construire quelque chose de similaire. Donc, nous avons le délit, mais vous savez, à l'avenir, nous allons peut-être déployer notre propre solution de chatbot personnalisé. Alors, E, commençons la nôtre. Très bien. Donc, la première chose que je dois faire, c'est E. J'ai donc un fichier de fin avec toutes mes clés OpenAI et DC et tout ça. Je ne peux pas vous le montrer, mais E. La première chose que je vais faire ici, c'est E. Regardez cette ligne rouge ici. Je ne sais pas ce que c'est, mais un peu plus grande. Alors maintenant, la première chose que je vais faire, c'est lancer PipFreeze.
D'accord.
Et je vais lancer Python moins la version. Pourquoi suis-je sur 3.1.1 ? Je ne sais pas. Faisons-le. Je veux être sur 3.1.2.
Très bien.
Très bien. Cool. Alors maintenant, la première chose que je vais faire, c'est Freeze. Je vois que j'ai un environnement virtuel ici. Donc Virtual Environ pour démarrer un environnement virtuel. Cela créera notre fichier venv. Je vais devoir l'ajouter à notre fichier getitignore parce que je ne pense pas avoir de pythons ici. D'accord. Alors, une seconde. E, O, C. Très bien. Alors maintenant, la prochaine chose que je vais faire, c'est lancer pip install OpenAI.
O, et j'ai besoin d'OpenAI et de.
GRadio et faisons P, E, PDF. Cool. Je vais donc les installer. Vous verrez que j'ai putain de merde. Putain de merde. Putain de merde. Putain de merde. J'ai merdé. Là, laisse-moi faire ça très vite. Ok. Pipe freeze. J'ai merdé. Requirement.txt. Et puis je vais faire pipeninstall-requirement.txt.
Oui.
Je dois juste faire minuci. Ok, donc j'ai tout désinstallé maintenant. Et maintenant si je fais pip freeze, ça dit juste un install d'everything. Maintenant, pip install virtual vnv. Ok, maintenant source vnb bin activate. Ensuite, je vais faire pip install minucer. ensuite je vais juste rm minucer requirement.txt. Et puis je vais relancer la commande pip install que nous avons lancée plus tôt. Celle-ci.
Quoi ?
Quel est le processus de tout ça ? Quel est le but ? Oh, juste pour gérer tous vos paquets et tout ça, ok. Donc, maintenant je vais faire un pip freeze et m'assurer que tout va bien. Puis je vais faire pip freeze requirement.txt. Très bien. Maintenant, tout est bien fait.
Très bien.
Je peux désactiver à partir d'ici. PIP Freeze. Ouais, et puis je vais activer le code PIN source. Ok, cool. Je suis maintenant dans l'environnement dont j'ai besoin. Récupérons donc quelques fichiers d'information me concernant. Ok, je vais donc créer un dossier mis ici. Et je vais récupérer mon fichier linkedin.pdf. Je l'ai déjà préparé. Je pense que je l'ai quelque part ici. Mon fichier profil.pdf, je vais donc le mettre ici. Vous pouvez l'obtenir sur LinkedIn. Si vous allez sur linkedin.com, linkedin.com, puis sur votre profil, vous pouvez simplement, je pense que c'est les ressources, puis enregistrer au format PDF. Et cela vous donne des informations. Cela vous donne donc tout votre historique professionnel et des trucs comme ça. Nous allons donc récupérer notre fichier PDF, puis nous allons simplement récupérer un fichier summary.txt. Et nous allons faire quelque chose comme ça.
Vous connaissez le YouTube Elite Film ?
Ok, donc, il y a un tas.
De choses, n'est-ce pas ?
Très bien, cool. Pouvez-vous me donner un résumé de 1000 mots ou faisons-en un résumé de 300 mots pour aujourd'hui sur lui et sa mission ? Il sera utilisé comme un vide-système d'emparle.
Très bien.
Donc, FIL3, connu sous le nom de LEDFIL blablabla, partage des stratégies pratiques et un regard honnête. Maintenant, prenons ce résumé et ajoutons-le à ce fichier TXT.
Nous avons donc...
Au fait, ce sont deux L mais E, en gros, nous avons un petit résumé de notre utilisateur. Donc, ce que nous allons faire maintenant, c'est d'y remporter OS et JSON parce que c'est ce que nous allons utiliser. Donc, OS est à exécuter et je vais désactiver mes complétions. E, les commandes système et JSON sont à gérer les fichiers JSON.
D'accord.
Très bien. Maintenant, nous allons faire importer ou ne pas importer depuis un port load. N pour nous donner les clés dont nous avons besoin.
Donc.
Ce fichier est OK et ensuite nous allons faire from open AI import openAI.
Donc, et puis E nous allons faire.
From ppdf import pdfreader. Et puis nous allons aussi faire FromGRadio à GR ou WaitImportGRadio qui va nous aider à créer des interfaces utilisateurs en tant que GR.
C'est cool.
Nous avons donc nos importations ici. Alors, eux, commençons. Donc maintenant, la première chose que nous voulons faire est de charger nos variables d'environnement, n'est-ce pas ? Nous voulons donc charger M et ensuite nous allons exécuter RunOverrideTrue pour remplacer toutes les autres variables d'environnement que nous pourrions avoir. Donc c'est eux c'est ça. Donc ça devrait être fait. Et regardons python umap.py. Vérifions qu'il n'y a pas d'erreur. Pas de nom de module ppdf. Voyons ici. ppdf. Je suppose que je ne l'ai pas installé plus tôt.
Pip install p. Ouais, je suppose que.
Je ne l'ai pas fait. ppdf. Et voilà. pythonapp.py. Cool. Donc, il exécute le fichier. Aucune erreur. Maintenant, la première chose que nous devons faire est probablement de créer notre client OpenAI. En fait, ouvrons notre fichier PDF.
Faisons-le.
La première chose que nous devons faire est d'obtenir le résumé et le profil à partir d'itxt. Donc, ce que nous allons faire, c'est dire défaf, obtenir le contexte de l'invite system.
D'accord.
Oh, javascript land. Très bien. Maintenant, la première chose que je veux faire ici, c'est que je veux faire le lecteur égal au lecteur pdf à .bar oblique e-profile.pdf.
Et puis nous allons juste faire quelque chose comme ça.
Nous allons faire contexte égale, puis nous allons mettre une chaîne vide. Et puis nous allons faire, faisons comme ça. La première chose que nous allons mettre est un profil linkedin. Donc profil linkedin avec profil linkedin et puis on va juste mettre nouvelle ligne, nouvelle ligne et puis on va faire pour page dans reader, page. Page texte égale page point texte oh merde extraire texte et si texte on va dire contexte plus égal sur le texte plus nouvelles lignes nouvelles lignes nouvelles.
Lignes nouvelles lignes nouvelles lignes Ok.
Cool Donc en fait, on va juste renvoyer contexte ici et on va faire un vide système égale système obtenir un vide système contexte et on va imprimer ça et voir ce qui se passe.
On.
Laisse tomber à moitié. Donc tout ce qu'on a fait jusqu'ici, c'est importer des fichiers. Pour l'instant, on utilise juste le lecteur PDF et on récupère ses informations. Donc je vais lancer ça et en gros ça m'a donné toutes mes informations LinkedIn.
C'est plutôt cool.
Donc maintenant ce qu'on va faire c'est que j'ajouterai le résumé ici aussi.
Donc on va faire quelque chose comme.
Ça où on dit avec ouvert sur je pense qu'on peut faire comme ça aussi. E, résumé est égal à E, ouvrir, barre oblique, résumé.txt, comme un moins moins R, je veux dire lire le fichier. Imprimons simplement le résumé très rapidement. C'est juste un fichier txt, je pense que ça devrait fonctionner. Oups, oh, c'est point barre oblique moi. Et voilà. OK, maintenant c'est un rappeur de style texte. Et puis on peut juste faire e. Résumé texte est égal à résumé lu. Ou je pense qu'on peut juste ajouter lire ici aussi comme ça. De cette façon, on peut juste obtenir le résumé. Très bien. Donc on a le résumé ici aussi. Donc maintenant on peut en fait l'ajouter au contexte. Donc, ce qu'on va faire, c'est on va dire contexte plus égal, puis peut-être qu'on va mettre Philippe Choy résumé, puis on va mettre une nouvelle ligne, puis on va dire contexte plus égal sur le résumé.
Et.
Puis maintenant, on peut simplement imprimer l'invite du système. Et puis c'est toutes les informations dont il a vraiment besoin. Et maintenant, si je fais python.apap.py, nous obtenons un joli fichier texte avec le résumé du choix de remplissage et son LinkedIn. Je ne veux pas parler de moi à la troisième personne, mais c'est ce que nous devons alimenter dans le système. Parlez comme moi. Jusqu'ici, nous avons eu blablabla. Nous avons maintenant l'invite système prête. Nous pouvons en gros configurer le client OpenAI, puis celui-ci est assez intéressant. Faisons-le rapidement. Nous faisons simplement open égale openAI. OpenAI va maintenant avoir des trucs sympas. Nous allons donc dire client égale openAI. Complétions de chat.créer, puis nous allons dire modèle égal comment ça s'appelle ?
Gpt40Mini.
C'est le moins cher, n'est-ce pas ? Et puis nous allons faire quelque chose.
Comme message égal et nous allons faire quelque chose comme rôle et nous allons ajouter l'invit system. Le rôle sera système et le contenu sera l'invit system que nous venons de créer.
Et.
Puis nous pouvons également obtenir le E, nous pouvons simplement dire à partir du rôle de l'utilisateur, nous pouvons dire contenu je ne sais pas quelque chose comme quel est votre nom.
D'accord.
Donc maintenant, il ne connaîtra pas le nom à moins qu'il ait besoin de l'invite system pour avoir un peu de contexte. Nous allons simplement ajouter les messages ici. Laissez-moi juste imprimer e-client. Appelons cela e-ouvert. Appelons cela client en fait. Et puis nous allons simplement faire client. Et puis nous allons faire réponse. et la réponse est toujours à l'intérieur de le choix de réponse zéro dosage contenu.
D'accord.
Alors, essayons. Faisons python app. Pépi. Donc avec cet invi de système, je m'appelle assistant. Je suis là pour vous aider avec des informations, répondre à vos questions. Donc, il y a eu une erreur quelque part. Faisons qui est responsable. Nous avons oublié d'ajouter une dernière chose. Donc, en fait, nous devons lui dire que je m'appelle Assistant, n'est-ce pas ? Il connaît les informations, mais nous devons en fait lui donner plus de contexte, n'est-ce pas ? Nous allons donc faire plus Oups.
Oh merde ! Oh merde !
Quitter. Quitter. Quitter. Très bien. En fait, nous devons faire quelque chose comme ça. Et puis nous devons faire contexte plus égal, puis peut-être quelque chose comme des instructions, n'est-ce pas ? Et puis nous devons faire quelque chose comme ça. Et puis nous devons dire e contexte plus égal. Et maintenant, nous devons lui donner les.
Instructions, n'est-ce pas ?
Nous.
Devons donc dire quelque chose comme vous allez agir en tant que Philippe Choy Philippe Choy le fil et vous répondrez aux questions en son nom. Vous serez intégré à un site web sur son site web et vous répondrez aux questions en son nom.
D'accord, c'est donc le contexte.
Maintenant, le LLM le sait. Je vais le répéter une fois de plus.
Donc, je dis qui est. Oh, qui est le ville ?
Pardon, phrase de pardon. Je vais donc dire quel est votre nom. Très bien. Je m'appelle Phil3, mais vous pouvez m'appeler LiveFellow. Je suis un développeur de logiciels et un mentor qui aide les gens à percer dans le secteur des technologies. C'est plutôt cool, non ? C'est en gros un chat bot très simple. Maintenant, tout ce qu'il nous reste à faire, c'est d'y ajouter une interface utilisateur.
Et un moyen très simple de le.
Faire, c'est de faire quelque chose comme ce chat défaf et d'ajouter le message dans l'historique, qui sera géré par Gradial. Voici comment utiliser Gradial. Nous avons déjà les messages. En fait, laissons ces messages ici. Nous aurons ce message ici et nous dirons simplement que message est égal à message plus historique plus que dit l'utilisateur. Nous dirons donc que nous allons lancer le message contextuel de l'utilisateur et l'historique viendra ici à chaque fois.
En fait, nous allons peut-être simplement le mettre ici.
Il reçoit l'invite à chaque fois. Maintenant, nous passons à l'appel. Nous disons donc que nous faisons simplement réponse égale client chat. Compte completion. Le modèle de Craig est égal à tbt40minimessage est égal à message et puis on renvoie juste la réponse choix de réponse 0 contenu de dosage.
Donc c'est en gros tout ce dont.
On a vraiment besoin là. Maintenant on va juste dire si le nom est égal à l'interface principale de chat.gr et on va ajouter chat et on va ajouter type est égal à message et puis on va lancer.
Ça.
Devrait marcher. Maintenant on peut juste exécuter python app. Pi et puis maintenant j'ai localhost 7860. Maintenant je peux dire quel est leur nom. Oh, maintenant on a une erreur. Une seconde, corrigeons ça. Oh, pardon. J'ai mis le contenu contextuel. Et voilà. Maintenant je l'exécute juste. Python app, pi. Refresh. Comment tu t'appelles ? Maintenant ça va me donner salut, je m'appelle Phil Philippe Choi, mais vous pouvez aussi me connaître sous le nom de philblablabla. peux-tu me donner la solution pour inverser un arbre binaire en javascript ?
Ok.
Cool. Donc, inverser absolument l'arbre mineur. Donc, il fait tout ce qu'il doit faire. Et c'est un chatbot très très simple. Et puis vous pouvez lui demander combien d'endroits vous avez travaillé en tant que développeur de logiciel et il vous dira 7 endroits.
Très très cool.
D'accord. Donc c'est très simple. Et bien, il y a d'autres choses que nous pouvons faire pour évaluer la réponse et des choses comme ça, mais je veux juste faire quelque chose de très simple aujourd'hui. Nous allons faire des choses comme l'optimiseur d'évaluateur. Donc, assurez-vous qu'il évalue la réponse, et puis si c'est peut-être comme obtenir trois LLM de réponses différents, puis choisir le meilleur. Et nous utiliserons le routage, et je dois utiliser des agents ouverts, des agents d'IA à la place. Et nous utiliserons des trucs d'orchestrateurs, et bien sûr, l'invite doit être beaucoup plus intelligente. Et j'ai des trucs qui sont prêts, mais je veux juste faire quelque chose de très simple aujourd'hui. Et eux, ouais, juste avec le client d'IA ouvert, pas l'agent, et grade, tu peux faire un chatbot simple, et eux, c'est tout. Donc, si j'ai pu le faire, tu peux le faire aussi. Le codage sauve des vies.
More from Phil

day in the life of a software engineer | 5 hour productivity | building my dev agency 🔥

day in the life of a software engineer | 3 hour productivity | coding my 6-figure community startup

day in the life of a software engineer | 5 hour productivity | coding our sns startup app LFG

day in the life of a software engineer | 5 hour productivity | creating apps that makes big money






