@ bootstrapware/ 答题
来客问道. 部件显示一个引用的答案, 或者在无匹配时显示明显的倒置 .
本地模式是免费的. BYO是9.99美元/月 (你存储知识和答案). 东道主为19.99美元/月. 托管商店核准来源、衍生索引、访客问题、可选对话、未答复项目和引用。 主机包括每个工作空间每月2500个答案,1个GiB知识和索引,2,000个来源,4000个索引块每个app,20个MiB每个文件,以及30天的对话历史. 测试键是免费的 。 React 软件包不单独调用Hosted ask 。 过 createLocalAdapter() 或你自己的适配器.
pnpm add @bootstrapware/answers
非反应页面可以使用被主机嵌入的脚本取而代之(见下文脚本).
同伴依赖性 : react 财务报告和审定财务报表 react-dom (第18页).
当地
import { Answers, createLocalAdapter } from "@bootstrapware/answers";
import "@bootstrapware/answers/styles.css";
<Answers adapter={createLocalAdapter()} />
默认演示为闭角发射装置. presentation 可能会是 launcher, (中文(简体) ), section, (中文(简体) ), modal,或 window. Modal、窗口和发射器开始关闭,除非 defaultOpen。 。 。 .
本地适配器是北风外行(小时,回放,航运)的定型样本. 它不叫网络.
脚本
pnpm build 写入 dist/answers.iife.js非反应页面可以挂载相同的组件 :
<div id="answers"></div>
<script src="./dist/answers.iife.js"></script>
<script>
BootstrapwareAnswers.mount(document.getElementById("answers"), {});
</script>
主机脚本是 GET https://answers.bootstrapware.co/embed/v1.js。 。 。 .
再见
用您的 OpenAI 密钥运行您的服务器上的引擎 。 问题,知识和关键 留在你的基础设施.
// app/api/answers/route.ts (Next.js) — any runtime with fetch works
import { createAnswersBackend } from "@bootstrapware/answers/server";
const answers = createAnswersBackend({
siteName: "Acme",
openaiApiKey: process.env.OPENAI_API_KEY, // server env only
sitemap: "https://acme.com/sitemap.xml", // or urls: [...], or documents: [{ id, title, url, text }]
qa: [{ question: "Do you offer refunds?", answer: "Yes, within 14 days of purchase." }],
});
export const POST = (request: Request) => answers.handler(request);
该索引以第一个问题为基础并保存在记忆中. 打电话 answers.refresh() 修改内容后( 它返回) { pages, chunks, skipped }· ; skipped 列出每个被遗漏的页面和原因,包括一个重定向到不同页面的URL,以及 onRefresh 或保存 answers.index.toJSON() 并传回作为 snapshot 在重新启动时跳过重嵌。 过 retrieve 来使用自己的矢量存储.
答案只来自索引段落. refresh() 也获取 /llms.txt 财务报告和审定财务报表 /llms-full.txt 每个来源在 urls 或网站映射,当主机以文本或Markdown的形式发布时,并忽略缺失的文件。 草案引用了它没有收回的东西,或者在引用的段落中写出一个价格或数字,并且不从引用的数字(一个单步的或一个被引用数额的%,四舍五入到最近的一分之一,或者一个相继的堆栈,每行的四舍五入到最近的一分之一)中引用,则被拒绝,访问者得到回扣。 以逗号、点、空格或平面表示的同千位分隔符算作源中的数字,和以逗号表示的小数,例如 19,99 计数为 $19.99。基于计费命令的堆栈总数被拒绝,除非访客设定了命令,答案是命令事项,或者答案将总和的行逐项列出。 自定义 QQA 总是被考虑,一个匹配条目首先被回答. 当来源对一个是/否问题保持沉默时,答案是说网站没有声明(如果来源有支持联系). 如何提问引用文件页;没有写出新的代码.
自定义 QQA 在运行时可以更改而无需刷新 : call await answers.upsertQa({ id, question, answer }), (中文(简体) ), answers.removeQa(id),或 answers.setQa([...]) 从您的保存处理器。 只有被更改的条目被嵌入,它回答下一个问题. 相关的自定义 QQA 总是提供给模型, 即使很多页面的分数都超过它们, 包括通过自己的设置 retrieve。 。 。 .
然后将部件指向该路径 :
<Answers
appId="ana_..."
adapter={createByoAdapter({
ask: async ({ sessionId, question, pageContext }) => {
const response = await fetch("/api/answers", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ sessionId, question, pageContext }),
});
return response.json();
},
})}
/>
问题文本留在后端. pageContext 仅是页面 URL 和标题.