From 25453d4dee9d9f729ec87120ed9a09d58eca1015 Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Thu, 18 Apr 2024 22:33:46 -0500 Subject: [PATCH 1/9] fix: use web host env to decide whether to render google tag script --- src/Blog/Components/App.razor | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Blog/Components/App.razor b/src/Blog/Components/App.razor index 9c914b6..9a3cb1e 100644 --- a/src/Blog/Components/App.razor +++ b/src/Blog/Components/App.razor @@ -1,4 +1,6 @@ - +@inject IWebHostEnvironment WebHostEnvironment + +
@@ -17,14 +19,15 @@ - + + } From aee22edc62fd460861443fa0d13e93b9dee926fe Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Fri, 26 Apr 2024 07:21:45 -0500 Subject: [PATCH 2/9] docs: update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b66838c..f847a17 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ The source code for [my blog](https://blog.stevanfreeborn.com). -You can read more in detail about building in [this blog post](https://blog.stevanfreeborn.com/building-a-markdown-blog-with-blazor-and-docker). +You can read more in detail about building the blog in [this blog post](https://blog.stevanfreeborn.com/building-a-markdown-blog-with-blazor-and-docker). ## Technologies and Languages Used From 70cd210d5b5372c1b42a4edfc8c8aa1a20804802 Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Sat, 4 May 2024 09:08:23 -0500 Subject: [PATCH 3/9] posts: unpublish test blog --- src/Blog/wwwroot/posts/test-blog/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Blog/wwwroot/posts/test-blog/index.md b/src/Blog/wwwroot/posts/test-blog/index.md index 7e34c46..ad525d9 100644 --- a/src/Blog/wwwroot/posts/test-blog/index.md +++ b/src/Blog/wwwroot/posts/test-blog/index.md @@ -2,7 +2,7 @@ { "title": "Test Blog", "lead": "This is a test blog post.", - "isPublished": true, + "isPublished": false, "publishedAt": "2024-04-10", "openGraphImage": "posts/test-blog/og-image.png", } From 2eb4cc90aa59bff27fbbacbf5114a0020135de96 Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Sat, 4 May 2024 09:08:36 -0500 Subject: [PATCH 4/9] fix: add white-space property --- src/Blog/Components/Posts/Feed.razor.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Blog/Components/Posts/Feed.razor.css b/src/Blog/Components/Posts/Feed.razor.css index 5e75c3a..314a1a6 100644 --- a/src/Blog/Components/Posts/Feed.razor.css +++ b/src/Blog/Components/Posts/Feed.razor.css @@ -35,6 +35,7 @@ & h3, & .date, & .lead { + white-space: nowrap; text-wrap: nowrap; overflow: hidden; text-overflow: ellipsis; From 70ef59f8f748052fff8a9669a51cf8dda75472d0 Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Sat, 4 May 2024 09:12:54 -0500 Subject: [PATCH 5/9] posts: add blog about generative ai --- .../index.md | 25 ++++++++++++++++++ .../og-image.png | Bin 0 -> 1546234 bytes 2 files changed, 25 insertions(+) create mode 100644 src/Blog/wwwroot/posts/navigating-generative-ai-implementation-complexity/index.md create mode 100644 src/Blog/wwwroot/posts/navigating-generative-ai-implementation-complexity/og-image.png diff --git a/src/Blog/wwwroot/posts/navigating-generative-ai-implementation-complexity/index.md b/src/Blog/wwwroot/posts/navigating-generative-ai-implementation-complexity/index.md new file mode 100644 index 0000000..0ed5710 --- /dev/null +++ b/src/Blog/wwwroot/posts/navigating-generative-ai-implementation-complexity/index.md @@ -0,0 +1,25 @@ +```json meta +{ + "title": "It Doesn't Work All the Time, But When It Does, It's Magic", + "lead": "I've been playing with generative AI lately, looking at how you might build features with it. But I'm kind of struggling with seeing a roadmap to getting consistent quality out of this stuff for specific use cases. At times it feels like trying to herd cats. Granted I'm a relative noob, but here are some of my initial thoughts and questions", + "isPublished": true, + "publishedAt": "2024-05-04", + "openGraphImage": "posts/navigating-generative-ai-implementation-complexity/og-image.png", +} +``` + +Over the last couple weeks I’ve been spending some of my free time working with generative AI. + +What I’ve found most interesting is that seems like currently implementations exists on a very narrow spectrum of complexity. On the lower end you have something like “take user input, send it to a LLM provider, and give back the response to the user” with a fair warning to the user that results may vary. This to me is very much the product that OpenAI built initially with GPT-3. They even were fairly open about the fact that it was mainly an experiment and that they didn’t know what people would do with it. + +But as soon as you want to do something more sophisticated or provide a more concrete guarantee of the quality of responses - which seems definitely the case if you want to put AI into your product in a meaningful way - you go immediately to needing to either pursue some sort of retrieval augmented generation approach (RAG) or use fine tuning. + +The RAG approach feels kind of brittle and fine tuning puts you into a whole other world of considerations, both also present this question of “where do you get the data?”. Either way as the product owner you immediately gain a whole new set of challenges to overcome to if you are going to build something that you can confidently put in front of users to solve a problem over and over again and charge them for it. + +I mean when you do get a response that was exactly what you were expecting it feels magical, but pushing that from “it works” to “it works every time for everyone” seems really challenging. And from a quality perspective I’m still a little stumped at how you’d best approach providing good assurance to something that is by nature non-deterministic? + +For example it’s pretty accepted in data analytics use cases that if a user makes a request to get a report of data they should be able to have a high degree of confidence that the data they are looking at is accurate and can be used to make decisions nearly 100% of the time. If that same data were to be called up through an LLM and summarized and the LLM delivers an inaccurate summary is it acceptable to just ask the user to try a different prompt? Does then hit or miss quality of LLMs become sort of an accepted quirk? + +I’m sure there is a ton of way smarter people than me working on this stuff, but after some initial experiments these are some of the things I’m thinking about and wondering how to tackle. + +I know there is so much pressure on companies right now to be a part of the AI wave, but in my - knowing limited - experience it seems like using it in a meaningful way is a pretty big undertaking that requires a lot of considerations both technical and non-technical. diff --git a/src/Blog/wwwroot/posts/navigating-generative-ai-implementation-complexity/og-image.png b/src/Blog/wwwroot/posts/navigating-generative-ai-implementation-complexity/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..4c33b608933725a62741009689a3740eae522f06 GIT binary patch literal 1546234 zcmb@sbyQrz(k}`G8GLYe2=4Cg?(XjH?i$>J26uN4Zo$J~$>0{;A=u@d``vTDbMAZZ zkN4iJwb$%j{p;%Ls@lD)t2$OiNg5de9{~aa0$El@LJa}}x)A~b$_oJdK~Wa*H~9F2 zcahO`hk!sC`NsvBL61W4fx5BP(DBewRNymrc4RWOa5l4K@^N(eKtn(X`0#z)I$C;| zlKMD0IJxur2vYwO!S`|h4>B{g5CZ9c{RG@BtoYORN=7s-~&&Sl||M0&LFyB9Y#o0~6
z+1Wuz+| ykBeew7P%*MPnZ_XuGF
zB9djQ(9}vIMEJhzrnf`@7D-D `U(wIiB7oUUff>KQ>Aia`#}F}t2|c5zLf6^wWH>5azpdIkNRJ$i!?d;3SQT2U?+
ztkz4eua;P6qXfrAz)5sJbbgy5NTloPhb?L9#^IV92G&-(wq1E|8@ewWbt4rh710d;
zf_?SrTe>7S!Dj=w5CT*Z*MDv2^Q1L0(}*-dXd-JQPe_Usktc{uBNBzmQ?e}jz@=$Q
zmL{Yst{-#Vqm|%7gYX8GWN4MsJ8+1NW}Pj`3Q2GduLVh=nH-GhPjb>kvZF@4ws#+V
z%51sfwa>r8laseNTR!Ifhd<-8Jm>W3Gp?_$xGtY_`{)(E^48aQ^Y=baUgSI~KIHtp
zr@Z_07hErw^m6#lH{WD5ImERqj*e3P)&Fo0*J!@`XMabgQW|3@>pCVZdyhwTHD}iZ
zWLwN{jkaI*z>0@*8yxoXVcvo +yZ#zVHg!QM+RvUC4F+1eOdL73Ep!zKQ-W`0z%
zI4M|88+;MS>x4C%Gf-nxHe^{=oX@AUwjxPkxR#Oi`V`HS$^4vy^J7kyQ>M0NE-huE
z@JSkzY_b%3IsLRxCi^5hN2N)OZ6;uY#|4KA(QCmvBDLIj8XJ(#BW*NA55~n9Zw;vo
zXctI>A`6<-NiqkSh!Nk307Vuf+w%le)TOt!rfE%_AW4ryv#3j~v$5+hH6}pO&S`}p
zWLczbCxDg&B+i0Su`AG5(F10f^^kQ;!wEL5f?*KiiZQB`n5G3ENVJY}6{+w(pt_$;
z)8M_Nm!=4}4-!L~V
zhwr{a5Q?*>ulU8k{kOb$@d90~>2FWi$_sR7SzRrt=2z6~GD>(ii@J`$$~xwzVqGuk
zq4}-v{g6NS=l_)35AI^tC6C_y4IX{+34igkzu@@tikfIrFH(t06AAtw@-36k-I;oThucgEP<@%-`$SI-yphXrrmdxbaN
ze84M*N1U9Ta&msg+3b?V^@2y&KjGxVkIAMJhLbUaL7)BMlsh|z(HBQVHY!?yl3gfK
zREvnNM!HF0dztmp$$3NwU<1L@`49yHHfE&@FhNkcieNf$WGg+}GP-VV11rCYsfKEs
z&aDtCreP*&7DFM?BLR%xfiOO3OuZgZySe4OkQp#1JTvwPa5GCY|
z6gb>W*OASk