Launch HN: Hello (YC S22) – A search engine for developers
We’ve found that most technical searches fall into a few categories: ad-hoc how-tos, understanding an API, recalling forgotten details, research, or troubleshooting. Google is too broad and shallow of a search tool to be good at this. Even after sifting through the deluge of spammy, irrelevant sites pumped full of SEO, you still have to manually find your answer through discussion boards or documentation. Their “featured snippet” approach works for simple factoid queries but quickly falls apart if a question requires reasoning about information across multiple webpages.
Our approach is narrow and deep — to retrieve detailed information for topics relevant to developers. When you submit a query, we pull raw site data from Bing, rerank them, and extract understanding and code snippets with our proprietary large language models. We use seq-to-seq transformer models to generate a final explanation from all of this input.
For our honors theses at UT Austin, we researched prototypes of large generative language models that can answer complex questions by combining information from multiple sources. We found that GPT-3, GPT-Neo/J/X, and similar autoregressive language models that predict text from left to right are prone to “hallucinating” and generating text inconsistent with the “ground truth” document. Training a sequence-to-sequence language model (T5 derivative) on our custom dataset designed for factual generation yielded much better results with less hallucination.
After creating this prototype, we started actively developing Hello with the idea that searching should be just like talking to a smart friend. We want to build an engine that explains complex topics clearly and concisely, and lets users ask follow-up questions using the context of their previous searches.
For example, when asked “what type of semaphore can function as a mutex?”, Hello pulls in the raw text from all five search results linked on the search page to generate: “A binary semaphore can be used as a mutex. Mutexes and semaphores are two different types of synchronization mechanisms. A mutex is a lock that prevents two threads from accessing the same resource at the same time. A semaphore is used to signal that a resource has become available.” We're biased, of course, but we think that the ability to reason abstractly about information from multiple web pages is a cool thing in a search engine!
We use BERT-based models to extract and rank code snippets if relevant to the query. Our search engine currently does well at answering applicable how-to questions such as “Sort a list of tuples by the second element”, “Set a response cookie in FastAPI”, “Get value of input in React”, “How to implement Dijkstra's algorithm.” Exclusively using our own models has also freed us from dependence on OpenAI.
Hello is and will always be free for individual devs. We haven’t rolled out any paid plans yet, but we’re planning to charge teams per user/month to use on internal data scattered around in wikis, documentation, slack, and emails.
We started Hello Cognition to scratch our own itch, but now we hope to improve the state of information retrieval for the greater developer community. If you'd like to be part of our product feedback and iteration process, we'd love to have you—please contact us at founders@sayhello.so.
We're looking forward to hearing your ideas, feedback, comments, and what would be helpful for you when navigating technical problems!
207 comments
[ 0.35 ms ] story [ 194 ms ] threadThe same is with any input, even with predefined ones; the progress bar gets to the end (slowly) and nothing happens.
Firefox works.
Is that legal?
Isn't there copyright on those?
> Hello pulls in the raw text from all five search results linked on the search page to generate...
Not to be negative but I think I'll stick to the sites and people that made the results and not a middleman that intends to charge for other people's work.
Like every web search done on Google? That said, I think attribution links should be displayed, license too if available. Copilot should be doing the same to defuse this discussion.
So I only see one of two outcomes:
1. Courts rule copilot is fair use in which case your search engine becomes largely superfluous
2. Courts rule copilot is infringement in which case all of these types of applications cannot be used commercially
1. Copilot itself infringing licenses (MS copying and sharing copyrighted code)
2. Developer infringing licenses (Allowing code from MS into own codebase).
Case 2 is avoided by Hello, because it provides a link to the original, allowing the developer to find and respect the license. Therefore Hello is net superior (with respect to people using the service at least).
https://beta.sayhello.so/search?q=Java+aot+compile
Does not seem to mention graal anywhere. (It's just a random test query that popped into my mind)
Asking a full question for a code snippet seems to work: https://beta.sayhello.so/search?q=How+do+I+sort+a+map+in+Jav...
How do you deal with licensing for these snippets though. Is that up to the user to verify?
It is currently up to the user to verify licensing for the snippets, but we try to make it easy (using the See Reference button) to go to the original source.
"TypeError: N.at is not a function. (In 'N.at(-1)', 'N.at' is undefined)"
"fhir appointment spec
I'm not sure what you're asking about, but I'll try to answer it as best I can. __ Appointment is a FHIR data type. It's a way to describe a time slot for a patient to be seen by a healthcare provider. Appointments can be booked, cancelled, rescheduled, or canceled and rebooked. It can also be used to describe the location of the appointment. "
Pretty impressive summary given that it doesn't exist in any one specific page.
"meta programming python" does not give as good results as
https://beta.sayhello.so/search?q=meta+programming+python
"how to implement a meta class in python"
https://beta.sayhello.so/search?q=how+to+implement+a+meta+cl...
I applaud you for trying to make a new search engine - it's not something sane people would try to do because of a certain behemoth eating everyone's lunch. It's going to take extraordinary insight and out of the box thinking to get something really good.
Here's a rather trivial example: Q: "Who founded Y Combinator?" A: "Paul Graham founded Y Combinator with Jessica Livingston and Trevor Blackwell."
If you scroll to the bottom of the answer page to ask a follow-up question: Q: "How old is he?" A: "Paul Graham is 57 years old. He founded Y Combinator in 2005."
It may be a weird suggestion, but if the query to general topics returns something like this https://unzip.dev/archive (check how compact it is and delivers almost all you need to know about the subject to get you going), it would be perfect.
#myDiv{ margin:0px auto; }
- stackoverflow's UI actually serves well to provide a sort of "ambient" information that rapidly indicates not just the best answers, but the best most-recent answers. Oftentimes, and especially in rapidly-evolving dev languages/frameworks, what was the best answer a few months ago may no longer be the best answer and the ability to rapidly scan the comments that would indicate this is valuable. - in addition those stackoverflow comments and links within them can point to additional info that can save the dev time (potentially pointing to the dev misidentifying the problem: "don't do this, this is the real issue <link>).
I think with the traditional google->stackoverflow or google->[some documentation site, forum, etc] user flow you actually get layers of ambient cues as to relevance, recency and quality that we've grown accustom to. Even if your product ultimately serves better answers I'd worry that lacking these cues would make a user like me feel as though I'm blindly trusting an answer that seems to have come from the ether (sort of like github copilot).
As low-hanging fruit maybe adding level-meters beside each result that indicates these dimensions could help (like npmjs.com does with npm pkg results in their ui).
I love the product idea and it looks like a strong start! Good luck!
If I specifically list Python/Javascript the first couple results are not even in that language, 3rd/4th are. And you have to click link/see reference to even see the language
You would think if your language is included in the query it should be heavily prioritised
Let's say I'm searching for front-end frameworks. Each article has the word "best" in the title, yet doesn't link to resources like State of JS, Stack Overflow Survey or other similar sites. So, in this context "best" is subjective. I can't be bothered with subjective results when I'm trying to find out what is actually considered "best" or in this case popular.
Query: how to base64 encode a string in ruby
Response: I'm not sure what you mean by "base64 encode a string in ruby" - that's a bit of a misnomer. Base64 encoding is a way of storing data in a form that can be decoded by a human. It's not a secure way to store data, but it's useful if you want to send a message to someone who doesn't understand the language you're using.
The right answer is in the third link provided but it's not exactly correct.
Google gives back the Ruby Module Base64 docs as the first hit.
I'd strongly suspect it's the same reason DDG does so: Bing offers a search API, and Google has no incentive to offer access to its index and results
There are plenty of companies that make a living scraping results out of Google, so I don't mean to say it's impossible, it's just a monster amount of energy playing cat and mouse with what is effectively an unlimited budget to stop one from accomplishing that goal
One feature request at first glance: please default to the system font stack for code snippets. I see you're currently using Consolas, a Microsoft typeface, which is not pleasant to see as a mac user.
You can use this to default to the system font on every platform:
I searched the following in say hello.so.
"Service worker fails on request for audio file"
I got back a couple of results related to general service worker use but none that get close to discussing the core problem that lead to the solution.
The same query in Google returns several results that together pointed me to the solution (it was around range headers in requests for media data types).
This is just one example though. I think the problem you are trying to fix is worth the effort. I just wonder if this is where humans are still stronger than computers - gathering unstructured data to use in problem solving.
Then again maybe that's just me.
If I need to know how an API works, I go straight to the docs.
Put another way, troubleshooting is a several times per week task for me, and doing something net new is a once a month task which may not result in a search query.
You’re going to have a hard time staying on my radar focusing on the less frequent case.
Possibly the traffic patterns are different for more junior devs, but my hazy recollection of my early career is spending most of my time troubleshooting.
It would be a good idea to preserve whitespace, or arguably better, integrate optional syntax formatting
Overall, this search engine looks promising
I've played around just a bit and clicked some of the preset examples and like what I'm seeing so far. I bookmarked it and will try it out more as I code over the next few days.
Main initial feedback: I'd really like to see version/last-updated-at info accompanying all results. One of the biggest problems with Google for code stuff is finding outdated examples and docs. Even better would be a dropdown that lets me see results depending on the version of the language/framework/tools I'm using.