TypeChat,用TypeScript快速接入AI大语言模子

[复制链接]
查看1202 | 回复0 | 2023-8-23 11:46:25 | 显示全部楼层 |阅读模式
TypeChat是C# 和 TypeScript 之父 Anders Hejlsberg全新的开源项目。利用AI在自然语言和应用程序和API之间创建桥梁,而且利用TypeScript。
如今出现了很多大型语言模子,但是怎样将这些模子最好地集成到现有的应用程序中,怎样利用人工智能来继续用户哀求并转化为我们的应用程序可以运行的内容,而且确保我们的程序是安全的,可以信托的?
TypeChat 就是为相识决如许的题目。通过编写TypeScript范例界说,而不是自然语言提示来引导语言模子提供范例良好的布局化的相应数据,用schema替代prompt。

准备工作


  • TypeChat默认是利用openAI大概Azure openAI的api,须要提前准备好,这里我利用Azure openAI的api(比力好申请且不会被封)。如果不利用openAI可以自己实现替换,这里暂时先用openAI
  • 安装typechat依赖
    1. pnpm install typechat
    复制代码
  • 在根目录下.env设置openai的key
  1. AZURE_OPENAI_ENDPOINT=https://YOUR_RESOURCE_NAME.openai.azure.com/openai/deployments/YOUR_DEPLOYMENT_NAME/chat/completions?api-version=2023-05-15
  2. AZURE_OPENAI_API_KEY=Your Azure OpenAI API key
  3. # OPENAI_MODEL=The OpenAI model name (e.g. `gpt-3.5-turbo` or `gpt-4`)
  4. # OPENAI_API_KEY=Your OpenAI API key
复制代码

通过自然语言哀求掘金文章列表的Demo


  • 界说Schema,这就是希望模子将自然语言按照界说的范例为束缚,天生布局化的相应数据
  1. // 定义排序类型,按照推荐or最新
  2. export type SortType = "recommend" | "latest";
  3. // 定义文章类型
  4. export type ArticleType = "frontend" | "backend" | "android" | "ios" | "ai";
  5. // 定义函数,获取文章列表
  6. export type API = {
  7.   getArticles(
  8.     sortType: SortType,
  9.     limit: number,
  10.     categoryId?: ArticleType
  11.   ): void;
  12. };
复制代码

  • 自然语言哀求并解析
  1. import {
  2.   createLanguageModel,
  3.   processRequests,
  4.   createProgramTranslator,
  5.   evaluateJsonProgram,
  6.   getData,
  7. } from "typechat";
  8. // 根据环境变量的配置,创建语言模型,
  9. // typechat为了简化依赖,所以没有用azure或者openai的sdk,而直接通过url接口请求
  10. // 如果不使用openai的模型也可以通过TypeChatLanguageModel接口实现自己的LLM交互
  11. const model = createLanguageModel(process.env);
  12. // 读取上一步定义的模型文件
  13. const schema = fs.readFileSync(
  14.   join(dirname(fileURLToPath(import.meta.url)), "Schema.ts"),
  15.   "utf8"
  16. );
  17. // 创建一个对象,该对象可以将自然语言请求转换为程序,以JSON的形式展现,由上一步定义的API组成函数
  18. const translator = createProgramTranslator(model, schema);
  19. // 以交互方式或从命令行上指定的输入文件处理请求
  20. processRequests("说你想干嘛--->", process.argv[2], async (request) => {
  21.         // 将自然语言请求转换为T类型的对象。
  22.   const response = await translator.translate(request);
  23.   if (!response.success) {
  24.     return;
  25.   }
  26.   const program = response.data;
  27.   // 将JSON转换为TypeScript代码以进行验证。
  28.   // 如果转换成功,则返回一个Success<string>对象;如果JSON无法转换,则返回Error对象。
  29.   console.log(getData(translator.validator.createModuleTextFromJson(program)));
  30.   /**
  31.    * 使用简单的解释器评估JSON程序。函数调用会被传递给第二个参数onCall回调函数进行调度。
  32.    * @param program 要评估的JSON程序
  33.    * @param onCall 用于处理程序中函数调用的回调函数
  34.    * @returns 返回一个promise
  35.    */
  36.   const result: any = await evaluateJsonProgram(program, handleCall);
  37.   console.log(`Result: ${result}`);
  38. });
  39. const handleCall = async (func: string, args: any[]): Promise<any> => {
  40.   // 对解析后的函数和参数进行处理,并返回一个promise
  41.         // 请求掘金api并获取响应数据返回结果.....
  42.   return
  43. };
复制代码
完整代码在https://github.com/zhaomengfan/typechat-example

启动使命,出现交互输入,这里就是输入须要解析的自然语言

输入”看些新文章”,运行一步步打印结果
  1. // 得到自然语言解析后的转换的对象 program
  2. {
  3.   "@steps": [
  4.     {
  5.       "@func": "getArticles",
  6.       "@args": [
  7.         "latest",
  8.         10
  9.       ]
  10.     }
  11.   ]
  12. }
  13. // createModuleTextFromJson将JSON转换为TypeScript代码以进行验证,
  14. // 返回的TypeScript源代码为ECMAScript模块,该模块从“./schema”导入一个或多个类型,
  15. // 并以适合TypeScript编译器进行类型检查的方式将这些类型与JSON对象的表示形式组合在一起
  16. import { API } from "./schema";
  17. function program(api: API) {
  18.   return api.getArticles("latest", 10);
  19. }
  20. //evaluateJsonProgram评估program并且,将解析后的func,args作为参数传给onCall
  21. // handleCall获取下面的func和args后进行相应处理并返回结果,这里是去请求接口
  22. // func
  23. getArticles
  24. // args
  25. [ 'latest', 10 ]
复制代码
末了得到结果


再实验一个例子,输入“我想看看前端推荐的内容”,并实行得到结果
  1. // program
  2. {
  3.   "@steps": [
  4.     {
  5.       "@func": "getArticles",
  6.       "@args": [
  7.         "recommend",
  8.         10,
  9.         "frontend"
  10.       ]
  11.     }
  12.   ]
  13. }
  14. // createModuleTextFromJson
  15. import { API } from "./schema";
  16. function program(api: API) {
  17.   return api.getArticles("recommend", 10, "frontend");
  18. }
  19. // evaluateJsonProgram
  20. // func
  21. getArticles
  22. // args
  23. [ 'recommend', 10, 'frontend' ]
复制代码

以上就是一个简单的示例,根据自然语言,并根据界说的Schema解析为范例安全的布局化数据,而且根据解析的结果去进行相应的哀求获取文章列表。
官方网站也提供了一些示例可以体验一下https://microsoft.github.io/TypeChat/docs/examples/
总结:

TypeChat让我们能轻松地利用 TypeScript 范例来引导模子,可以安全的将大语言模子集成到现有的应用程序中,可以探索很多新的产物情势。
不过由于刚开源TypeChat也不是很完满,比如现在还不能对话交互。
总之,这是一个对熟悉TypeScript的你来说一个轻松利用大语言模子连策应用程序的方式,各人可以多实验实验,并持续关注。

来源:https://blog.csdn.net/github_33420275/article/details/131911834
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则