Merge branch 'main' into stevanfreeborn/post/providing-real-time-feedback
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
The source code for [my blog](https://blog.stevanfreeborn.com).
|
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
|
## Technologies and Languages Used
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ function StartContainer
|
|||||||
|
|
||||||
$containerName = "blog.stevanfreeborn.com.$containerColor"
|
$containerName = "blog.stevanfreeborn.com.$containerColor"
|
||||||
$postDirEnv = "FilePostServiceOptions__PostsDirectory=wwwroot/posts"
|
$postDirEnv = "FilePostServiceOptions__PostsDirectory=wwwroot/posts"
|
||||||
$containerId = docker run -d -p 8080 --name $containerName --env $postDirEnv $dockerTag
|
$containerId = docker run -d --restart always -p 8080 --name $containerName --env $postDirEnv $dockerTag
|
||||||
|
|
||||||
if ($LASTEXITCODE -ne 0)
|
if ($LASTEXITCODE -ne 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
<!DOCTYPE html>
|
@inject IWebHostEnvironment WebHostEnvironment
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
@@ -17,14 +19,15 @@
|
|||||||
<script src="https://cdn.jsdelivr.net/npm/clipboard@2.0.11/dist/clipboard.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/clipboard@2.0.11/dist/clipboard.min.js"></script>
|
||||||
<script src="https://www.googletagmanager.com/gtag/js?id=G-5JM0TZTRHF"></script>
|
<script src="https://www.googletagmanager.com/gtag/js?id=G-5JM0TZTRHF"></script>
|
||||||
<script src="prism.js"></script>
|
<script src="prism.js"></script>
|
||||||
<script>
|
@if (WebHostEnvironment.IsProduction())
|
||||||
if (window.location.hostname.includes('localhost') === false) {
|
{
|
||||||
|
<script>
|
||||||
window.dataLayer = window.dataLayer || [];
|
window.dataLayer = window.dataLayer || [];
|
||||||
function gtag(){dataLayer.push(arguments);}
|
function gtag(){dataLayer.push(arguments);}
|
||||||
gtag('js', new Date());
|
gtag('js', new Date());
|
||||||
gtag('config', 'G-5JM0TZTRHF');
|
gtag('config', 'G-5JM0TZTRHF');
|
||||||
}
|
</script>
|
||||||
</script>
|
}
|
||||||
<script src="_framework/blazor.web.js"></script>
|
<script src="_framework/blazor.web.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
& h3,
|
& h3,
|
||||||
& .date,
|
& .date,
|
||||||
& .lead {
|
& .lead {
|
||||||
|
white-space: nowrap;
|
||||||
text-wrap: nowrap;
|
text-wrap: nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
```json meta
|
||||||
|
{
|
||||||
|
"title": "I Am Glad I Failed That Test",
|
||||||
|
"lead": "It may sound crazy, but failing a test in college was one of the best things that happened to me during that time. It gave me a strategy for learning that has been invaluable to me ever since.",
|
||||||
|
"isPublished": true,
|
||||||
|
"publishedAt": "2024-05-16",
|
||||||
|
"openGraphImage": "posts/i-am-glad-i-failed-that-test/og-image.png",
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
In the fall semester of my junior year in college I took a class called Cell Biology with [Dr. Bradley Creamer](https://www.linkedin.com/in/bradley-creamer-a735b423/). The first test we took I bombed...bad. It was the first time that had put on that kind of performance and I was frustrated. Lucky for me I went to a university where my professors had regular office hours.
|
||||||
|
|
||||||
|
The next morning I was the first one through the professor's door to get some advice on what I could do better to prepare. He gave me what has come to be some of the best advice on learning I've ever got. He said I shouldn't just read the chapters and do the problem sets, but also try to explain to someone else what I'd just read or learned. Like have a study group and try to teach each other.
|
||||||
|
|
||||||
|
For the rest semester that is what I did. I'd pull a whiteboard into the living room of our tiny apartment and I'd pretend as if I was lecturing on the topic. It was an immediate unlock to figuring out where the gaps in my understanding were. And since then it has been a go to strategy for learning new things.
|
||||||
|
|
||||||
|
Being able to learn new things has defined the first part of my career. From a personal trainer to a medical scribe to a food scientist and now a quality engineer, I've had to learn a lot of new things. And I've always gone back to that strategy of trying to teach someone else what I've learned. It's been invaluable to me.
|
||||||
|
|
||||||
|
I'm glad I screwed up that test and I'm grateful I had the blessing of a great teacher.
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 804 KiB |
@@ -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 - knowingly 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.
|
||||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 1.5 MiB |
@@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
"title": "Test Blog",
|
"title": "Test Blog",
|
||||||
"lead": "This is a test blog post.",
|
"lead": "This is a test blog post.",
|
||||||
"isPublished": true,
|
"isPublished": false,
|
||||||
"publishedAt": "2024-04-10",
|
"publishedAt": "2024-04-10",
|
||||||
"openGraphImage": "posts/test-blog/og-image.png",
|
"openGraphImage": "posts/test-blog/og-image.png",
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user