oldmanpushcart_个人页

个人头像照片 oldmanpushcart
个人头像照片
3
15
0

个人介绍

追求性能极限的人

擅长的技术

  • Java
获得更多能力
通用技术能力:

暂时未有相关通用技术能力~

云产品技术能力:

暂时未有相关云产品技术能力~

阿里云技能认证

详细说明
暂无更多信息

2024年09月

2024年03月

2022年10月

  • 发表了文章 2018-03-12

    JVM-SANDBOX模块编写EXAMPLE

  • 发表了文章 2016-01-15

    远程接口设计经验分享

  • 发表了文章 2015-12-08

    JVM飙高排查脚本-结构分析

正在加载, 请稍后...
滑动查看更多
  • 回答了问题 2024-09-19

    要java 使用DashScope模型对话,结果怎么实现流式输出?

    例子:对话流式输出 强调下:这个是用dashscope4j完成,是一个开源的dashscope三方Java SDK,不是官方的。
    踩0 评论0
  • 回答了问题 2024-03-21

    DashScope JAVA SDK支持function calling吗?

    你可以试试这个DashScope4j DashScope4j:灵积 Java SDK DashScope4j 是一个开源的灵积非官方 Java SDK,基于 JDK17 构建。它旨在提供一个功能丰富、易于集成和使用灵积API(通义千问模型)的Java库,以便开发者能够通灵积API轻松实现多模态对话、向量嵌入和图像处理等功能。 请注意:在使用 DashScope4j 时,你需要遵守灵积API的使用条款和条件。 重要更新:1.2.0;支持函数调用 灵积在 2024-03-12 放出了 函数调用 功能,当前支持的模型是大语言模型 qwen-turbo、qwen-plus、qwen-max、qwen-max-longcontext,DashScope4j 从 1.2.0 版本开始作为 Java SDK 首发支持函数调用 函数调用是我实际开发中最喜欢的一个功能,它扩展了大模型的能力边界,让AI具备了操纵现实的能力。而之前要做到这些事情我得通过 LangChain 来实现。 依赖使用 dependency> groupId>io.github.oldmanpushcartgroupId> artifactId>dashscope4jartifactId> version>1.2.1version> dependency> 函数调用示例 灵积在 2024-03-12 放出了函数调用的功能,当前支持的模型是大语言模型:qwen-turbo、qwen-plus、qwen-max、qwen-max-longcontext,下面是一个函数调用的示例: 单个函数调用示例:回显 假设我们有一个回显函数:echo @ChatFn(name = 'echo', description = '当用户输入echo:,回显后边的文字') public class EchoFunction implements ChatFunctionEchoFunction.Echo, EchoFunction.Echo> { @Override public CompletableFutureEcho> call(Echo echo) { return CompletableFuture.completedFuture(new Echo(echo.words())); } public record Echo( @JsonPropertyDescription('需要回显的文字') String words ) { } } 我们可以通过以下代码来调用这个函数: final var request = ChatRequest.newBuilder() .model(ChatModel.QWEN_MAX) .functions(new EchoFunction()) .user('echo: HELLO!') .build(); final var response = client.chat(request) .async() .join(); 输出日志 2024-03-19 21:28:38 DEBUG dashscope://chat/qwen-max => {'model':'qwen-max','input':{'messages':[{'role':'user','content':'echo: HELLO!'}]},'parameters':{'result_format':'message','tools':[{'function':{'name':'echo','description':'当用户输入echo:,回显后边的文字','parameters':{'type':'object','properties':{'words':{'type':'string','description':'需要回显的文字'}}}},'type':'function'}]}} 2024-03-19 21:28:40 DEBUG dashscope://chat/qwen-max {'words':'HELLO!'} 2024-03-19 21:28:40 DEBUG dashscope://chat/qwen-max => {'model':'qwen-max','input':{'messages':[{'role':'user','content':'echo: HELLO!'},{'role':'assistant','tool_calls':[{'function':{'name':'echo','arguments':'{\'words\': \'HELLO!\'}'},'type':'function'}],'content':''},{'role':'tool','name':'echo','content':'{\'words\':\'HELLO!\'}'}]},'parameters':{'result_format':'message','tools':[{'function':{'name':'echo','description':'当用户输入echo:,回显后边的文字','parameters':{'type':'object','properties':{'words':{'type':'string','description':'需要回显的文字'}}}},'type':'function'}]}} 2024-03-19 21:28:42 DEBUG dashscope://chat/qwen-max 级联函数调用示例:成绩查询 我们有两个函数 查询成绩函数:query_score计算平均分函数:compute_avg_score 现在需要查询某个同学的所有成绩,并计算其平均分。LLM需要先调用 query_score 函数查询成绩,然后再调用 compute_avg_score 函数计算平均分。 final var request = ChatRequest.newBuilder() .model(ChatModel.QWEN_PLUS) .functions(new QueryScoreFunction(), new ComputeAvgScoreFunction()) .user('张三的所有成绩,并计算平均分') .build(); final var response = client.chat(request) .async() .join(); 输出日志 2024-03-20 23:50:17 DEBUG dashscope://chat/qwen-plus => {'model':'qwen-plus','input':{'messages':[{'role':'user','content':'张三的所有成绩,并计算平均分'}]},'parameters':{'result_format':'message','tools':[{'function':{'name':'query_score','description':'query student's scores','parameters':{'type':'object','properties':{'name':{'type':'string','description':'the student name to query'},'subjects':{'type':'array','description':'the subjects to query','items':{'type':'string','enum':['CHINESE','MATH','ENGLISH']}}},'required':['name','subjects']}},'type':'function'},{'function':{'name':'compute_avg_score','description':'计算平均成绩','parameters':{'type':'object','properties':{'scores':{'type':'array','description':'分数集合','items':{'type':'number'}}}}},'type':'function'}]}} 2024-03-20 23:50:20 DEBUG dashscope://chat/qwen-plus {'message':'查询成功','data':[{'name':'张三','subject':'CHINESE','value':90.0},{'name':'张三','subject':'MATH','value':80.0},{'name':'张三','subject':'ENGLISH','value':70.0}],'success':true} 2024-03-20 23:50:20 DEBUG dashscope://chat/qwen-plus => {'model':'qwen-plus','input':{'messages':[{'role':'user','content':'张三的所有成绩,并计算平均分'},{'role':'assistant','tool_calls':[{'function':{'arguments':'{\'name\': \'张三\', \'subjects\': [\'CHINESE\', \'MATH\', \'ENGLISH\']}','name':'query_score'},'type':'function'}],'content':''},{'role':'tool','name':'query_score','content':'{\'message\':\'查询成功\',\'data\':[{\'name\':\'张三\',\'subject\':\'CHINESE\',\'value\':90.0},{\'name\':\'张三\',\'subject\':\'MATH\',\'value\':80.0},{\'name\':\'张三\',\'subject\':\'ENGLISH\',\'value\':70.0}],\'success\':true}'}]},'parameters':{'result_format':'message','tools':[{'function':{'name':'query_score','description':'query student's scores','parameters':{'type':'object','properties':{'name':{'type':'string','description':'the student name to query'},'subjects':{'type':'array','description':'the subjects to query','items':{'type':'string','enum':['CHINESE','MATH','ENGLISH']}}},'required':['name','subjects']}},'type':'function'},{'function':{'name':'compute_avg_score','description':'计算平均成绩','parameters':{'type':'object','properties':{'scores':{'type':'array','description':'分数集合','items':{'type':'number'}}}}},'type':'function'}]}} 2024-03-20 23:50:24 DEBUG dashscope://chat/qwen-plus {'avg_score':80.0} 2024-03-20 23:50:24 DEBUG dashscope://chat/qwen-plus => {'model':'qwen-plus','input':{'messages':[{'role':'user','content':'张三的所有成绩,并计算平均分'},{'role':'assistant','tool_calls':[{'function':{'arguments':'{\'name\': \'张三\', \'subjects\': [\'CHINESE\', \'MATH\', \'ENGLISH\']}','name':'query_score'},'type':'function'}],'content':''},{'role':'tool','name':'query_score','content':'{\'message\':\'查询成功\',\'data\':[{\'name\':\'张三\',\'subject\':\'CHINESE\',\'value\':90.0},{\'name\':\'张三\',\'subject\':\'MATH\',\'value\':80.0},{\'name\':\'张三\',\'subject\':\'ENGLISH\',\'value\':70.0}],\'success\':true}'},{'role':'assistant','tool_calls':[{'function':{'arguments':'{\'scores\': [90.0, 80.0, 70.0]}','name':'compute_avg_score'},'type':'function'}],'content':'张三的成绩如下:\n\n- 中文: 90.0分\n- 数学: 80.0分\n- 英语: 70.0分\n\n现在我们来计算他的平均分。'},{'role':'tool','name':'compute_avg_score','content':'{\'avg_score\':80.0}'}]},'parameters':{'result_format':'message','tools':[{'function':{'name':'query_score','description':'query student's scores','parameters':{'type':'object','properties':{'name':{'type':'string','description':'the student name to query'},'subjects':{'type':'array','description':'the subjects to query','items':{'type':'string','enum':['CHINESE','MATH','ENGLISH']}}},'required':['name','subjects']}},'type':'function'},{'function':{'name':'compute_avg_score','description':'计算平均成绩','parameters':{'type':'object','properties':{'scores':{'type':'array','description':'分数集合','items':{'type':'number'}}}}},'type':'function'}]}} 2024-03-20 23:50:25 DEBUG dashscope://chat/qwen-plus
    踩1 评论1
  • 回答了问题 2024-03-20

    通义千问java sdk添加function call之后不返回数据

    灵积的官方JavaSDK还不支持Tool调用,你可以试试我写的dashscope4j 函数调用示例 灵积在 2024-03-12 放出了函数调用的功能,当前支持的模型是大语言模型:qwen-turbo、qwen-plus、qwen-max、qwen-max-longcontext,下面是一个函数调用的示例: 假设我们有一个回显函数:echo @ChatFn(name = 'echo', description = '当用户输入echo:,回显后边的文字') public class EchoFunction implements ChatFunctionEchoFunction.Echo, EchoFunction.Echo> { @Override public CompletableFutureEcho> call(Echo echo) { return CompletableFuture.completedFuture(new Echo(echo.words())); } public record Echo( @JsonPropertyDescription('需要回显的文字') String words ) { } } 我们可以通过以下代码来调用这个函数: final var request = ChatRequest.newBuilder() .model(ChatModel.QWEN_MAX) .functions(new EchoFunction()) .user('echo: HELLO!') .build(); final var response = client.chat(request) .async() .join(); 输出日志 2024-03-19 21:28:38 DEBUG dashscope://chat/qwen-max => {'model':'qwen-max','input':{'messages':[{'role':'user','content':'echo: HELLO!'}]},'parameters':{'result_format':'message','tools':[{'function':{'name':'echo','description':'当用户输入echo:,回显后边的文字','parameters':{'type':'object','properties':{'words':{'type':'string','description':'需要回显的文字'}}}},'type':'function'}]}} 2024-03-19 21:28:40 DEBUG dashscope://chat/qwen-max {'words':'HELLO!'} 2024-03-19 21:28:40 DEBUG dashscope://chat/qwen-max => {'model':'qwen-max','input':{'messages':[{'role':'user','content':'echo: HELLO!'},{'role':'assistant','tool_calls':[{'function':{'name':'echo','arguments':'{\'words\': \'HELLO!\'}'},'type':'function'}],'content':''},{'role':'tool','name':'echo','content':'{\'words\':\'HELLO!\'}'}]},'parameters':{'result_format':'message','tools':[{'function':{'name':'echo','description':'当用户输入echo:,回显后边的文字','parameters':{'type':'object','properties':{'words':{'type':'string','description':'需要回显的文字'}}}},'type':'function'}]}} 2024-03-19 21:28:42 DEBUG dashscope://chat/qwen-max
    踩0 评论0
  • 回答了问题 2022-10-31

    设备批量上报属性、事件但云端无法正确流转

    终于摸索出原因了,因为这个API为新上的功能,而我很早之前就已经在“服务端订阅”中勾选了“设备上报消息”。解决方案是需要重新编辑订阅,取消再重新订阅一次“设备上报消息”,AMQP才能正确收到“设备属性批量上报”消息。
    踩1 评论0
  • 提交了问题 2022-10-16

    设备批量上报属性、事件但云端无法正确流转

  • 回答了问题 2019-07-17

    [@倚贤][¥20]当一个线程进入一个对象的一个synchronized方法后,其它线程是否可以进入对象的其他方法。

    当然可以,当然了。这个对象的其他方法不能被synchronized的同一个对象所lock
    踩0 评论0
  • 回答了问题 2019-07-17

    [@墨玖tao][¥20]error和exception有什么区别呢。

    Error和Exception的联系继承结构:Error和Exception都是继承于Throwable,RuntimeException继承自Exception。Error和RuntimeException及其子类称为未检查异常(Unchecked exception),其它异常成为受检查异常(Checked Exception)。 Error和Exception的区别 Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。如java.lang.StackOverFlowError和Java.lang.OutOfMemoryError。对于这类错误,Java编译器不去检查他们。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和预防,遇到这样的错误,建议让程序终止。Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。
    踩0 评论0
  • 回答了问题 2019-07-17

    [@墨玖tao][¥20]建不建议在java类的get方法里面对变量对象进行实例化操作?

    不明白究竟是想对那个变量对象进行实例化,所以索性把两种可能都回答了一:对对象的成员变量进行实例化:相当不建议,因为很容易会出现并发问题,你永远无法判断别人是在什么场合去调用你的get方法。甚至你都不知道别人会重复调用你多少次。二:对本地变量进行实例化:当然可以
    踩0 评论0
  • 回答了问题 2019-07-17

    [@墨玖tao][¥20]什么时候用assert

    assert是Java1.4版本引入的关键词,一般我会在写测试用例的时候会用assert,当然了,我更喜欢用JUnit。我也见过有的框架用assert关键词来做入参校验,纯属蛋疼,不推荐。
    踩0 评论0
  • 回答了问题 2019-07-17

    [@饭娱咖啡][¥20]大佬,我现在用的是JDK8,想换掉,是先JDK9然后JDK10再到JDK11,还是直接跳JDK11?

    JDK8好好的,有什么理由一定要用到JDK9/10/11的特性?如果没有,推荐用好JDK8,很多框架、工具都比较难接受JDK9的特性。如果你只是好奇想用JDK11,OK,那就直接用11
    踩0 评论0
  • 回答了问题 2019-07-17

    [@倚贤][¥20] 泛型常用特点,List<String>能否转为List<Object>

    Java中泛型是类型擦除的实现方式,所以List、List 和List在字节码层面是一模一样的。当然了,实际上你转不了,因为被Java语法约束了。'>
    踩0 评论0
  • 回答了问题 2019-07-17

    [@饭娱咖啡][¥20]Spring支持哪些依赖注入的方式?有什么区别?

    我不是专家,我只是专家的搬运工,嘎嘎嘎:https://blog.csdn.net/a909301740/article/details/78379720
    踩0 评论0
  • 回答了问题 2019-07-17

    [@项籍][¥20]如何合理地估算线程池大小?

    亲,这篇文章不错,可以参考:https://blog.csdn.net/u011519624/article/details/69263460/
    踩0 评论0
  • 回答了问题 2019-07-17

    [@墨玖tao][¥20]jsp程序的运行和普通Java程序有什么不同

    JSP本质上是一种解析式运行的语言,JSP第一次运行的时候会被编译成对应的Servlet,然后再运行。而Servlet必须跑在符合Servlet规范的容器中,这个Servlet容器也就是大家喜闻乐见的Tomcat、Jetty之类。所以我们在说Java服务器,其实大部分人说的都只是Servlet容器而已,真正的JavaEE企业级容器WebLogic等很多人平时都是用不全。普通的Java程序并没有这些约束,所以普通的Java容器可以不依赖于任何容器而直接运行。BTW,Tomcat本质上就是一个普通的Java程序
    踩0 评论0
  • 回答了问题 2019-07-17

    [@倚贤][¥20]线程有哪几种状态

    我不是专家,但我是知识的搬运工:https://blog.csdn.net/pange1991/article/details/53860651/
    踩0 评论0
  • 回答了问题 2019-07-17

    [@饭娱咖啡][¥20]try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?

    答案 finally{}的code会被执行,会在RETURN之前执行; 解析 原代码 public class Test { public static void main(String... args) { try { System.out.println('FROM:BEFORE'); return; } finally { System.out.println('FROM:FINALLY'); } } } 编译后运行 FROM:BEFORE FROM:FINALLY 原因 为了更好的解析运行后的结果,以及挣这20块钱,我们深入解答下:JVM中是怎么执行TRY...CATCH语句的。 16:return是我们真正即将要return的地方,注意看11~13行和21~23行,javac在编译的时候会将finally语句块的代码copy到return之前,所以finaly的code一定会在return之前执行 如果TRY...CATCH块中有多个return,那么每个return前边都会被copy了finally块的代码。 这里也不一定是绝对,不同版本的JVM有不同的优化策略,这里只是从更底层来证明:FINALLY一定会被运行,而且是在RETURN之前 public static void main(java.lang.String...); descriptor: ([Ljava/lang/String;)V flags: ACC_PUBLIC, ACC_STATIC, ACC_VARARGS Code: stack=2, locals=2, args_size=1 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #3 // String FROM:BEFORE 5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 11: ldc #5 // String FROM:FINALLY 13: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 16: return 17: astore_1 18: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 21: ldc #5 // String FROM:FINALLY 23: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 26: aload_1 27: athrow Exception table: from to target type 0 8 17 any LineNumberTable: line 5: 0 line 8: 8 line 6: 16 line 8: 17 StackMapTable: number_of_entries = 1 frame_type = 81 /* same_locals_1_stack_item */ stack = [ class java/lang/Throwable ] }
    踩0 评论0
正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息